Hằng ngày khi nghiên cứu về Swift, chúng ta thường hay được biết đến những khái niệm như Closure, Extension, Functional Programming...Tuy nhiên việc đọc hiểu tính chất định nghĩa và cách ứng dụng chúng trong những project thực tế lại khác nhau, có rất nhiều người nắm rõ được định nghĩa, tính chất của chúng nhưng lại không thể áp dụng triệt để ngoài thực tế. 10 mẹo dưới đây sẽ giúp bạn có cách nhìn rõ ràng nhất về việc sử dụng những tính năng tuyệt vời trên của Swift trong việc tối ưu code của mình. Ở đây tôi mạn phép lược bớt phần định nghĩa, mà chỉ nêu lên ví dụ áp dụng của từng trường hợp.
Ví dụ: Viết chương trình tính số bình phương của một số:
Code chuẩn:
func square(x: Int) -> Int { return x * x }
var squaredOFFive = square(x: 5)
square(x:squaredOFFive) // 625
Ở đây thay vì khai báo thêm một đối tượng squareOfFive làm cho khối code trở nên cồng kềnh hơn thì chúng ta có thể đóng gọi lại trong một Extension như sau:
extension Int {
var squared: Int { return self * self }
}
5.squared // 25
5.squared.squared // 625
Như các bạn đã thấy khối hàm trên đã trở nên gọn gàng và dễ quản lý hơn.
Ví dụ: In tất cả các phần tử trong mảng
var stringArray = ["Bob", "Bobby", "SangJoon"]
var intArray = [1, 3, 4, 5, 6]
var doubleArray = [1.0, 2.0, 3.0]
func printStringArray(a: [String]) { for s in a { print(s) } }
func printIntArray(a: [Int]) { for i in a { print(i) } }
func printDoubleArray(a: [Double]) {for d in a { print(d) } }
Quá nhiều hàm và biến thừa thãi, ở đây chúng ta chỉ việc khai báo một Generic Function như sau:
func printElementFromArray<T>(a: [T]) {
for element in a { print(element) } }
Ví dụ: In từ "Count" 5 lần
var i = 0
while 5 > i {
print("Count")
i += 1 }
Bạn tạo ra một biến đếm i để kiểm tra số lần chạy func print(), điếu đó đòng nghĩa với việc sẽ có nhiều biến -> sử dụng thêm nhiều bộ nhớ và dẫn đến nhiều vấn đề trong code.
Do đó, sử dụng một vòng for đơn giản sẽ làm code trở nên tối ưu hơn nhiều:
for _ in 1...5 { print("Count") }
Ví dụ: Tạo một làm login cơ bản
var myUsername: Double?
var myPassword: Double?
// Hideous Code
func userLogIn() {
if let username = myUsername {
if let password = myPassword {
print("Welcome, \(username)"!)
}
}
}
Có quá nhiều if trong khối lệnh trên, điều này là không hay chút nào, có thể bạn hiểu logic này nhưng người đi sau maintain sẽ rất khó khăn trong việc đọc hiểu logic của hàm trên.
func userLogIn() {
guard let username = myUsername, let password = myPassword
else { return }
print("Welcome, \(username)!") }
Sự khác biệt là rất rõ ràng với guard let. Nếu username và password là nil thì khối lệnh trên sẽ thoát khỏi hàm bằng cách gọi return. Còn lại thì sẽ chạy hàm print ở dưới. Rất gọn gàng và dễ hiểu đúng không nào?
Ví dụ:Tìm đường kính của một hình tròn
func getDiameter(radius: Double) -> Double { return radius * 2}
func getRadius(diameter: Double) -> Double { return diameter / 2}
getDiameter(radius: 10) // return 20
getRadius(diameter: 200) // return 100
getRadius(diameter: 600) // return 300
Ỏ đây chúng ta đã tạo ra quá nhiều mối liên kết giữa các hàm. Điều này là không nên vì nó sẽ làm luồng chạy của project trở nên hỗn loạn. Hãy làm chúng trở nên tách bạch và trong sáng hơn bằng cách sử dụng Computer Property:
var radius: Double = 10
var diameter: Double {
get { return radius * 2}
set { radius = newValue / 2} }
radius // 10
diameter // 20
diameter = 1000
radius // 500
Ví dụ: Viết hàm bán vé xem phim
switch person {
case "Adult": print("Pay $7")
case "Child": print("Pay $3")
case "Senior": print("Pay $4")
default: print("You alive, bruh?") }
Thay vì sử ngồi liệt kê hết mọi trường hợp như khối lệnh Switch trên thì chúng ta có thể dùng Enum để tối ưu hóa việc liệt kê các trường hợp
enum People { case adult, child, senior }
var person = People.adult
switch person {
case .adult: print("Pay $7")
case .child: print("Pay $3")
case .senior: print("Pay $4")
}
Bạn sẽ không phải ngồi gõ lần lượt từng trường hợp nữa, mà các trường hợp sẽ lần lượt được highlight ra cho bạn sau dấu ".". Một thay đổi nhỏ nhưng giúp bạn tiết kiệm được rát nhiều thời gian.
Ví dụ: Viết hàm chọn theme color
var userChosenColor: String?
var defaultColor = "Red"
var colorToUse = ""
if let Color = userChosenColor { colorToUse = Color } else
{ colorToUse = defaultColor }
Quá dài, hãy gói gọn chúng thành một câu lệnh duy nhất như sau:
var colorToUse = userChosenColor ?? defaultColor
Nếu màu user chọn = nil thiì màu mặc định sẽ là defaultColor. Ngược lại, thì màu được chọn sẽ là màu của user.
var currentHeight = 185
var hasSpikyHair = true
var finalHeight = 0
if hasSpikyHair { finalHeight = currentHeight + 5}
else { finalHeight = currentHeight }
Tương tự như ví dụ số 7, chúng ta thay khối lệnh if - else bằng một đoạn mã đơn giản và ngắn gọn hơn:
finalHeight = currentHeight + (hasSpikyHair ? 5: 0)
Nếu điều kiện hasSpiKy == True thì chúng ta thêm 5 vào biến finalHeigth, ngược lại thì + 0.
Ví dụ: Tìm kiếm số chẵn trong dãy số từ 1 đến 10:
//Code mẫu
var newEvens = [Int]()
for i in 1...10 {
if i % 2 == 0 { newEvens.append(i) } }
print(newEvens) // [2, 4, 6, 8, 10]
Thay vì viết một đoạn logic như trên thì chúng ta hoàn toàn có thể sử dụng function độc lập cho case trên:
var evens = Array(1...10).filter { $0 % 2 == 0 }
print(evens) // [2, 4, 6, 8, 10]
// Function bình thường
func sum(x: Int, y: Int) -> Int { return x + y }
var result = sum(x: 5, y: 6) // 11
Thay vì khai báo một function thì chúng ta có thể khai báo một biến và chứa trong đó một closure (block) thực thi logic trên
Nguồn: Techmaster
Nguồn bài viết: https://medium.com/ios-geek-community/10-tips-to-become-better-swift-developer-a7c2ab6fc0c2#.ekknew2zn
Chuyên viên lập trình Python-Odoo
Location: Hà Nội
Salary: 17 Mil - 25 Mil VND
CÔNG TY TNHH TƯ VẤN GIẢI PHÁP DOANH NGHIỆP TPC
Location: Hồ Chí Minh
Salary: Competitive
CÔNG TY TNHH TƯ VẤN GIẢI PHÁP DOANH NGHIỆP TPC
Location: Hồ Chí Minh
Salary: Competitive
PROJECT MANAGER - SOFTWARE ENGINEERING
Vietnam Concentrix Services Company Limited
Location: Hồ Chí Minh
Salary: Competitive
Thực tập sinh Frontend Developer
Công Ty Cổ Phần Việt Nam Booking
Location: Hồ Chí Minh
Salary: Over 2 Mil VND
MID-LEVEL BACKEND DEVELOPER (.NET)
Location: Hồ Chí Minh
Salary: Competitive
[TUYỂN GẤP]_CHUYÊN VIÊN PHẦN MỀM/ IT software developer (Lâm Đồng)
Location: Lâm Đồng
Salary: Competitive
[Hội An, Quảng Nam] Shopify Website Developer
Location: Quảng Nam
Salary: 20 Mil - 25 Mil VND
Location: Hà Nội
Salary: 25 Mil - 33 Mil VND
CÔNG TY TNHH THỜI TRANG VÀ MỸ PHẨM ÂU CHÂU
Location: Hồ Chí Minh
Salary: Competitive