Wednesday, December 23, 2015

BASIC SWIFT - Bài 2 - Cú pháp (syntax) cơ bản

Sau Bài 1, chúng ta đã cài đăt được môi trường phát triển cho Swift, cũng như là có được cái nhìn đầu tiên về Swift và xem những dòng code thể hiện bài Hello World.
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 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.



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


/* 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:


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:
  • 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ụ:


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

Thursday, December 17, 2015

BASIC SWIFT - Bài 1 - Giới thiệu

Lần đầu được giới thiệu tại WWDC 2014, Swift là ngôn ngữ lập trình mới do Apple phát triển dành cho iOS và Mac OS X. Ở thời điểm hiện tại thì Swift 2 cũng đã được ra mắt cùng với phiên bản XCode 7, và Swift cũng đã được Apple OpenSource hoá. Do đó có thể tin tưởng về 1 tương lai mới với hệ thống cộng đồng lập trình viên rộng lớn cho ngôn ngữ này.

Trong loạt bài viết này, chúng ta cùng bắt tay vào học ngôn ngữ mới này.



Nội dung các bài học lần lượt sẽ đi theo cấu trúc sau:




Bây giờ chúng ta sẽ cùng bắt đầu.


Chương 1: Giới thiệu chung về Swift


Với truyền thống của Apple là luôn làm ra những thứ tốt nhất, chất lượng nhất, ngôn ngữ lập trình mới Swift cũng được hưởng những điều tốt đẹp đó. Swift được phát triển dựa trên những điều tốt đẹp nhất của C vào Objective-C, mà không bị vướng một chút ràng buộc nào trong tính tương thích với C.

Nếu bạn là một lập trình viên tay mơ mới vào nghề, bạn có thể ghi nhớ một câu rằng, code write bằng C luôn được thực hiện nhanh nhất (sau Assembly, và vì bạn tay mơ với vào nghề tôi tin bạn không làm được Assembly thần thánh nên trực tiếp bỏ qua xếp hạng của ngôn ngữ này).

Swift được giới thiệu với những ưu điểm hấp dẫn sau:


  • Swift sử dụng các mẫu lập trình an toàn.
  • Swift cung cấp các tính năng của một ngôn ngữ lập trình hiện đại.
  • Swift cung cấp các cú pháp (syntax) câu lệnh tương tự như Objective-C, do đó bạn mà biết Objective-C thì đó là một lợi thế khi học ngôn ngữ này.
  • Swift là cách mới trên cả tuyệt vời để viết nên những app hấp dẫn dành cho iOS và Mac OS X.
  • Swift cung cấp cơ chế truy cập thuận tiện vào các thư viện có sẵn Cocoa frameworks, nếu bạn có các thư viện này, bạn sẽ không phải viết lại chúng sang Swift mà có thể dùng trực tiếp luôn.
  • Swift hợp nhất các thủ tục  (procedural) và các phần hướng đối tượng (object-oriented portions) trong ngôn ngữ.
  • Swift không cần các thư viện rời được import vào dành cho các chức năng cơ bản quen thuộc như là input/output, hoặc xử lý các string.
  • Swift sử dụng cùng bộ runtime với hệ thống Obj-C trên Mac OS X và iOS, và do đó nó cũng sẽ có thể chạy được luôn trên các thiết bị đang sử dụng nền tảng iOS 6 và OS X 10.8 trở lên.


Swift được cung cấp với tính năng playground (sân chơi) mà từ đó, các lập trình viên Swift có thể bắt đầu viết các dòng code đầu tiên vào khởi chạy chúng ngay lập tức.

Swift cũng được thiết kế bằng cách vay mượn rất nhiều ý tưởng từ các ngôn ngữ khác như Objective-C, Rust, Haskell, Ruby, Python, C#, CLU, ... nên bạn sẽ rất nhanh chóng làm quen được với ngôn ngữ này.



Nếu bạn đã sẵn sàng chuẩn bị tinh thần để học ngôn ngữ này. Bạn sẽ cần làm thêm một số bước chuẩn bị trước khi có thể bắt đầu học.

Thiết lập môi trường phát triển ở local - Local Environment Setup

Đầu tiên bạn cần XCode, download trực tiếp từ AppStore trên Mac OS X, hoàn toàn miễn phí.

Sau khi cài đặt thành công XCode, bạn ngay lập tức có thể thử nghiệm XCode cũng như ngôn ngữ lập trình Swift này bằng cách làm bài tập "Hello World!" nổi tiếng như ta vẫn thường làm.

"Hello World!" Swift Project


Chọn Get started with a playground và đăt tên cho project là HelloWorld, platform là iOS.

Nhấn Next, chọn nơi lưu project file. Cuối cùng bạn sẽ có một cửa sổ Playground window như hình ảnh bên dưới:



Đoạn code dưới đây được copy lại từ trình soạn thảo của XCode.

import UIKit

var str = "Hello, playground"


Nếu bạn chọn platform để development là OS X, thì thư viện Cocoa sẽ tự động được đưa vào thay cho UIKit dành riêng cho iOS.


import Cocoa

var str = "Hello, playground"


Nhấn vào nút Play hình mũi tên xanh ở góc bên trái dưới cửa sổ để chạy thử code, bạn sẽ nhìn thấy kết quả được hiển thị ở panel phía bên tay phải dòng


Hello, playground



Xin được chúc mừng, bạn chính thức đã setup thành công môi trường phát triển cho Swift, và bạn sẵn sàng để bước chân vào môn học này.

Friday, December 4, 2015

[GUIDE] Hướng dẫn Remove bớt các app đi kèm với windows 10

Windows 10 được cài đặt kèm với khá nhiều ứng dụng mặc định có sẵn. Và tuỳ thuộc vào bộ windows bạn cài, thì bạn cũng sẽ thấy rằng có vài apps xuất hiện ở Start Menu mà có lẽ là bạn sẽ không sử dụng tới. Trong bài hướng dẫn này, tôi sẽ hướng dẫn các bạn cách xoá bất cứ app nào bạn muốn. Qua đó khắc phục được phần nào tình trạng cố hữu của Windows đó là cài lắm app thì càng ngày nó chạy càng chậm.



Việc đơn giản bạn cần phải thử trước, đó là đơn giản nhấn-chuột-phải vào app mà bạn muốn gỡ bỏ ở Start Menu, và kiểm tra xem có lựa chọn cho phép Uninstall tháo gỡ nó không. Nếu có thì bạn chỉ cần click vào và làm theo hướng dẫn. Nhưng nếu không có, bạn hãy đọc hướng dẫn bên dưới đây.


Đầu tiên, bạn cần phải đăng nhập vào windows với quyền administrator, bạn cũng cần tìm kiếm ứng dụng PowerShell để thực hiện các lệnh gỡ bỏ dưới đây.

Nhấn vào Start, gõ vào tìm kiếm PowerShell. Nhấn chuột phải vào app PowerShell, nhấn chọn Run as administrator.


Công việc tiếp theo là copy và paste các lệnh tương ứng dưới đây để gỡ app không mong muốn.


Remove OneNote with a PowerShell command

Get-AppxPackage *OneNote* | Remove-AppxPackage

Remove 3D from Windows 10

Get-AppxPackage *3d* | Remove-AppxPackage


Remove Camera from Windows 10

Get-AppxPackage *camera* | Remove-AppxPackage


Remove Mail and Calendar from Windows 10

Get-AppxPackage *communi* | Remove-AppxPackage

Remove Money, Sports, News and Weather from Windows 10

Get-AppxPackage *bing* | Remove-AppxPackage


Remove Groove Music and Film & TV from Windows 10

Get-AppxPackage *zune* | Remove-AppxPackage

Remove People from Windows 10

Get-AppxPackage *people* | Remove-AppxPackage

Remove Phone Companion from Windows 10

Get-AppxPackage *phone* | Remove-AppxPackage

Remove Photos from Windows 10

Get-AppxPackage *photo* | Remove-AppxPackage

Remove Solitaire Collection from Windows 10

Get-AppxPackage *solit* | Remove-AppxPackage

Remove Voice Recorder from Windows 10

Get-AppxPackage *soundrec* | Remove-AppxPackage

Remove Xbox from Windows 10

Get-AppxPackage *xbox* | Remove-AppxPackage

Note: Mặc dù khi bạn gõ lệnh trên để remove Xbox bạn có nhận được thông báo lỗi như dưới đây. Tuy nhiên bạn sẽ thấy là app đã được gỡ bỏ mà không có vấn đề gì.



PS C:\WINDOWS\system32> Get-AppxPackage *xbox* | Remove-AppxPackage
Remove-AppxPackage : Deployment failed with HRESULT: 0x80073CFA, Removal failed. Please contact your software vendor.
(Exception from HRESULT: 0x80073CFA)
error 0x80070032: AppX Deployment Remove operation on package
Microsoft.XboxGameCallableUI_1000.10240.16384.0_neutral_neutral_cw5n1h2txyewy from:
C:\Windows\SystemApps\Microsoft.XboxGameCallableUI_cw5n1h2txyewy failed. This app is part of Windows and cannot be
uninstalled on a per-user basis. An administrator can attempt to remove the app from the computer using Turn Windows
Features on or off. However, it may not be possible to uninstall the app.
NOTE: For additional information, look for [ActivityId] 1d60accb-cb8d-0003-d5b8-601d8dcbd001 in the Event Log or use
the command line Get-AppxLog -ActivityID 1d60accb-cb8d-0003-d5b8-601d8dcbd001
At line:1 char:26
+ Get-AppxPackage *xbox* | Remove-AppxPackage
+ ~~~~~~~~~~~~~~~~~~
+ CategoryInfo : WriteError: (Microsoft.XboxG...l_cw5n1h2txyewy:String) [Remove-AppxPackage], IOException
+ FullyQualifiedErrorId : DeploymentError,Microsoft.Windows.Appx.PackageManager.Commands.RemoveAppxPackageCommand

Remove-AppxPackage : Deployment failed with HRESULT: 0x80073CFA, Removal failed. Please contact your software vendor.
(Exception from HRESULT: 0x80073CFA)
error 0x80070032: AppX Deployment Remove operation on package
Microsoft.XboxIdentityProvider_1000.10240.16384.0_neutral_neutral_cw5n1h2txyewy from:
C:\Windows\SystemApps\Microsoft.XboxIdentityProvider_cw5n1h2txyewy failed. This app is part of Windows and cannot be
uninstalled on a per-user basis. An administrator can attempt to remove the app from the computer using Turn Windows
Features on or off. However, it may not be possible to uninstall the app.
NOTE: For additional information, look for [ActivityId] 1d60accb-cb8d-0001-d9b9-601d8dcbd001 in the Event Log or use
the command line Get-AppxLog -ActivityID 1d60accb-cb8d-0001-d9b9-601d8dcbd001
At line:1 char:26
+ Get-AppxPackage *xbox* | Remove-AppxPackage
+ ~~~~~~~~~~~~~~~~~~
+ CategoryInfo : WriteError: (Microsoft.XboxI...l_cw5n1h2txyewy:String) [Remove-AppxPackage], IOException
+ FullyQualifiedErrorId : DeploymentError,Microsoft.Windows.Appx.PackageManager.Commands.RemoveAppxPackageCommand