Phần tiếp theo mình sẽ phân tích đoạn code mà Apple cung cấp cho chúng ta mỗi khi tạo Playground mới.
import UIKit
var str = "Hello, playground"
Khác với C, Java hay C#, Swift không có entry function là hàm main() để thực thi chương trình. Bạn chỉ cần viết code là chương trình tự động chạy từ trên xuống dưới, dù là trên Playground hay là lưu trên file.
Mỗi câu lệnh (statement) được viết trên 1 hàng hoặc nhiều hàng. Trong đoạn code trên có 2 statements, mỗi câu lệnh không cần kết thúc bằng dấu ; như các ngôn ngữ khác. Điều này có thể là lợi thế của Swift, tuy nhiên, theo ý mình, việc có ; hay không có ; ở cuối statement không quan trọng. Có lệnh ; sẽ dễ dàng cho compiler phân tích Swift source code. Nhưng chủ đề về compiler vượt ra ngoài phạm vi bài viết này.
Câu lệnh đầu tiên
import UIKit
Swift có nhiều module khác nhau, UIKit là module chứa các class, struct, enum dùng để tạo UI trên iOS. Bạn không cần bận tâm khái niệm class, struct, enum là gì, bạn có thể tạm bỏ qua nó. Tương tự, CoreGraphics là module để vẽ đồ hoạ 2D, Foundation là tập hợp các class và function cơ bản phục vụ các module khác. Cũng như trên, bạn chỉ cần biết có khái niệm function, định nghĩa của nó cũng sẽ được đề cập sau.
Để sử dụng các class, struct,… của 1 module bất kì, bạn phải thực hiện “import” nó vào Playground trước khi sử dụng. Nếu bạn không import, compiler sẽ báo lỗi. Cú pháp của lệnh import:
import ModuleName
import là từ khoá, sau đó là space hoặc nhiều space, kế tiếp là tên module, không có dấu ; cuối câu lệnh
Câu lệnh thứ 2:
var str = "Hello, playground"
var là từ khoá khai báo biến. Trong swift có 2 cách khai báo biến: let và var.
- let: dùng để khai báo constant variable, một khi biến được tạo sẽ không được gán lại giá trị mới.
- var: biến thường, có thể gán lại nhiều lần.
Cú pháp câu lệnh khai báo biến:
let|var variableName [: Type Annotation] = initial value
-
let
,var
là từ khoá -
variableName
là tên biến -
Type Annotation
là kiểu dữ liệu của biến -
initial value
là giá trị khởi tạo ban đầu
Ví dụ:
khai báo biến grade
kiểu số nguyên Int
, giá trị khởi tạo là 7
let grade: Int = 7
khai báo biến name
kiểu String
, giái trị khởi tạo là “Mai Linh”
var name: String = "Mai Linh"
Type Annotation không có giá trị nil
Trong Java, mỗi biến kiểu reference type đều có thể có gía trị null. Tuy nhiên, trong Swift, đều này không thể xảy ra, nghĩa là bạn không thể khởi tạo giá trị 1 biến với kiểu nil. Như đoạn code sau sẽ không được compiler chấp nhận
let pointX: CGFloat = nil
Muốn sử dụng giá trị nil làm giá trị khởi tạo thì cần wrap kiểu giữ liệu vào Optional. Đoạn code sau gán giá trị name bằng nil
var optionalName: Optional<String> = nil
Kiểu Optional, có thể được viết gọn bằng cách thêm ? vào sau kiểu dữ liệu được wrap. Đoạn code trên tương đương
var optionalName: String? = nil
Nếu giá trị khởi tạo của 1 kiểu opional là nil, thì có thể bỏ qua, lúc đó compiler tự động gán giá trị ban đầu là nil
var optionalName: String?
Type Inference
Trong khai báo biến Swift, type annotation có thể bỏ, lúc đó kiểu của biến là kiểu của giá trị khởi tạo. Ví dụ sau đây khởi tạo biến product là kiểu string, velocity là kiểu Double
let product = "Swift Programming Language"
var velocity = 20.4 // km/h
Let vs. Var
Let để khai báo constant variable. Nếu gán lại thì compiler báo lỗi
let laptop = "macbook"
laptop = "dell xps" // error
Ngược lại, var là biến thông thường. Có thể gán lại
var language = "Swift"
language = "Java" // ok
Convention
Tên biến nên đặt theo camelCase, từ đầu tiên viết thường, các từ sau viết hoa chữ cái đầu tiên, như các biến sau là đúng convention:
firstName, lastModifiedTime, productId, jsonObject
Các biến sau không tuân thủ theo convention
first_name, ProductId, json object
Trở lại câu lệnh thứ 2 trong Playground:
var str = "Hello, playground"
Câu lệnh này khai báo biến str kiểu String, giá trị khởi tạo là “Hello, playground”, và biến có thể thay đổi được. Sau khi câu lệnh thực thi, giá trị của str là “Hello, playground”
Note: dành cho những tính năng vụn vặt, nhỏ lẻ
Dấu ; cuối statement
Mỗi câu lệnh trong Swift có thể kết thúc bằng ; hoặc không. Theo convention thì Apple khuyến khích không nên đặt ; vào cuối statement, trừ 1 vài trường hợp đặc biệt. Và theo kinh nghiệm của mình, mình chưa gặp trường hợp nào cần phải đặt ; vào cuối statement cả. Nên các bạn có thể xem như không có ; vào cuối statement.
Tất cả câu lệnh trong ví dụ sau đều hợp lệ
import Foundation;
import UIKit
let number = 123;
let str = "Hello, World!"
Sử dụng emoji làm tên biến
Bạn có thể dùng các emoji đặt tên biến, đặt trong chuỗi string, nhưng không khuyến khích và nên bỏ qua.
Phần này mình sẽ screenshot để thấy chính xác emoji hiển thị thế nào trên macOS
Hi vọng bạn yêu thích ngôn ngữ Swift sau khi đọc bài của mình