CHƯƠNG 1: TỔNG QUAN o Tham khảo ý kiến của thầy hướng dẫn cùng các anh, chị và bạn bè có kinh nghiệm liên quan đến các vấn đề của khóa luận để tạo tính chính xác và khoa học của đề tài. o Khảo sát nghiệp vụ xây dựng hệ thống. • Phương pháp mô hình hóa: Mô phỏng ứng dụng từ bước thiết kế cài đặt cho đến kết quả thành phẩm của ứng dụng.8 Ý nghĩa khoa học thực tiễn Hệ thống với giao diện trực quan, rõ ràng, giảm thiểu các thao tác không cần thiết giúp người dùng dễ dàng sử dụng và tiếp cận với nhạc cụ một cách nhanh và đơn giản nhất. 4 CHƯƠNG 2: CƠ SỞ LÝ THUYẾT Chương 2: CƠ SỞ LÝ THUYẾT 2.1 Về ngôn ngữ lập trình Swift 2.1 Khái niệm Swift là một ngôn ngữ lập trình hướng đối tượng của Apple dành cho việc phát triển iOS và OS X được giới thiệu bởi Apple tại hội nghĩ WWDC 2014.
Swift được mong đợi sẽ tồn tại song song cùng Objective – C, ngôn ngữ lập trình hiện tại dành cho các hệ điều hành của Apple. Swift được thiết kế là một ngôn ngữ có khả năng phòng chống lỗi cao. Swift được biên dịch với trình biên dịch LLVM (Low Level Virtual Machine). Swift là một ngôn ngữ lập trình hướng đối tượng của Apple dành cho việc phát triển iOS và OS X được giới thiệu bởi Apple tại hội nghĩ WWDC 2014.
Swift được mong đợi sẽ tồn tại song song cùng Objective – C, ngôn ngữ lập trình hiện tại dành cho các hệ điều hành của Apple. Swift được thiết kế là một ngôn ngữ có khả năng phòng chống lỗi cao. Swift được biên dịch với trình biên dịch LLVM (Low Level Virtual Machine). Swift là ngôn ngữ script hiện đại, mang tới hiệu năng cao hơn Object-C.Trong số thử nghiệm benchmark, Swift cho hiệu năng nhanh hơn Python và thậm chí là nhanh hơn cả Objective-C.
Trên bộ IDE (phần mềm lập trình) Xcode của Apple, mã nguồn Swift sẽ được đồ thị hóa theo thời gian thực. Điều này có nghĩa rằng lập trình viên có thể chạy và kiểm lỗi mã nguồn Swift một cách dễ dàng không kém gì Python.1 Ưu điểm Tiết kiệm thời gian biên dịch: swift là ngôn ngữ “kịch bản (Scripting)” thực thi trực tiếp từng dòng lệnh nên việc kiểm tra kết quả của các lập trình viên trở nên nhanh và dễ dàng hơn rất nhiều khi người dùng đang viết. Người lập trình viên không phải ngồi chờ biên dịch. Các dòng code rất ngắn và dễ đọc.
Ba dòng code Objective C có thể gói gọn vào một dòng code Swift. Đều này sẽ đẩy nhanh quá trình phát triển ứng dụng và tăng hiệu quả cho quá trình bảo trì và vá lỗi trong tương lai. 5 CHƯƠNG 2: CƠ SỞ LÝ THUYẾT Việc lập trình với Swift cũng trực quan hơn nhờ phương thức sắp xếp hợp lý ở giao diện sử dụng và kiểu hiển thị kết quả theo thời gian thực trong Xcode Runtime. Nghĩa là, trong lúc viết mã, kết quả sẽ ngay lập tức hiện ra để tiện việc chỉnh sửa và hình ảnh cũng có thể xem ngay từ bên trong IDE.
Ngoài ra Xcode cũng dựng các kịch bản thực hiện trong các ứng dụng, tính năng này giúp lập trình viên có thể quản lý ứng dụng khỏi bị sự cố tràn bộ nhớ. Cuối cùng là Swift tạo ra ứng dụng có sức ép phần cứng thấp hơn Objective – C, vì vậy người dùng sẽ tận hưởng trải nghiệm game ấn tượng hơn trên các thiết bị iOS.2 Nhược điểm Swift là ngôn ngữ mới, các nhà phát triển ứng dụng iOS sẽ mất một khoảng thời gian đáng kể để làm chủ ngôn ngữ mới của Apple. Giảm tốc độ phát triển của hệ sinh thái ứng dụng Apple. Một mối lo ngại khác có thể kể đến là các ứng dụng rác.
Do swift giúp quá trình phát triển ứng dụng trở nên dễ dàng hơn trước đây, nên số lượng ứng dụng chất lượng kém xuất hiện trên gian hàng App Store có thể sẽ gia tăng. Các cấu trúc, hàm, biến hằng và các control trong Swift.2 Các đặc trưng của Swift 2.1 Các dữ liệu cơ bản 2.1 Số nguyên – Integers Là kiểu số nguyên. Swift cung cấp Signed và Unsigned integer trong mẫu 8, 16, 32 và 64 bit. Những số nguyên theo một qui ước đặt tên tương tự như C, trong đó một số nguyên không dấu 8 – bit có kiểu Uint8, và mộ số nguyên có dấu 32-bit có kiểu Int32.
Giống như tất cả các kiểu trong Swift, các kiểu số nguyên có tên viết bằng chữ in hoa. Giá trị thấp nhất, cao nhất trong Integer. Có thể kiểm tra giá trị cao nhất của từng kiểu integer với thuộc tính Max, thấp nhất của integer với thuộc tính Min. 6 CHƯƠNG 2: CƠ SỞ LÝ THUYẾT let minValue = UInt8.min // giá trị thấp nhất của UInt8 là 0 let maxValue = UInt8.max // giá trị cao nhất của UInt8 là 255 - Int o Kiểu Int thay thế hết tất cả kích thước cụ thể và phù hợp với từng nền tảng.
o Trong nền tảng 32 bit, kiểu Int có kích thước Int32. o Trong nền tảng 64 bit, kiểu Int có kích thước Int64. o Miền giá trị của Int trong nền tảng 32-bit: -2147483648 đến 147438647. - UInt o Swift cũng cung cấp một loại số nguyên không dấu, uint, trong đó có kích thước tương tự như bản kích thước từ các nền tảng hiện tại: o Trên nền tảng 32-bit, UINT có kích thước giống như UInt 32 o Trên một nền tảng 64-bit, Uint có kích thước giống như UInt64.
Chú ý: Sử dụng UINT chỉ khi người dùng đặc biệt cần một loại số nguyên không dấu với kích thước tương tự như bản kích thước của nền tảng. Nếu không phải trường hợp trên, thì Int được ưa thích hơn.2 Kiểu Float và kiểu Double Là một dạng phân số, Có thể lưu trữ những số thập phân mà kiểu integer không lưu trữ được. Swift cung cấp 2 kiểu là: - Float (32-bit). 7 CHƯƠNG 2: CƠ SỞ LÝ THUYẾT //Giá trị lưu trữ lớn nhất của kiểu float var float: Float = FLT_MAX //Kết quả: 3.402823e+38 //Giá trị lưu trữ lớn nhất của kiểu double var double:Double = DBL_MAX //Kết quả: 1.3 An toàn kiểu và kiểu suy luận - Kiểu Safe và Kiểu Inference Swift là một ngôn ngữ lập trình an toàn.
Vì thế Swift muốn người dùng phải khai thác rõ ràng về các kiểu giá trị. Nếu người dùng khai báo kiểu String thì không thể truyền giá trị kiểu Int hoặc ngược lại. Bởi vì Swift thực hiện kiểm tra kiểu (type check) khi biên dịch và báo hiệu những kiểu không phù hợp và lỗi. Điều này cho phép người dùng nắm bắt và sửa lỗi càng sớm càng tốt.
Kiểm tra kiểu giúp người dùng tránh được lỗi khi họ đang làm việc với các kiểu giá trị khác nhau. Tuy nhiên, không có nghĩa là người dùng phải xác định kiểu của mỗi hằng và biến mà người dùng khai báo. Nếu người dùng không chỉ định các kiểu giá trị, Swift sẽ sử dụng kiểu Inference để tìm ra kiểu thích hợp dựa trên giá trị mà người dùng đã cung cấp. Kiểu Inference đặt biệt hữu ích khi người dùng khai báo một hằng hoặc một biết có giá trị ban đầu: let meaningOfLife = 42 // meaningOfLife được hiểu là kiểu Int let pi = 3.14159 // pi được hiểu là kiểu Double Double let anotherPi = 3 + 0.14159 // anotherPi Được hiểu là kiểu Double 8 CHƯƠNG 2: CƠ SỞ LÝ THUYẾT 2.4 Chuyển đổi kiểu số (Numeric Type Conversion).
- Chuyển đổi số nguyên (Integer Conversion). Ở ví dụ dưới hằng so1 và hằng so2 có 2 kiểu số nguyên khác nhau, vì thế ta phải ép kiểu của hằng so1 sang cùng kiểu với hằng so2 là kiểu Int16. let so2: UInt16 = 2_000 let so1: UInt8 = 1 let tong = so2 + UInt16(one) - Chuyển đổi kiểu Int với kiểu Float Double Ở ví dụ dưới hằng so3 có kiểu Int và hằng so4 có kiểu Double, vì thế ta phải ưu tiên ép kiểu Int sang Double. let so3 = 3 let so4 = 0.14159 let pi = Double(so3) + so4 // pi có giá trị là 3.14159, và được hiểu là kiểu Double 2.5 Kiểu bí danh - Kiểu Aliases Thay thế một kiểu hiện có.
Được khai báo với từ khóa typealias typealias alias = UInt32 var so5:alias = 5 // so5 có giá trị là 5 9 CHƯƠNG 2: CƠ SỞ LÝ THUYẾT Ta có thể thấy kiểu alias có tên alias được nhận kiểu UInt32 và biến so5 có kiểu alias. Thực chất biến so5 nhận kiểu UInt32 thông qua alias. Từ ví dụ trên ta thấy kiểu alias hữu ích khi muốn đề cập đến một kiểu đã tồn tại với tên khác.6 Kiểu Boolean Đây là kiểu trả về 2 giá trị True và False let dung = true let sai = false Thường được sử dụng nhiều trong trường hợp so sánh, câu lệnh if if sai { print("Giá trị true!") } else { print(“Giá trị false") } // Prints "Giá trị false" Trong trường hợp người dùng sử dụng câu lệnh if để so sánh giá trị kiểu số: let i = 1 if i { // trường hợp này chương trình sẽ không chạy và báo lỗi } if i == 1 { // trường hợp đúng 10 CHƯƠNG 2: CƠ SỞ LÝ THUYẾT } 2.7 Kiểu Tuple Đây là một kiểu mới trong Swift. Kiểu Tuple có thể nhóm các giá trị và các giá trị đó không nhất thiết phải cùng kiểu let http404Error = (404, "Not Found") // http404Error is of type (Int, String), and equals (404, "Not Found") Người dùng có thể nhóm nhiều giá trị khác kiểu lại với nhau, Và ta có thể lấy từng giá trị ra như sau: let (statusCode, statusMessage) = http404Error print("The status code is \(statusCode)") // Prints "The status code is 404" print("The status message is \(statusMessage)") // Prints "The status message is Not Found" Ngoài ra để truy cập các phần tử trong một tuple có thể sử dụng chỉ số như sau print("The status code is \(http404Error.0)") // Prints "The status code is 404" print("The status message is \(http404Error.1)") // Prints "The status message is statusMessage " 11 CHƯƠNG 2: CƠ SỞ LÝ THUYẾT Người dùng cũng có thể khai báo như sau: let http200Status = (statusCode: 200, description: "OK") print("The status code is \(http200Status.statusCode)") // Prints "The status code is 200" print("The status message is \(http200Status.description)") // Prints "The status message is OK" 2.8 Kiểu Optional Người dùng có thể sử dụng Optional trong tình huống có giá trị hoặc không có giá trị.
var serverResponseCode: Int? = 404 // serverResponseCode có giá trị kiểu int là 404 serverResponseCode = nil // serverResponseCode không có giá trị Nếu người dùng định nghĩa một hằng số hoặc biến optional mà không cung cần cung cấp một giá trị mặc định, hằng số hoặc biến được tự động thiết lập để nil cho người dùng: var surveyAnswer: String? // surveyAnswer tự động có giá trị là nil 2.9 Kiểu Error Handling Error Handling mới được apple nâng cấp vào Swift 2.