زبان برنامه نویسی ارلنگ - متغیرها

متغیرهای تغییر ناپذیر!

امکان انجام عملیات ریاضی خیلی خوبه ولی اگه نشه نتیجه رو جایی ذخیره کرد زیاد چنگی به دل نمیزنه. برای همین از متغیرها استفاده می‌کنیم. اگه مقدمه رو خونده باشین میدونین که توی برنامه‌نویسی تابع گرا متغیرها نمی‌تونن متغییر باشن. رفتار اولیه متغییرها توی این ۷ دستور نشون داده میشه ( نکته اینکه متغیرها با حروف بزرگ شروع میشن)

1> One.
* 1: variable 'One' is unbound
2> One = 1.
1
3> Un = Uno = One = 1.
1
4> Two = One + One.
2
5> Two = 2.       
2
6> Two = Two + 1.
** exception error: no match of right hand side value 3
7> two = 2.
** exception error: no match of right hand side value 2

اولین چیزی که این دستورها به ما میگن اینه که شما میتونین فقط یک بار یک مقدار رو به یک متغییر نسبت بدین؛ و شما میتونین وانمود کنین که یک مقدار رو به یک متغییر نسبت میدین اگر همون مقدار قبلا نسبت داده شده باشه. اگه مقدار جدید با مقدار قبلی فرق کنه ارلنگ شاکی میشه. این رفتار درسته ولی توضیحش یه‌کم سخته و به عملکرد عملگر = بستگی داره. عملگر = دو مقدار رو بررسی میکنه و اگه با هم فرق داشتن شاکی میشه. و اگه هم فرق نداشتن مقدار رو برمی‌گردونه.

8> 47 = 45 + 2.
47
9> 47 = 45 + 3.
** exception error: no match of right hand side value 48

اگه عبارت سمت چپ یک متغییری باشه که مقدار نگرفته هنوز، عملگر = چه رفتاری از خودش نشون میده؟ ارلنگ خودکار مقدار سمت راست رو به متغییر سمت چپ مقید (bind) میکنه و در نتیجه مقایسه سمت راست با سمت چپ درسته و متغییر مقدارش رو توی حافظه نگه میداره.رفتار عملگر = پایه چیزیه که بهش تطبیق الگو (pattern matching) میگیم که در خیلی از زبان‌های برنامه‌نویسی تابع‌گرا وجود داره. هرچند که روش ارلنگ منعطف تر و کامل تره. چیز بعدی که دستورات ۱تا۷ به ما میگن اینه که نام متغییر‌ها باید با حروف بزرگ شروع بشه. دستور ۷ چونکه two با حرف کوچک شروع شده به خطا میخوره. همچنین متغیر با زیر‌خط هم میتونه شروع بشه ولی قرارداد اینه که جایی استفاده کنین ازش که مقادیرش براتون اهمیت نداره ولی احساس می‌کنید برای خوانایی و مستند سازی برنامه نیازه که باشه.همچنین میتونین متغییر های داشته باشید که نامش فقط یه زیر‌خط هست:

10> _ = 14+3.
17
11> _.
* 1: variable '_' is unbound

برخلاف متغیر های دیگه این متغیر هیج مقداری رو ذخیره نمی‌کنه. الان کلا بی‌فایده است ولی بعدا میبینین کجا بهش نیاز پیدا می‌کنیم.

توجه توجه: اگه دارین توی Shell تست‌ها رو انجام میدین و یه مقدار رو اشتباهی توی یک متغییر ذخیره کردین میشه با تابع f(Variable) مقدارش رو پاک کرد. اگه هم میخواین تمام متغییر ها پاک بشن از تابع ()f استفاده کنین. این توابع فقط توی شل برای تست کارایی دارن. وقتی که داریم یه برنامه واقعی می‌نویسیم نیاز نمیشه که مقادیر رو به این صورت پاک کنیم.

شب خوش