Trong bài 2 này, chúng ta sẽ cùng học về các Cú pháp Syntax cơ bản dùng trong Swift.
Sau khi bạn tìm hiểu kỹ được các syntax swift rồi thì bạn sẽ rất dễ dàng và nhanh chóng có thể đọc hiểu code mẫu, cũng như bắt tay vào code app của riêng mình.
- Chương 1: Giới thiệu chung về Swift
- Chương 2: Cú pháp (syntax) cơ bản
- Chương 3: Các thư viện của Swift
Chương 2: Cú pháp Syntax Swift cơ bản
Trong Bài 1, bạn nhận được đoạn code sample cho bài Hello World! như sau:
import UIKit
var myString = "Hello, World!"
println(myString)
Lệnh import
Chúng ta dùng lệnh import khi muốn nhúng bất kỳ một thư viện nào của Objective-C hoặc C trực tiếp vào chương trình Swift. Như trong đoạn code ví dụ trên, sau khi import gói UIKit vào, thì tất cả các hàm Cocoa thuộc gói UIKit (APIs, các hàm thuộc thư viện, các class xử lý giao diện, ...) sẽ sẵn sàng để bạn có thể code được bằng Swift.
Nếu bạn chưa biết, thì Cocoa được triển khai bằng Objective-C, và là một tập các lệnh superset viết lên trên C như một layer tiện dụng cao hơn (về bản chất nó vẫn là C, nhưng có chứa nhiều hàm, nhiều sự kiện, APIs, được viết sẵn để tiện cho chúng ta sử dụng). Và vì thế nên bạn sẽ rất dễ dàng nhúng cả code C, hay thậm chí là C++, vào ứng dụng Swift của bạn.
Nếu bạn chưa biết, thì Cocoa được triển khai bằng Objective-C, và là một tập các lệnh superset viết lên trên C như một layer tiện dụng cao hơn (về bản chất nó vẫn là C, nhưng có chứa nhiều hàm, nhiều sự kiện, APIs, được viết sẵn để tiện cho chúng ta sử dụng). Và vì thế nên bạn sẽ rất dễ dàng nhúng cả code C, hay thậm chí là C++, vào ứng dụng Swift của bạn.
Tokens in Swift
Một chương trình viết bằng Swift thì gồm có nhiều tokens khác nhau, và một token thì có thể là 1 keyword (từ khoá), một khai báo, một constant, một string, hay là một symbol.
Comments
Comments là đoạn text trong trương chình của bạn, nhưng nó sẽ không được biên dịch trong quá trình build code. Nó thường dùng để bạn ghi chú về chức năng của function, của 1 dòng lệnh, ... nhằm giúp bạn dễ dàng nhớ lại hoặc hiểu được mục đích của các dòng lệnh được ghi chú đó.
Comment thì có 2 kiểu.
Comment hiển thị trên nhiều dòng, thì bắt đầu bằng /* và kết thúc khi gặp ký tự */ như ví dụ:
Comment nhiều dòng có thể được lồng vào nhau, trong Swift, ví dụ comment sau đây là hợp lệ (tất nhiên bạn không nên làm như thế này nhiều, mà hãy cố gắng giữ tỷ lệ 1-1 nghĩa là 1 cặp mở /* đi kèm 1 cặp đóng */ mà thôi):
Nếu bạn chỉ muốn comment nhanh trên một dòng, hãy dùng // ở trước đoạn comment, ví dụ:
Comment thì có 2 kiểu.
Comment hiển thị trên nhiều dòng, thì bắt đầu bằng /* và kết thúc khi gặp ký tự */ như ví dụ:
/* My first program in Swift */
Comment nhiều dòng có thể được lồng vào nhau, trong Swift, ví dụ comment sau đây là hợp lệ (tất nhiên bạn không nên làm như thế này nhiều, mà hãy cố gắng giữ tỷ lệ 1-1 nghĩa là 1 cặp mở /* đi kèm 1 cặp đóng */ mà thôi):
/* My first program in Swift is Hello, World!
/* Where as second program is Hello, Swift! */
Nếu bạn chỉ muốn comment nhanh trên một dòng, hãy dùng // ở trước đoạn comment, ví dụ:
// My first program in Swift
Semicolons - ký tự chấm phẩy - ;
Swift không yêu cầu bạn phải viết dấu semicolon ; sau mỗi dòng code, mà có cũng được không có cũng được.
Tuy nhiên, nếu bạn gõ liên tiếp nhiều câu lệnh (statements) trên cùng một dòng code, thì nó là bắt buộc phải dùng semicolon ; sau mỗi câu lệnh (statement). Điều đó nhằm giúp cho trình biên dịch biết phân biệt được các câu lệnh khác nhau, và nếu chúng ta thiếu dấu semicolon ; này, trình biên dịch sẽ báo lỗi.
Ví dụ cách dùng dấu ; vào bài Hello World bạn có thể xem thử như sau:
Tuy nhiên, nếu bạn gõ liên tiếp nhiều câu lệnh (statements) trên cùng một dòng code, thì nó là bắt buộc phải dùng semicolon ; sau mỗi câu lệnh (statement). Điều đó nhằm giúp cho trình biên dịch biết phân biệt được các câu lệnh khác nhau, và nếu chúng ta thiếu dấu semicolon ; này, trình biên dịch sẽ báo lỗi.
Ví dụ cách dùng dấu ; vào bài Hello World bạn có thể xem thử như sau:
import UIKit
/* My first program in Swift */
var myString = "Hello, World!"; println(myString)
Identifiers
Một identifier trong swift là một cái tên dành cho một biến, một function, hoặc các item do người dùng tự định nghĩa ra. Một identifier thì thường được bắt đầu các ký tự A-Z, a-z, hoặc dấu gạch dưới _, và sau đó thì có thể là các số từ 0-9 hoặc các chữ cái, dấu gạch dưới khác.
Swift không chấp nhận các ký tự đặc biệt trong tên của identifier như là @, $ hay %. Swift là ngôn ngữ lập trình có phân biệt case-sensitive, và nghĩa là có phân biệt chữ hoa chữ thường (ví dụ biến Abc sẽ khác biệt với biến aBc, và được coi là 2 identifier khác nhau).
Dưới đây là một số ví dụ về các tên identifier được chấp nhận trong Swift:
Để sử dụng 1 từ đã được sử dụng bởi Swift như là từ khoá (reserved word), làm identifier, thì cần phải thêm dấu nháy đơn ' vào trước vào sau tên đó. Ví dụ nếu bạn đặt identifier là class thì là không hợp lệ, nhưng 'class' thì lại được chấp nhận.
Tuy nhiên có lời khuyên là không nên đặt identifier giống các từ khoá đó.
Swift không chấp nhận các ký tự đặc biệt trong tên của identifier như là @, $ hay %. Swift là ngôn ngữ lập trình có phân biệt case-sensitive, và nghĩa là có phân biệt chữ hoa chữ thường (ví dụ biến Abc sẽ khác biệt với biến aBc, và được coi là 2 identifier khác nhau).
Dưới đây là một số ví dụ về các tên identifier được chấp nhận trong Swift:
- Azad
- zara
- abc
- move_name
- a_123
- myname50
- _temp
- j
- a23b9
- retVal
Để sử dụng 1 từ đã được sử dụng bởi Swift như là từ khoá (reserved word), làm identifier, thì cần phải thêm dấu nháy đơn ' vào trước vào sau tên đó. Ví dụ nếu bạn đặt identifier là class thì là không hợp lệ, nhưng 'class' thì lại được chấp nhận.
Tuy nhiên có lời khuyên là không nên đặt identifier giống các từ khoá đó.
Keywords - Từ khoá
Như đề cập ở trên, thì dưới đây là một số từ khoá đã được sử dụng trong Swift, và nhắc lại là bạn không nên dùng nó để đặt làm identifier như là tên biến, constants, method name, trừ khi bạn có thêm vào trước và sau nó ký tự ':
Các từ khoá dùng trong khai báo
class | deinit | enum | extension |
func | import | init | internal |
let | operator | private | protocol |
public | static | struct | subscript |
typealias | var |
Từ khoá sử dụng trong các câu lệnh
break | case | continue | default |
do | else | fallthrough | for |
if | in | return | switch |
where | while |
Từ khoá sử dụng trong các biểu thức và kiểu
as | dynamicType | false | is |
nil | self | Self | super |
true | _COLUMN_ | _FILE_ | _FUNCTION_ |
_LINE_ |
Từ khoá sử dụng trong 1 số tình huống context hoàn cảnh
associativity | convenience | dynamic | didSet |
final | get | infix | inout |
lazy | left | mutating | none |
nonmutating | optional | override | postfix |
precedence | prefix | Protocol | required |
right | set | Type | unowned |
weak | willSet |
Whitespace - Ký tự trắng
Một dòng chứa toàn ký tự trắng, hoặc với comment, còn được gọi là blank line - dòng trống, và trình biên dịch Swift sẽ hoàn toàn bỏ qua chúng khi dịch code.
Whitespace - là từ dùng chung trong Swift để chỉ các: khoảng trắng, tabs, ký tự dòng mới (xuống dòng), và comment.
Whitespace thường dùng để ngăn cách các phần trong một câu lệnh để trình biên dịch phân biệt được các thành phần trong câu lệnh như là khởi đầu, kết thúc, operators, ... Thường thì có ít nhất 1 ký tự trắng như là space giữa các phần trong một câu lệnh.
Ví dụ:
Tất nhiên, không bắt buộc phải đặt dấu gạch trắng ở giữa fruit, và =, hoặc giữa = và apples, tuy nhiên bạn nên đặt đầy đủ như trên để dễ dàng trong việc đọc code.
Whitespace - là từ dùng chung trong Swift để chỉ các: khoảng trắng, tabs, ký tự dòng mới (xuống dòng), và comment.
Whitespace thường dùng để ngăn cách các phần trong một câu lệnh để trình biên dịch phân biệt được các thành phần trong câu lệnh như là khởi đầu, kết thúc, operators, ... Thường thì có ít nhất 1 ký tự trắng như là space giữa các phần trong một câu lệnh.
Ví dụ:
var age
int fruit = apples + oranges //get the total fruits
Tất nhiên, không bắt buộc phải đặt dấu gạch trắng ở giữa fruit, và =, hoặc giữa = và apples, tuy nhiên bạn nên đặt đầy đủ như trên để dễ dàng trong việc đọc code.
Literals
Literal là phần giá trị của biến trong source code. Ví dụ:
92 // Integer literal
4.24159 // Floating-point literal
"Hello, World!" // String literal