Objective C: جیاوازیی نێوان پێداچوونەوەکان

لە چاوگ
(بەردوامی دەستکاریکردن)
(بەردوامی دەستکاریکردن)
ھێڵی ١٣٥: ھێڵی ١٣٥:
@property (readonly) NSString *lastName;
@property (readonly) NSString *lastName;
@property (assign) BOOL alive;
@property (assign) BOOL alive;
- (void)sayHello;


@end
@end
  </source>
  </source>
وەک دیارە دوو کردارمان بۆ زیادکرد بەناوی  
وەک دیارە یەک کردارمان بۆ زیادکرد بەناوی sayHello  کە لە پەڕەی implementation دا ئەی ناسێنین
<source lang="c">
 
#import "Person.h"
@implementation Person
- (void)sayHello {
    NSLog(@"Hello, World!");
}
@end
</source>


(ئەم بابەتە لەژێر دەستکاری دایە)
(ئەم بابەتە لەژێر دەستکاری دایە)

وەک پێداچوونەوەی ‏٢٠:٣٩، ١٠ی ئایاری ٢٠١٥

ئەمە فێرکاریەکی سەرەتاییە و لە فێرکاریەکانی ئەپڵ بۆ پەرەپێدەرانی وەرگیراوە.

ئۆبجێکتیڤ سی (ئ.سی) زمانی سەرەکی نوسینی پرۆگرامە بۆ سیستمی OS X و iOS. بۆخۆشی گروپێکی گەورەترە لە زمانی پرۆگرامکردنی سی و توانای دابینکردنی پرۆگرامکردنی هەیە لەسەر شێوازی تەنخواز، Object Oriented. مەبەستمان لە وشەی تەنخواز بە کوردی ئەو شێوازی پرۆگرامکردنە کە پرۆگرامی نوسراو زۆرتر لە شت یان تەندا جۆر بکەین و بەکاریان بهێنین. ئەم فێرکاریە جێگای ڕوونکردنەوەی زیاتری تەنخوازی نیە.

ئۆبجێکتیڤ سی، دەق syntax، دراوە سەرەتاییەکان primitive datatypes و کۆنترۆڵی ئەنجامدانەکانی flow control زمانی سی وەرگرتوە و شێوازی دەق syntaxی پێناسەی پۆل class و functionکردارەکانی بۆ زیاد کراوە. هەروەها لە ئاستی زمانەکەشدا پشتیوانی لە ڕێکخستنی گراف زیادکراوە زۆرێک کرداری تر کە لە سیدا لە کاتی کۆمپایڵکردندا ئەنجام ئەدران پشتگوێخراوە بۆ کاتی خستنەگەڕ.

جۆرەکانی دراوە datatypes

پەڕگە فەرمیەکانی ئەپڵ دووپاتی ئەکاتەوە کەوا جۆرەکانی نرخی گۆڕاو، ئەوەی بە scalar variable type لە زمانی سی (سەیری فێرکاری سی لە زانستپەروەران بکە) لە ئ.سی'یشدا هەیە:

int someInteger = 42;
float someFloatingPointNumber = 3.1415;
double someDoublePrecisionFloatingPointNumber = 6.02214199e23;

ئەوەی لە ئ.سی'دا تایبەتە بەم جۆرە داتا سادانە، ئەوەیە کە لە کاتێکدا لە ناو ڕیز Array یان کۆمەڵە collectionێکدا بەکاریان بهێنین ناچار ئەبین بیانکەین بە تەن Object بۆیە بۆ هەریەک لەمانە جۆرێک پۆل هەن کە بتوانن ئەو جۆرە داتا سەرەتاییانە لەخۆیان بگرن. بۆ نمونە int ئەکرێ لەناو NSInteger و float و doubleیش لەناو NSNumberدا هەڵبگیرێن کە بە لە قاوغنانی داتا ئەکرێ ناو بهێنرێن یان بە ئینگلیزی data encapsulation. ئەم نمونانەی خوارەوە ببینە:

NSNumber *magicNumber = [[NSNumber alloc] initWithInt:42];
NSNumber *unsignedNumber = [[NSNumber alloc] initWithUnsignedInt:42u];
NSNumber *longNumber = [[NSNumber alloc] initWithLong:42l];
 
NSNumber *boolNumber = [[NSNumber alloc] initWithBOOL:YES];
 
NSNumber *simpleFloat = [NSNumber numberWithFloat:3.14f];
NSNumber *betterDouble = [NSNumber numberWithDouble:3.1415926535];
 
NSNumber *someChar = [NSNumber numberWithChar:'T'];

ئەگەر بە وردی سەیر بکەین هەموو نمونەکانی سەرەوە بە دامەزرێنەر initializerی وەک initWith دروستکراون کە دواتر باسیان ئەکەین. بەڵام ئەوەی گرنگە لە ئ.سیدا گرنگیەکی یەکجار زۆر بەم دامەزرێنەرانە ئەدرێت جا چ لەو جۆرە یان لە جۆری کارگەکەدا بن وەک لە کاتی دروستکردنی نوسە Stringدا:

NSString *firstString = [[NSString alloc] initWithCString:"Hello World!"
                                                 encoding:NSUTF8StringEncoding];
NSString *secondString = [NSString stringWithCString:"Hello World!"
                                            encoding:NSUTF8StringEncoding];
NSString *thirdString = @"Hello World!";

لەسەرەوە هەمان نوسە بە سێ شێوە دروستکران:١. بە دامەزرێنەری پۆلەکە ٢. کردارێکی کارگە یان ٣. شێوازی دەقی پرۆگرام خۆی.

پێناسەکردنی پۆل (class)

پێناسەی زمانەکە درێژتر و بابەتەکە یەکجار فراوانە. مەبەست لەم فێرکاریە نیشاندانی سەرەتای نوسینی پرۆگرامی سادەیە بۆیە ئەچینە سەر نمونە. پۆل classێک بەناوی SimpleClass لە ئ.سی بەم شێوەیە دروست ئەکرێت:

@interface SimpleClass : NSObject
 
@end

لە ئ.سی لەبەر ئەوەی زۆربەی بەشەکانی پرۆگرام جۆرێکن لە پۆل، بۆیە هەموو پۆلێکیش بۆخۆی سەربە پۆلی سەروو هەموانن کە پۆلی NSObject خۆیەتی. بۆیە لە پێناسەکەی سەرەوە SimpleClass : NSObject نوسراوە. پۆلەکەش بە زاراوەی interface بە پێشگری ئەت @ دروست ئەکرێ و بە زاراوەی endیش کۆتایی دێت.

لە هەموو شتێک گرنگترە وەک لە زمانی C++دا ئەکرێ هەموو پۆلێک لە دوو پەڕگەی جیاوازدا هەڵگرین کە یەکێکیان سەرپەڕ و ئەویتریش کۆدەکە لەخۆی ئەگرێ. بۆ نمونە پۆلی Person ئەکرێ لە دوو پەڕگەی Person.h و پەڕگەی Person.mدا هەڵبگیرین. لە سەرپەڕەدا پێناسە گشتیەکان و لە ناوپەڕەشدا تەواوی پرۆگرامەکە ئەنوسینەوە. دواتر ئەمە ڕوونتر ئەکەینەوە.

تایبەتمەندیەکان properties

گەر بڕیاربێ پۆلێک دروست بکەین پێناسەی مرۆڤ بکات، ئەوا پێویستمان بە دوو نوسە String ئەبێ کە پێناسەی ناو و نازناوی پێ بکەین، ئەوکاتە ئەکرێ تۆ تایبەتمەندی property بۆ پۆلەکەمان پێناسە بکەین بەم شێوەیە. هێمای * لە زمانەکانی سی و سی++دا بۆ "هێماکەر" pointer بەکاردێ کە دیسان جێگای ڕوونکردنەوە لەم فێرکاریەدا نابێتەوە.

@interface Person : NSObject

@property NSString *firstName;
@property NSString *lastName;

@end

لە دوو دەستەواژە زیادکراوەکەدا: زاراوەی property پێناسەکردنی field یان بوارێکە بۆ پۆلەکە لە زمانێکی وەک جاڤادا، لە سیدا دیسان بە تایبەتمەندی ئەناسرێت, NSStringیش بۆخۆی پۆلێکی تایبەتی زمانی ئ.سی بۆ هەڵگرتنی نوسە String و هێمانی * وەک وتمان هێماکەرە کە هەموو پۆلێک لە ئ.سی دا ئەبێ لەپێشی دانرێت و دواجاریش ناوی تایبەتمەندیەکە دێ کە firstName یان lastNameە. هەردوو ناوەکە بۆخۆی جۆرێک لە ستانداردی نوسینی پرۆگرامکردن لە ئ.سی دا نیشان ئەدەن کە عادەتەن گۆڕاو variable ئەبێ بە پیتی بچووک دەست پێ بکات و دوای تەواوبوونی وشەیەک وشەی دوەم پیتی یەکەمی گەورەبێت واتە first+Name بەو شێوەیە.

تایبەتمەندیەکی گرنگ کە لە ئ.سی'دا هەیە دیاری کردنی جۆری 'تایبەتمەندی'ەکانە. واتە چۆن ئەکرێ کەسێک ناوی خۆی نەکرێ بگۆڕدرێ، ئەکرێ دیاری بکرێ کە propertyیەک چ جۆرە گۆڕانێکی بەسەردا بێت، هەروەها لەبەر ئەوەی ئ.سی لەبواری مۆبایلدا بەکاردێ گرنگی یەکجار ئەدرێ بە جۆری بیرگە. لێرەشدا ئەکرێ دیاری بکرێ کە ئایا 'تەن'ێک کامە بەشی لە بیرگەدا بۆ چەندە بمێنێتەوە. با نمونەیەک باس کەین:

@interface Person : NSObject
@property (readonly) NSString *firstName;
@property (readonly) NSString *lastName;
@end

لێرەدا هەمان نمونەی سەرەوە، بەڵام دیاریمان کردوە کە ناو و نازناو نەگۆڕدرێ و تەنها بخوێنرێتەوە. جۆرەکانی تری تایبەتمەندێتی لەجێگای خۆی باس ئەکەین. لە ئێستادا گرنگە بزانین کە هەندێ لە جۆرەکانی داتای سەرەتایی وەک بوڵ BOOL تەنها دەستنیشان assign ئەکرێ چونکە تەن نین بەم شێوەیە:

@interface Person : NSObject
@property (readonly) NSString *firstName;
@property (readonly) NSString *lastName;
@property (assign) BOOL alive;
@end

کردار function

لە زمانی سی و زمانەکانی دیدا پێناسەکردنی کردارێک ئاسانە و بەم جۆرەیە:

void SomeFunction();

لە ئ.سی دا جیاواز لە زمانەکانی تر گرنگیەکی تایبەت بە کردار دراوە. لە ئ.سی دا هەمان کردار زۆر هاوشێوەیە و ئاوا پێناسە ئەکرێت:

- (void)someMethod;

لەم ناساندنە ئاسانەشدا تێبینی ئەکەین کە نیشانەی کەم/داش هەیە لەپێش کردارەکە کە بە کۆمپایڵەر (وەرگێڕ)ەکەمان ئەڵێ کە ئاگاداربە ئەمە کردارێکی نمونەیەکەی تەنە object instance method. ئیتر ئەوانی تری ئەبێ ئاشکرابێت لای فێرخواز. زاراوەی void لە زۆربەی زمانەکاندا بەهەمان شێوە بەکاردێ و مانای بەتاڵی هەیە.

لە ئ.سیدا شتێکی تایبەتی هەیە بە کردارەکان کە parameter نرخە دراوەکان لەناو پێناسەی کردارەکەدا جێگیر کراون. بۆ نمونە لە سیدا ئاوا ئەنوسین:

void SomeFunction(SomeType value);

بەڵام لە ئ.سیدا ئاوای لێدێ

- (void)someMethodWithValue:(SomeType)value;

جیاوازیەکە چیە؟ جوت خاڵەکە : وا ئەکات بتوانین زیاد لە پارامیتەرێک بخەینە ناو پێناسەی کردارەکەمانەوە و خوێنەرەوەی کۆدەکەش بزانێ کە کام نرخ بۆ چ مەبەستێک بەکاردێت. نمونەیەکی جوانتر ئاوایە

- (void)createPersonWithFirstName:(NSString*)fName andLastName:(NSString*)lName;

ئەم پێناسەی کردارەش بەم شێوەیە کورت ئەکرێتەوە و ئەناسرێت:

someMethodWithFirstValue:secondValue:

بۆیە کاتێک ئەبینین پێناسەی کردارەکە بەو شێوەیەیە، ئیتر ڕێگا نادرێ پارامیتەرەکان پاش و پێش بکەون وەک لە زمانەکانی تردا ئەکرێت. هەروەها لە زمانێکی وەک جاڤادا نازانرێ کامە نرخ بۆ چ مەبەستێک بەکار دێت چونکە ئەوەی سەرەوە بەم شێوەیە ئەنوسرێ لە سی'دا:

void assignNames( char* fName, char* lName);

بۆماوەیی inheritance

وەک هەموو زمانە تەنخوازەکانی تر، ئ.سی'یش پشتیوانی تەواو ئەکات لە بۆماوەیی پۆلەکان. وەک لەسەرەوە نیشاندرا پۆلی Person تەواوی تایبەتمەندی propteryیەکانی NSObject بۆماوەتەوە و هەر پۆلێکشی کە سەر بە کەس Personبێت بۆ نمونە Teacher ئەوا تایبەتمەندیەکانی Personی بۆ ئەمێنێتەوە. لە وێنەکەی خوارەوەدا نیشانی ئەدەین کە چۆن دوگمەیەکی سەر ئایفۆنەکەت بریتیە لە چەن بۆمانەوەیەک تا ئەگاتەوە سەر سەرپۆل NSObjectی زمانی ئ.سی:

وێنەیەکی نیشاندانی بۆمانەوە، پۆلێکی UIButton چۆن ئەگەڕێتەوە سەر سەرپۆلی NSObject

لە نمونەی پۆلی Personدا ئەگەر مامۆستا دروست بکەین، ئاوا بۆمانەوەکە نیشان ئەدەین:

#import "Person.h"

@interface Teacher : Person
 
@end

ئەوکات ئەبێ لەناو پێناسەکەدا دەستەواژەی import بەکار ئەهێنین نەک includeی زمانی سی، بۆ ئەوەی وەرگێڕ compiler ئاگادار بێت باسی کام پۆل ئەکەین. لە نمونەکەی پێشتردا بۆخۆی NSObject ناسراوە لە بنەڕەتدا بۆیە پێویستی بە ناساندن نیە.

دابینکردنی ناوەڕۆکی پۆل

وەک لەسەرەوە وتمان پۆلێکی ئاسایی لە دوو پەڕگەدا هەڵ ئەگیرێت. لێرەدا زیاتر لەسەر ناوەڕۆکی پۆل ئەدوێین class implementation کە لە .m پەڕەکەدایە. وەک لەسەروە وتمان پۆلێک لە پەڕەی .hدا ئەناسێنین و زاراوەی interface بەکاردێنین تا دەستنیشانی بکەین کە ئەوەی لەپەڕەی .h سەرپەڕەدا هەیە بەردەستە و ئەتوانرێ ببینرێ بەڵام .m بۆ نوسەری پرۆگرامە و شاراوەیە لە خەڵکی تر. بۆ نمونە پۆلی Personئەکرێ ئاوا دەوڵەمەنتر بکەین:

@interface Person : NSObject
@property (readonly) NSString *firstName;
@property (readonly) NSString *lastName;
@property (assign) BOOL alive;

- (void)sayHello;

@end

وەک دیارە یەک کردارمان بۆ زیادکرد بەناوی sayHello کە لە پەڕەی implementation دا ئەی ناسێنین

#import "Person.h"
 
@implementation Person
- (void)sayHello {
    NSLog(@"Hello, World!");
}
@end

(ئەم بابەتە لەژێر دەستکاری دایە)