diff options
Diffstat (limited to 'vi-vn/objective-c-vi.html.markdown')
| -rw-r--r-- | vi-vn/objective-c-vi.html.markdown | 318 | 
1 files changed, 318 insertions, 0 deletions
| diff --git a/vi-vn/objective-c-vi.html.markdown b/vi-vn/objective-c-vi.html.markdown new file mode 100644 index 00000000..f6296ec0 --- /dev/null +++ b/vi-vn/objective-c-vi.html.markdown @@ -0,0 +1,318 @@ +---
 +
 +language: Objective-C
 +contributors:
 +    - ["Eugene Yagrushkin", "www.about.me/yagrushkin"]
 +    - ["Yannick Loriot", "https://github.com/YannickL"]
 +lang: vi-vi
 +filename: LearnObjectiveC-vi.m
 +
 +---
 +
 +Objective-C là ngôn ngữ lập trình chính được sử dụng bởi Apple cho các hệ điều hành OS X, iOS và các framework tương ứng của họ, Cocoa và Cocoa Touch.
 +Nó là một ngôn ngữ lập trình mục đích tổng quát, hướng đối tượng có bổ sung thêm kiểu truyền thông điệp giống Smalltalk vào ngôn ngữ lập trình C.
 +
 +```objective-c
 +// Chú thích dòng đơn bắt đầu với //
 +
 +/*
 +Chú thích đa dòng trông như thế này.
 +*/
 +
 +// Nhập các headers của framework Foundation với cú pháp #import
 +#import <Foundation/Foundation.h>
 +#import "MyClass.h"
 +
 +// Đầu vào chương trình của bạn là một hàm gọi là
 +// main với một kiểu trả về kiểu integer.
 +int main (int argc, const char * argv[])
 +{
 +    // Tạo một autorelease pool để quản lý bộ nhớ vào chương trình
 +    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
 +
 +    // Sử dụng hàm NSLog() để in ra các dòng lệnh vào console
 +    NSLog(@"Hello World!"); // Print the string "Hello World!"
 +
 +    ///////////////////////////////////////
 +    // Kiểu & Biến (Types & Variables)
 +    ///////////////////////////////////////
 +
 +    // Khai báo số nguyên
 +    int myPrimitive1  = 1;
 +    long myPrimitive2 = 234554664565;
 +
 +    // Khai báo đối tượng
 +    // Đặt dấu nháy * vào trước tên biến cho khai báo đối tượng strong
 +    MyClass *myObject1 = nil;  // Strong
 +    id       myObject2 = nil;  // Weak
 +    // %@ là một đối tượng
 +    // 'miêu tả' ('desciption') là thông lệ để trình bày giá trị của các Đối tượng
 +    NSLog(@"%@ và %@", myObject1, [myObject2 description]); // In ra "(null) và (null)"
 +
 +    // Chuỗi
 +    NSString *worldString = @"World";
 +    NSLog(@"Hello %@!", worldString); // In ra "Hello World!"
 +
 +    // Ký tự literals
 +    NSNumber *theLetterZNumber = @'Z';
 +    char theLetterZ            = [theLetterZNumber charValue];
 +    NSLog(@"%c", theLetterZ);
 +
 +    // Số nguyên literals
 +    NSNumber *fortyTwoNumber = @42;
 +    int fortyTwo             = [fortyTwoNumber intValue];
 +    NSLog(@"%i", fortyTwo);
 +
 +    NSNumber *fortyTwoUnsignedNumber = @42U;
 +    unsigned int fortyTwoUnsigned    = [fortyTwoUnsignedNumber unsignedIntValue];
 +    NSLog(@"%u", fortyTwoUnsigned);
 +
 +    NSNumber *fortyTwoShortNumber = [NSNumber numberWithShort:42];
 +    short fortyTwoShort           = [fortyTwoShortNumber shortValue];
 +    NSLog(@"%hi", fortyTwoShort);
 +
 +    NSNumber *fortyTwoLongNumber = @42L;
 +    long fortyTwoLong            = [fortyTwoLongNumber longValue];
 +    NSLog(@"%li", fortyTwoLong);
 +
 +    // Dấu phẩy động (floating point) literals
 +    NSNumber *piFloatNumber = @3.141592654F;
 +    float piFloat           = [piFloatNumber floatValue];
 +    NSLog(@"%f", piFloat);
 +
 +    NSNumber *piDoubleNumber = @3.1415926535;
 +    double piDouble                 = [piDoubleNumber doubleValue];
 +    NSLog(@"%f", piDouble);
 +
 +    // BOOL literals
 +    NSNumber *yesNumber = @YES;
 +    NSNumber *noNumber  = @NO;
 +
 +    // Đối tượng Mảng
 +    NSArray *anArray      = @[@1, @2, @3, @4];
 +    NSNumber *thirdNumber = anArray[2];
 +    NSLog(@"Third number = %@", thirdNumber); // In ra "Third number = 3"
 +
 +    // Đối tượng Từ điển
 +    NSDictionary *aDictionary = @{ @"key1" : @"value1", @"key2" : @"value2" };
 +    NSObject *valueObject     = aDictionary[@"A Key"];
 +    NSLog(@"Đối tượng = %@", valueObject); // In ra "Object = (null)"
 +
 +    ///////////////////////////////////////
 +    // Toán Tử (Operators)
 +    ///////////////////////////////////////
 +
 +    // Các toán tử cũng hoạt động giống như ngôn ngữ C
 +    // Ví dụ:
 +    2 + 5; // => 7
 +    4.2f + 5.1f; // => 9.3f
 +    3 == 2; // => 0 (NO)
 +    3 != 2; // => 1 (YES)
 +    1 && 1; // => 1 (Logical and)
 +    0 || 1; // => 1 (Logical or)
 +    ~0x0F; // => 0xF0 (bitwise negation)
 +    0x0F & 0xF0; // => 0x00 (bitwise AND)
 +    0x01 << 1; // => 0x02 (bitwise dịch trái (bởi 1))
 +
 +    /////////////////////////////////////////////
 +    // Cấu Trúc Điều Khiển (Controls Structures)
 +    /////////////////////////////////////////////
 +
 +    // Câu lệnh If-Else
 +    if (NO)
 +    {
 +        NSLog(@"I am never run");
 +    } else if (0)
 +    {
 +        NSLog(@"I am also never run");
 +    } else
 +    {
 +        NSLog(@"I print");
 +    }
 +
 +    // Câu lệnh Switch
 +    switch (2)
 +    {
 +        case 0:
 +        {
 +            NSLog(@"I am never run");
 +        } break;
 +        case 1:
 +        {
 +            NSLog(@"I am also never run");
 +        } break;
 +        default:
 +        {
 +            NSLog(@"I print");
 +        } break;
 +    }
 +
 +    // Câu lệnh vòng lặp While
 +    int ii = 0;
 +    while (ii < 4)
 +    {
 +        NSLog(@"%d,", ii++); // ii++ tăng dần, sau khi sử dụng giá trị của nó.
 +    } // => in ra  "0,"
 +      //           "1,"
 +      //           "2,"
 +      //           "3,"
 +
 +    // Câu lệnh vòng lặp For
 +    int jj;
 +    for (jj=0; jj < 4; jj++)
 +    {
 +        NSLog(@"%d,", jj);
 +    } // => in ra  "0,"
 +      //           "1,"
 +      //           "2,"
 +      //           "3,"
 +
 +    // Câu lệnh Foreach
 +    NSArray *values = @[@0, @1, @2, @3];
 +    for (NSNumber *value in values)
 +    {
 +        NSLog(@"%@,", value);
 +    } // => in ra  "0,"
 +      //           "1,"
 +      //           "2,"
 +      //           "3,"
 +
 +    // Câu lệnh Try-Catch-Finally
 +    @try
 +    {
 +        // Your statements here
 +        @throw [NSException exceptionWithName:@"FileNotFoundException"
 +                            reason:@"Không Tìm Thấy Tập Tin trên Hệ Thống" userInfo:nil];
 +    } @catch (NSException * e)
 +    {
 +        NSLog(@"Exception: %@", e);
 +    } @finally
 +    {
 +        NSLog(@"Finally");
 +    } // => in ra  "Exception: Không Tìm Thấy Tập Tin trên Hệ Thống"
 +      //           "Finally"
 +
 +    ///////////////////////////////////////
 +    // Đối Tượng (Objects)
 +    ///////////////////////////////////////
 +
 +    // Tạo một thực thể đối tượng bằng cách phân vùng nhớ và khởi tạo đối tượng đó.
 +    // Một đối tượng sẽ không thật sự hoạt động cho đến khi cả 2 bước alloc] init] được hoàn thành
 +    MyClass *myObject = [[MyClass alloc] init];
 +
 +    // Mô hình lập trình hướng đối tượng của Objective-C dựa trên việc truyền thông điệp (message)
 +    // và các thực thể đối tượng với nhau.
 +    // Trong Objective-C một đối tượng không đơn thuần gọi phương thức; nó truyền thông điệp.
 +    [myObject instanceMethodWithParameter:@"Steve Jobs"];
 +
 +    // Dọn dẹp vùng nhớ mà bạn đã dùng ở chương trình
 +    [pool drain];
 +
 +    // Kết thúc chương trình
 +    return 0;
 +}
 +
 +///////////////////////////////////////
 +// Lớp và Hàm (Classes & Functions)
 +///////////////////////////////////////
 +
 +// Khai báo lớp của bạn ở một tập tin header (MyClass.h):
 +// Cú pháp Khai Báo Lớp:
 +// @interface ClassName : ParentClassName <ImplementedProtocols>
 +// {
 +//    Khai báo biến thành viên;
 +// }
 +// -/+ (type) Khai báo method;
 +// @end
 +@interface MyClass : NSObject <MyProtocol>
 +{
 +    int count;
 +    id data;
 +    NSString *name;
 +}
 +// Ký hiệu (notation) tiện ích để tự động khởi tạo public getter và setter
 +@property int count;
 +@property (copy) NSString *name; // Sao chép đối tượng trong quá trình gán.
 +@property (readonly) id data;    // Chỉ khai báo phương thức getter.
 +
 +// Phương thức
 ++/- (return type)methodSignature:(Parameter Type *)parameterName;
 +
 +// dấu '+' cho phương thức lớp
 ++ (NSString *)classMethod;
 +
 +// dấu '-' cho phương thức thực thể
 +- (NSString *)instanceMethodWithParameter:(NSString *)string;
 +- (NSNumber *)methodAParameterAsString:(NSString*)string andAParameterAsNumber:(NSNumber *)number;
 +
 +@end
 +
 +// Thực thi các phương thức trong một tập tin thực thi (MyClass.m):
 +
 +@implementation MyClass
 +
 +// Gọi khi đối tượng được release
 +- (void)dealloc
 +{
 +}
 +
 +// Phương thức khởi tạo (Constructors) là một cách để tạo các lớp
 +// Đây là phương thức khởi tạo mặc định được gọi khi đối tượng được khởi tạo
 +- (id)init
 +{
 +    if ((self = [super init]))
 +    {
 +        self.count = 1;
 +    }
 +    return self;
 +}
 +
 ++ (NSString *)classMethod
 +{
 +    return [[self alloc] init];
 +}
 +
 +- (NSString *)instanceMethodWithParameter:(NSString *)string
 +{
 +    return @"New string";
 +}
 +
 +- (NSNumber *)methodAParameterAsString:(NSString*)string andAParameterAsNumber:(NSNumber *)number
 +{
 +    return @42;
 +}
 +
 +// Các phương thức được khai báo vào MyProtocol
 +- (void)myProtocolMethod
 +{
 +    // câu lệnh
 +}
 +
 +@end
 +
 +/*
 + * Một protocol khai báo các phương thức mà có thể thực thi bởi bất kỳ lớp nào.
 + * Các protocol chính chúng không phải là các lớp. Chúng chỉ đơn giản là định ra giao diện (interface)
 + * mà các đối tượng khác có trách nhiệm sẽ thực thi.
 + */
 +@protocol MyProtocol
 +    - (void)myProtocolMethod;
 +@end
 +
 +
 +
 +```
 +## Xem Thêm
 +
 ++ [Wikipedia Objective-C](http://en.wikipedia.org/wiki/Objective-C)
 +
 ++ Apple Docs':
 +    + [Learning Objective-C](http://developer.apple.com/library/ios/referencelibrary/GettingStarted/Learning_Objective-C_A_Primer/)
 +
 +    + [Programming With Objective-C](https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/Introduction/Introduction.html)
 +
 +    + [Object-Oriented Programming with Objective-C](https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/OOP_ObjC/Introduction/Introduction.html#//apple_ref/doc/uid/TP40005149)
 +
 +    + [Coding Guidelines for Cocoa](https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CodingGuidelines/CodingGuidelines.html)
 +
 ++ [iOS For High School Students: Getting Started](http://www.raywenderlich.com/5600/ios-for-high-school-students-getting-started)
 | 
