تفاوت میان نسخه‌های «آبجکتیو-سی»

جز
ربات: جایگزینی خودکار متن (-<source +<syntaxhighlight، -</source> +</syntaxhighlight>)
(نجات ۲ منبع و علامت‌زدن ۰ به‌عنوان مرده.) #IABot (v2.0)
جز (ربات: جایگزینی خودکار متن (-<source +<syntaxhighlight، -</source> +</syntaxhighlight>))
 
فرستادن یک پیام به یک شی در این زبان به شکل زیر است:
 
<sourcesyntaxhighlight lang="objc">
 
[obj method:parameter];
 
</syntaxhighlight>
</source>
 
این دستور مانند عمل زیر در سی++ است:
 
<sourcesyntaxhighlight lang="cpp">
 
obj->method(parameter);
 
</syntaxhighlight>
</source>
 
پیام‌های آبجکتیو-سی نیازی ندارند که اجرا شوند. اگر به شیئی پیامی بدهیم و آن شی متد مربوطه را پیاده‌سازی کرده باشد. اجرا می‌شود و در غیر این صورت اجرا نمی‌شود. حتی می‌توان به شی پوچ نیز پیام فرستاد.
نمونه‌ای از نحوهٔ تعریف واسط
 
<sourcesyntaxhighlight lang="objc">
 
@interface classname : superclassname {
@end
 
</syntaxhighlight>
</source>
 
+ نشان‌دهندهٔ توابع مربوط به خود کلاس و – نشان‌دهندهٔ توابع مربوط به یک نمونه از آن کلاس است. معادل کد بالا در سی++ به شکل زیر است.
 
<sourcesyntaxhighlight lang="cpp">
 
class classname : superclassname {
};
 
</syntaxhighlight>
</source>
 
یکی از موارد قابل توجه instanceMethod2WithParameter است. در آبجکتیو-سی امکان استفاده از پارامتردهی بانام وجود دارد که در حال زیاد بودن تعداد پارامترها کد را تمیز نگاه می‌دارد؛ ولی در سی++ چنین امکانی وجود ندارد.
واسط تنها روش دسترسی به کلاس را بیان می‌کند و نه خود متدها را. کد اصلی در قسمت پیاده‌سازی نوشته می‌شود. این فایل‌های پیاده‌سازی معمولاً با پسوند m. خاتمه می‌یابند.
 
<sourcesyntaxhighlight lang="objc">
 
@implementation classname
@end
 
</syntaxhighlight>
</source>
 
و هریک از این متدها به این شکل خواهند بود
 
<sourcesyntaxhighlight lang="objc">
 
-(int)method:(int)i {
}
 
</syntaxhighlight>
</source>
 
[[دستور زبان]] اجازهٔ دادن مقدار با استفاده از اسم پارامترها را نیز می‌دهد.
مثلاً برای فراخوانی یک متد که این‌گونه تعریف شده است:
 
<sourcesyntaxhighlight lang="objc">
 
-(int)changeColorToRed:(float)red green:(float)green blue:(float)blue
 
</syntaxhighlight>
</source>
 
می‌توان به این شکل عمل کرد
 
<sourcesyntaxhighlight lang="objc">
 
[myColor changeColorToRed:5.0 green:2.0 blue:6.0];
 
</syntaxhighlight>
</source>
 
در پیاده‌سازی این زبان، هریک از این ارسال پیام‌ها تبدیل به یک فراخوانی تابع می‌شود.
بعد از نوشتن کلاس آبجکتیو-سی می‌توان از آن نمونه گرفت. برای این کار باید ابتدا برای شی حافظه بگیریم و سپس به آن مقدار اولیه بدهیم. این دو کار با دستوری مانند
 
<sourcesyntaxhighlight lang="objc">
 
MyObject * o = [[MyObject alloc] init];
 
</syntaxhighlight>
</source>
 
قابل انجام‌اند. alloc سبب می‌شود که به اندازهٔ متغیرهای این کلاس حافظه گرفته شود و با init می‌توان به این متغیرها مقدار اولیه داد.
متد init معمولاً به صورت زیر نوشته می‌شود:
 
<sourcesyntaxhighlight lang="objc">
 
-(id) init {
}
 
</syntaxhighlight>
</source>
 
=== پروتکل‌ها ===
تعریف یک formal protocol به این شکل است
 
<sourcesyntaxhighlight lang="objc">
 
@protocol Locking
@end
 
</syntaxhighlight>
</source>
 
و استفاده از آن در یک کلاس به صورت
 
<sourcesyntaxhighlight lang="objc">
 
@interface SomeClass : SomeSuperClass <Locking>
@end
 
</syntaxhighlight>
</source>
 
است.
مثال اول، صورت ساختاری
 
<sourcesyntaxhighlight lang="objc">
#import <stdio.h>
 
}
 
</syntaxhighlight>
</source>
 
=== hello world-2 ===
مثال دوم، صورت شی‌گرا
 
<sourcesyntaxhighlight lang="objc">
#import "objc/Object.h"
 
}
 
</syntaxhighlight>
</source>
 
== منابع ==