1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
|
---
language: Objective-C
contributors:
- ["Eugene Yagrushkin", "www.about.me/yagrushkin"]
- ["Yannick Loriot", "https://github.com/YannickL"]
filename: LearnObjectiveC-tr.m
translators:
- ["Haydar KULEKCI", "http://scanf.info/"]
lang: tr-tr
---
Objective-C Apple tarafından, OSX ve iOS işletim sistemleri ve onların
kendi çatıları olan Cocoa ve Cocoa Touch için kullanılan bir programlama dilidir.
Genel açamlı, object-oriented bir yapıya sahip programlama dilidir. C
programlama diline Smalltalk stilinde mesajlaşma ekler.
```objective-c
// Tek satır yorum // işaretleri ile başlar
/*
Çoklu satır yorum bu şekilde görünür.
*/
// #import ile Foundation başlıklarını projeye import edebiliriz.
#import <Foundation/Foundation.h>
#import "MyClass.h"
// Progarmınızı girişi bir main fonksiyonudur ve bir integer değer döner.
int main (int argc, const char * argv[])
{
// Programdaki bellek kullanımını kontrol etmek için autorelease bir
// oluşturuyoruz. Autorelease bellekte kullanılmayan değerlerin kendi
// kendini silmesi demektir.
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
// NSLog konsola bir satırlık bilgi yazdırmak için kullanılır.
NSLog(@"Hello World!"); // "Hello World!" değeri yazdırılır.
///////////////////////////////////////
// Tipler & Değişkenler
///////////////////////////////////////
// Basit Tanımlamalar
int myPrimitive1 = 1;
long myPrimitive2 = 234554664565;
// Nesne Tanımlamaları
// strongly-typed nesne tanımlaması için karakter değişken isminin önüne
// * karakteri konulur.
MyClass *myObject1 = nil; // Strong typing
id myObject2 = nil; // Weak typing
// %@ bir nesnedir.
// 'description' objelerin değerlerinin gösterilmesi için bir düzendir.
NSLog(@"%@ and %@", myObject1, [myObject2 description]);
// "(null) and (null)" yazdırılacaktır.
// Karakter Dizisi (String)
NSString *worldString = @"World";
NSLog(@"Hello %@!", worldString); // "Hello World!" yazdırılacaktır.
// Karakterler
NSNumber *theLetterZNumber = @'Z';
char theLetterZ = [theLetterZNumber charValue];
NSLog(@"%c", theLetterZ);
// Tamsayılar
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);
// Kayan Noktalı Sayılar (Floats)
NSNumber *piFloatNumber = @3.141592654F;
float piFloat = [piFloatNumber floatValue];
NSLog(@"%f", piFloat);
NSNumber *piDoubleNumber = @3.1415926535;
piDouble = [piDoubleNumber doubleValue];
NSLog(@"%f", piDouble);
// BOOL Değerler
NSNumber *yesNumber = @YES;
NSNumber *noNumber = @NO;
// Dizi objeleri
NSArray *anArray = @[@1, @2, @3, @4];
NSNumber *thirdNumber = anArray[2];
NSLog(@"Third number = %@", thirdNumber); // "Third number = 3" yazdırılır
// Dictionary objeleri
NSDictionary *aDictionary = @{ @"key1" : @"value1", @"key2" : @"value2" };
NSObject *valueObject = aDictionary[@"A Key"];
NSLog(@"Object = %@", valueObject); // "Object = (null)" yazıdılır
///////////////////////////////////////
// Operatörler
///////////////////////////////////////
// Operatörler C dilindeki gibi çalışır.
// Örneğin:
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 left shift (by 1))
///////////////////////////////////////
// Kontrol Yapıları
///////////////////////////////////////
// If-Else ifadesi
if (NO)
{
NSLog(@"I am never run");
} else if (0)
{
NSLog(@"I am also never run");
} else
{
NSLog(@"I print");
}
// Switch ifadesi
switch (2)
{
case 0:
{
NSLog(@"I am never run");
} break;
case 1:
{
NSLog(@"I am also never run");
} break;
default:
{
NSLog(@"I print");
} break;
}
// While döngü ifadesi
int ii = 0;
while (ii < 4)
{
NSLog(@"%d,", ii++); // ii++, ii değişkenini kullanıldıktan
//sonra yerinde artırır.
} // => "0,"
// "1,"
// "2,"
// "3," yazdırılır
// For döngü ifadesi
int jj;
for (jj=0; jj < 4; jj++)
{
NSLog(@"%d,", jj++);
} // => "0,"
// "1,"
// "2,"
// "3," yazdırılır
// Foreach ifadesi
NSArray *values = @[@0, @1, @2, @3];
for (NSNumber *value in values)
{
NSLog(@"%@,", value);
} // => "0,"
// "1,"
// "2,"
// "3," yazdırılır
// Try-Catch-Finally ifadesi
@try
{
// İfadelerinizi buraya yazın
@throw [NSException exceptionWithName:@"FileNotFoundException"
reason:@"Sistemde Dosya Bulunamadı" userInfo:nil];
} @catch (NSException * e)
{
NSLog(@"Exception: %@", e);
} @finally
{
NSLog(@"Finally");
} // => "Exception: Sistemde Dosya Bulunamadı"
// "Finally"
// yazdırılacaktır
///////////////////////////////////////
// Objeler
///////////////////////////////////////
// Bellekten bir alan ayırmak ve objeyi burada oluşturmak bir obje örneği
// oluşturalım. Bir obje allocate ve init aşamalarını bitirmeden tam olarak
// işlevsel değildir.
MyClass *myObject = [[MyClass alloc] init];
// Objective-C nesne yönelimli programlama modelinin temelinde objelere
// mesaj gönderme vardır.
// Objective-C'de bir method çağırılmaz, ona bir mesaj gönderilir.
[myObject instanceMethodWithParameter:@"Steve Jobs"];
// Programda kullanılan bellek temizlenir
[pool drain];
// Program Sonu
return 0;
}
///////////////////////////////////////
// Sınıflar ve Fonksiyonlar
///////////////////////////////////////
// Sınıfınızı (MyClass.h) header dosyasında tanımlayın:
// Sınıf tanımlama yapısı:
// @interface ClassName : ParentClassName <ImplementedProtocols>
// {
// Üye değişken (member variable) tanımlaması;
// }
// -/+ (type) Method tanımlaması;
// @end
@interface MyClass : NSObject <MyCustomProtocol>
{
int count;
id data;
NSString *name;
}
// getter ve setter için otomatik oluşturulmuş gösterim.
@property int count;
@property (copy) NSString *name; // Copy the object during assignment.
@property (readonly) id data; // Declare only a getter method.
// Metodlar
+/- (return type)methodSignature:(Parameter Type *)parameterName;
// "+" class metodları içindir
+ (NSString *)classMethod;
// "-" instance metodu içindir
- (NSString *)instanceMethodWithParmeter:(NSString *)string;
- (NSNumber *)methodAParameterAsString:(NSString*)string andAParameterAsNumber:(NSNumber *)number;
@end
// Metodların implementasyonlarını (MyClass.m) dosyasında yapıyoruz:
@implementation UserObject
// Obje bellekten silineceği (release) zaman çağırılır
- (void)dealloc
{
}
// Constructor'lar sınıf oluşturmanın bir yoludur
// Bu varsayılan bir constructor'dur ve bir obje oluşturulurken çağrılır.
- (id)init
{
if ((self = [super init]))
{
self.count = 1;
}
return self;
}
+ (NSString *)classMethod
{
return [[self alloc] init];
}
- (NSString *)instanceMethodWithParmeter:(NSString *)string
{
return @"New string";
}
- (NSNumber *)methodAParameterAsString:(NSString*)string andAParameterAsNumber:(NSNumber *)number
{
return @42;
}
// MyProtocol içerisinde metod tanımlamaları
- (void)myProtocolMethod
{
// ifadeler
}
@end
/*
* Bir `protocol` herhangi bir sınıf tarafından implement edilen metodları tanımlar
* `Protocol`ler sınıfların kendileri değildir. Onlar basitçe diğer objelerin
* implementasyon için sorumlu oldukları bir arayüz (interface) tanımlarlar.
*/
@protocol MyProtocol
- (void)myProtocolMethod;
@end
```
## Daha Fazla Okuma
[Vikipedi Objective-C](http://tr.wikipedia.org/wiki/Objective-C)
[Objective-C Öğrenme](http://developer.apple.com/library/ios/referencelibrary/GettingStarted/Learning_Objective-C_A_Primer/)
[Lise Öğrencileri için iOS: Başlangıç](http://www.raywenderlich.com/5600/ios-for-high-school-students-getting-started)
|