Click here to see English version...

کلاس، متد، تابع و ساختار شرطی – مشخصات رسمی زبان AZRA

AZRA – Class, Method, Function & Conditional Structure Specification

۱. تعریف Class در AZRA

ساختار کلاس در زبان AZRA برای تعریف یک نوع دادهٔ سفارشی استفاده می‌شود. کلاس شامل موارد زیر است:

  • نام کلاس
  • لیست ویژگی‌ها (Properties)
  • بدنهٔ متدها (اختیاری)

ساختار کلی

Class(:ClassName | [prop1:type , prop2:type , …])

پرانتز اول «نام کلاس» را نگه می‌دارد. بلاک داخل براکت‌ها شامل ویژگی‌هاست. پس از تعریف کلاس، یک خط DBS (با تعداد دشِ برابر با ۱) قرار می‌گیرد.

مثال

Class(:Person | [name:str , age:int])
-

این ساختار یک کلاس Person ایجاد می‌کند که دو ویژگی دارد: name و age.

۲. تعریف Method در AZRA

متد یک تابع وابسته به کلاس است و برای رفتارهای یک شیء استفاده می‌شود.

ساختار کلی

Method(:methodName) ->returnType
-[variable definitions and operations]-
turn(:value)

قوانین

  • متد همیشه با کلمهٔ Method شروع می‌شود.
  • returnType نوع خروجی متد است.
  • متغیرهای داخلی متد باید با قواعد Variable Definition نوشته شوند.
  • خروجی متد با دستور turn مشخص می‌شود.
  • پایان متد با خط DBS تعیین می‌شود که تعداد دش آن برابر تعداد خطوط داخلی متد است.

مثال

Method(:greet) ->str
-0msg = "Hello" + name-
turn(:msg)
--

۳. تعریف Function در AZRA

تابع (Func) یک قطعه‌کد مستقل است که خارج از کلاس‌ها قرار می‌گیرد و برای انجام کارهای اصلی یا فرآیندهای سطح بالا است.

ساختار کلی

Func(:functionName)
-[variable definitions and operations]-
turn(optional)
  • تابع با Func شروع می‌شود.
  • مانند متد، درون خود می‌تواند متغیر، عملیات، فراخوانی متد، و Extract داشته باشد.
  • خروجی تابع با turn تعیین می‌شود؛ مقدار می‌تواند وجود داشته باشد یا خالی باشد.
  • DBS پایانی تعداد دش‌های برابر با تعداد خطوط داخلی تابع را دارد.

مثال

Func(:main)
-0p = Person("Amir" , 20)-
-1result = p:greet()-
Extract(:@1)
turn()
----

۴. فراخوانی متد (Method Call)

فراخوانی متدهای کلاس در AZRA با عملگر : انجام می‌شود.

ساختار کلی

object:method()

مثال

p:greet()

این ساختار متد greet را بر روی شیء p اجرا می‌کند.

۵. ایجاد شیء (Object Instantiation)

شیء از روی کلاس با نام کلاس و ارسال آرگومان‌ها ساخته می‌شود.

ساختار

variable = ClassName(arg1 , arg2 , …)

مثال

-0p = Person("Amir" , 20)-

۶. دستور turn

دستور turn مقدار خروجی را مشخص می‌کند.

فرمت‌ها

turn(:value)
turn() (بدون خروجی)

۷. نقش DBS در ساختار کلاس‌ها، متدها و توابع

همهٔ بخش‌های Class، Method و Func باید پس از اتمام خود، یک خط جداکنندهٔ DBS داشته باشند. تعداد دش‌های DBS برابر است با تعداد خطوط داخلی آن بخش.

۸. تعریف رسمی ساختار شرطی (Conditional Structure Specification)

در زبان AZRA، تصمیم‌گیری منطقی با یک زنجیرهٔ شرطی انجام می‌شود که از چهار واژهٔ کلیدی تشکیل شده است: is، reply، shoot و wall.

این چهار واژه در کنار یکدیگر ساختار کامل شرطی زبان را تشکیل می‌دهند. ترتیب استفاده از آن‌ها ثابت است و هرگونه تغییر در ترتیب، از دید مفسر یا کامپایلر خطای نحوی محسوب می‌شود.

۸.۱. عبارت is

ساختار شرطی همیشه با عبارت is آغاز می‌شود. عبارت is شرط اصلی زنجیره را تعریف می‌کند. زمانی که شرط منطقی نوشته‌شده در is مقدار درست داشته باشد، دستورهای داخل بلاک مربوط به آن اجرا می‌شوند و زنجیرهٔ شرطی در همان نقطه پایان می‌یابد. در صورتی که شرط نادرست باشد، اجرای برنامه به بخش بعدی زنجیره منتقل می‌شود.

۸.۲. عبارت reply

پس از is، می‌توان یک یا چند بخش reply تعریف کرد. هر reply یک شرط مستقل است که تنها در صورتی بررسی می‌شود که شرط‌های قبلی برقرار نشده باشند. اگر شرط یک reply درست باشد، بلاک مربوط به آن اجرا شده و زنجیره خاتمه پیدا می‌کند. اگر شرط آن نادرست باشد، بررسی به reply بعدی منتقل می‌شود.

۸.۳. عبارت shoot

اگر هیچ‌یک از شرط‌های is یا reply برقرار نشوند، کنترل اجرا به بخش shoot می‌رسد. بخش shoot نقش مسیر پیش‌فرض را دارد و زمانی اجرا می‌شود که هیچ‌کدام از شرط‌های قبلی نتیجهٔ درست نداشته باشند. در نتیجه shoot همیشه آخرین مسیر اجرایی در زنجیرهٔ شرطی محسوب می‌شود.

۸.۴. عبارت wall()

پس از پایان مسیرهای شرطی، زنجیره باید با عبارت wall() خاتمه یابد. عبارت wall() پایان رسمی زنجیرهٔ شرطی را مشخص می‌کند. نبودن wall() در انتهای ساختار شرطی باعث ایجاد خطای نحوی می‌شود، زیرا کامپایلر پایان بلاک تصمیم‌گیری را تشخیص نخواهد داد.

۸.۵. نحوه اجرای ساختار شرطی

اجرای ساختار شرطی در AZRA به این صورت انجام می‌شود:

  1. ابتدا شرط is بررسی می‌شود. اگر درست باشد، دستورات مربوط به آن اجرا می‌شوند و زنجیره پایان می‌یابد.
  2. اگر نادرست باشد، شرط‌های reply به ترتیب بررسی می‌شوند.
  3. اولین reply که نتیجهٔ درست بدهد اجرا شده و زنجیره پایان می‌یابد.
  4. اگر هیچ‌کدام از آن‌ها درست نباشند، بلاک shoot اجرا می‌شود.
  5. در پایان، عبارت wall() پایان ساختار شرطی را اعلام می‌کند.

۸.۶. DBS در ساختار شرطی

مطابق قواعد نحوی زبان AZRA، پس از پایان این زنجیره باید از خط جداکنندهٔ دش‌ها (DBS) استفاده شود. تعداد دش‌ها در این خط باید دقیقاً برابر با تعداد خطوط منطقی موجود در بلاک شرطی باشد. اگر این تعداد با خطوط بلاک برابر نباشد، خطای DBS ایجاد می‌شود و برنامه معتبر نخواهد بود.