زبان برنامه نویسی ارلنگ - جبر بولی و عملگرهای مقایسه‌ای

اگه یک زبان نتونه بگه که فرق دو تا چیز با هم چیه، بزرگه یا کوچک، درسته یا غلطه یه مشکل جدی داره. ارلنگ مثل هر زبان دیگری راهی داره که اجازه میده از عملگرهای بولی برای مقایسه استفاده کنین.

جبر بولی خیلی ساده‌اس:

1> true and false.
false
2> false or true.
true
3> true xor false.
true
4> not false.
true
5> not (true and true).
false
توجه توجه: عملگرهای بولی and و or همیشه آرگومان‌های هر دو طرف عملگر رو ارزیابی می‌کنن. اگه بخواین میتونین از عملگر های andalso و orelse استفاده کنین که این دو عملگر عبارت سمت راست رو اگه لازم باشه ارزیابی می‌کنن و به اونا عملگرهای اتصال‌کوتاه (short-circuit) گفته میشه.

ارزیابی برابری و نابرابری هم خیلی ساده است ولی از نماد‌هایی استفاده می‌کنه که کمی با نماد‌هایی که توی زبان‌های دیگه دیدین متفاوته:

6> 5 =:= 5.
true
7> 1 =:= 0.
false
8> 1 =/= 0.
true
9> 5 =:= 5.0.
false
10> 5 == 5.0.
true
11> 5 /= 5.0.
false

ارلنگ برای مقایسه برابری و نابرابری به جای == و =! از عملگرهای =:= و =/= استفاده میکنه. سه عبارت آخر یه تله رو نشون میده: توی عملیات ریاضی اعداد اعشاری و صحیح برای ارلنگ فرقی نمی‌کنه ولی توی مقایسه براش فرق می‌کنه. جای هیچ نگرانی نیست چونکه عملگر های == و =/ برای این موارد درست شدن.چیزه که مهمه یادتون باشه اینه که میخواین مقایسه دقیق باشه یا نه.عملگر‌های دیگه برای مقایسه اینا هستند: > (کوچکتر)، < (بزرگتر)، =< (بزرگتر مساوری)، >= (کوچکتر مساوی). آخری با زبان های دیگه همخوانی نداره و علت بسیاری از خطاهای دستوری میتونه بشه. چشمتون به این باشه!: >=

12> 1 < 2.
true
13> 1 < 1.
false
14> 1 >= 1.
true
15> 1 =< 1.
true

چه اتفاقی میفته وقتی بگیم: llama + 5 یا true == 5 ؟ بهترین راه برای دونستن اینه که امتحان کنیم و با یه پیام خطا حالمون جا بیاد!

12> 5 + llama.
** exception error: bad argument in an arithmetic expression
        in operator  +/2
            called as 5 + llama

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

13> 5 =:= true.
false

چرا جلوی استفاده از نو‌ع‌های متفاوت رو توی بعضی عملیات میگیره و ولی توی بعضی نه؟ در حالی که ارلنگ نمیزاره هر چیزی رو با هر جیز جمع کنین ولی اجازه میده که با هم مقایسه کنین. چونکه سازنده ارلنگ یه کم عملگرا بوده و گفته: این تصمیم میتونه خوب باشه که بشه به راحتی یه الگوریتم مرتب‌سازی عمومی درست کرد که هر واژه (Term) ای رو مرتب سازی کرد. برای اینه که زندگی‌تون رو ساده تر کنه. یک از آخرین چیزایی که وفتی دارین با جبر بولی و مقایسه‌ای کار میکنین به ذهن بسپارین اینه:

14> 0 == false.
false
15> 1 < false.
true

اگه با زبان‌های شی‌گرا کار کرده باشین باید بگین خط ۱۴ باید بشه true و خط ۱۵ باید بشه false! خب false یعنی 0 و هر چیزی غیر اون یعنی true! به جز ارلنگ.ارلنگ چیزی به اسم true یا false بولی نداره. واژه‌های true و false اتم هستند ولی به خوبی توی زبان قرار گرفتند و شما نباید با اون مشکلی داشته باشید چونکه انتظار ندارین که false و true معانی غیر از false و true داشته باشند.

توجه توجه: ترتیب هر عنصر توی مقایسه اینجوریه:
number < atom < reference < fun < port < pid < tuple < list < bit string
شما هنوز تمام این نوع‌ها رو نمی‌دونید ولی کم‌کم یاد می‌گیرید. فقط یادتون باشه علت اینکه شما میتونین هرچیزی رو با هر چیزی مقایسه کنین همینه!