Swift - Bài 2 - Chương trình đầu tiên

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 :grin:

11 Likes

Swift có thể để làm phần mềm Desktop app cho macOS.
Ngoài ra còn có viết app trên Apple Watch dựa trên watchOS.

Ngoài ra còn Swift có thể làm web server, bằng cách sử dụng các thư viện Kitura hoặc Perfect

Hiện tại, ứng dụng nhiều nhất của Swift là viết app cho iOS và macOS.

6 Likes

Tải Xcode về mà mình cũng chẳng động vào, toàn dùng VSC. Swift nhìn cũng hay nhưng code app thì mình chưa tìm hiểu nhiều lắm.

2 Likes

A post was split to a new topic: Muốn tìm mấy file psd của ios app để chuyển sang code thì từ khoá tìm kiếm thế nào?

2 Likes

swift rất hay và mạnh xin cảm ơn

1 Like

Có swift CLI không anh? :grin: Em chưa đủ điều kiện mua mac và không muốn giả lập nên dùng vs code thêm plugin swift vào

2 Likes

ko ra bài tiếp à bạn ơi, có thể đưa link web hay gì của bạn để mình tham khảo ko, mình cũng đang tìm hiểu về swift

Bạn có thể download cuốn này về đọc :slightly_smiling_face::

https://books.goalkicker.com/SwiftBook/

4 Likes

Tài liệu chính thức từ Apple, không phải của mình.
https://docs.swift.org/swift-book/LanguageGuide/TheBasics.html

Bài của mình chắc chắn không chất lượng bằng doc chính thức. Vì vậy, bạn đọc được thì nên học trên đó.

Còn mình chỉ thử khả năng viết tutorial thôi. Dạo này mình cũng đang xử lý nhiều task nên ít thời gian viết tiếp.

5 Likes

cuốn sách khá hay (y) , mình sẽ cố gắng đọc hiểu bằng vốn tiếng anh ít ỏi của mình :smile:

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?