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

ارلنگ زبان برنامه نویسی تابعی و همروند است

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

ارلنگ زبان برنامه نویسی تابعی و همروند است

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

در این وبلاگ مطالب مربوط به ارلنگ و الیکسیر منتشر خواهد شد

۳ مطلب در بهمن ۱۳۹۴ ثبت شده است

  • ۰
  • ۰

ارلنگ هم مانند بسیاری از زبان های برنامه نویسی عبارت های کنترلی دارد هرچند که با استفاده از تطبیق الگو و استفاده از توابع با بخش های مجزا تقریبا نیازی با آن ندارید. برای نمونه ارلنگ case را معرفی کرده است که کاربردی کاملا شبیه switch در زبانهای خانواده C دارد.

case Condition of

               true -> doSomethings;

               false -> doNothing

end;

در case  ابتدا شرطی مورد بررسی قرار می گیرد و مطابق با مقدارش قسمتی از case اجرا می شود. برخلاف زبانهای برنامه نویسی خانواده C  شما نیازی به break ندارید و تنها بخشی که مطابقت یافت اجرا می شود.

ارلنگ if  هم دارد. کار با آن ساده است تنها باید بخاطر داشته باشید که در زبان ارلنگ لااقل یکی از بخش ها باید true  باشد در غیر ایصورت با پیغام خطا روبرو می‌شوید.

max(X, Y) ->

               if

                              X > Y -> X;

                              X < Y -> Y;

                              true -> nil

               end.

همانطور که اشاره شد در بسیاری از موارد نیازی به استفاده از عبارات کنترلی نیست. برای نمونه ارلنگ عملگرهایی را برای کار برروی لیست در خود دارد که شما براحتی می توانید با انواع لیست ها کار کنید. فرمت آنها مطابق دروس جبر دوره دبیرستان است. مثلا زمانی که بخواهید کلیه اعضای یک لیست را دو برابر کرده در لیست جدیدی بریزید به قسم زیر عمل می کنید:

[2*X || <- L]

عبارت بالا اینطور خوانده می شود: به ازای هر X  از لیست L  دو برابر X  را حساب کن. حاصل لیستی ازمقادیر جدید خواهد بود. مثال زیر به خوبی نمایش گر این کاربرد خواهد بود

L = [1,2,3,4,5].

L2=[2*X||X <- L]

L2=[2,4,6,8,10]

 

  • مهدی حسینی مقدم
  • ۰
  • ۰

گاهی اوقات نیاز دارید توابعی را برای استفاده لحظه ای تعریف کنید و یا برای نمونه تابعی را به عنوان متغیر به تابع دیگری بفرستید. برای این منظور در ارلنگ می توانید توابع بی نام تعریف کنید برای این کار مطابق زیر عمل کنید:

Double = fun(X) -> 2 * X end.

در مثال فوق Double  یک متغیر است که تابعی را در خود جا داده است. این تابع بی نام ورودی خود را دوبرابر می کند. می توان از Double مانند تابع معمولی استفاده کرد برای نمونه می توان از Double با ورودی 10 خروجی 20 را گرفت. استفاده از توابع بی نام محدودیتی ندارد و شما می توانید در داخل توابع بی نام از توابع بی نام استفاده کنید. عدد ورودی را در در عدد دیگری ضرب می کند. خروجی تابع اول تابعی است که عمل ظرب را انجام می دهد. خروجی تابع دوم عدد مورد نظر است:

Mult = fun(Times) -> ( fun(X) -> X * Times end ) end.

Triple = Mult(3).

Triple(5).  % 15

کنترل ورودی توابع از طریق گارد:

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

max(X, Y) when X > Y -> X;

max(X, Y) -> Y.

تابع بالا بیشینه دو عدد را بر می گرداند. قسمت اول چنانچه X>Y باشد تابع X  را بر می گرداند. چنانچه نبود تابع در قسمت دوم اجرا می شود که Y  را بر می گرداند. مشاهده می کنید که در ارلنگ عملا بجای استفاده از if که در زبان های رایج کاربرد دارد می تواند در قسمت ورودی توابع را بررسی کرد. با عبارت when  و شرط بعدی اش گارد گفته می شود. گارد ها می تواند شامل چند پیش شرط باشند که با ‘,’ از هم جدا می شوند و معنی AND را می دهد.

  • مهدی حسینی مقدم
  • ۰
  • ۰

کدهای زبان برنامه نویسی ارلنگ در درون واحدی بنام ماژول قرار می گیرد تقریبا تمامی توابع در داخل ماژول نوشته می‌شوند. ماژول ها در داخل فایلهایی با پسوند .erl ذخیره می‌شوند. ماژول ها برای اجرا نیاز به کامپایل شدن دارند. لازم به ذکر است فایل های کامپایل شده دارای پسوند .beam می باشند. در مثال زیر تابعی بنام area تعریف شده که بسته به نوع ورودی مساحت شکل مورد نظر را محاسبه می کند.

-module(geometry).

-export([area/1]).

area({rectangle, Width, Height}) -> Width*Height;

area({circle, R}) -> 3.14 * R * R.

لازم به ذکر است area یک تابع است و بخشهای مختلف آن با ; از هم جدا می شوند. چنانچه ورودی ما توپلی که عضو اول آن rectangle است، باشد قسمت اول تابع اجرا می گردد و چنانچه circle باشد قسمت دوم. نکته اینجاست که تابع در حالتی که ورودی دارای شکل متفاوتی باشد تعریفی ندارد و کاربر پیغام خطا خواهد گرفت. برای غلبه بر آن می تواند قسمت کلی در انتهای تابع قرار داد:

area({rectangle, Width, Height}) -> Width*Height;

area({circle, R}) -> 3.14 * R * R;

area(_) -> error.

توجه داشته باشید که _ به معنی هر ورودی می باشد. توابع از بالا به پایین اجرا می شوند و بنابراین چنانچه ورودی مطابق با دو قسمت اول نبود قسمت سوم اجرا خواهد شد. جابجایی قسمتهای تابع نتیجه متفاوتی خواهد داد.

فایل فوق بنام geometry.erl ذخیره می گردد. برای کامپایل کردن آن کافی است وارد محیط ارلنگ شده و با استفاده از دستور زیر فایل را کامپایل کنیم:

c(geometry).

برای استفاده از توابع فایل بصورت زیر عمل می کنیم:

geometry:area({rectangle, 10, 50}).

geometry:area({circle, 2}).

به ترتیب باید 500 و 12.56 را بعنوان جواب دریافت کنید.  

چنانچه شما دانشی در زمینه زبانهای برنامه نویسی شی گرا داشته باشید با نوع داده‌ و توابع عمومی و خصوصی آشنا هستید. توابع عمومی توابعی هستند که در بیرون از کلاس قابل دسترسی هستند حال آنکه توابع خصوصی تنها در داخل کلاس می توانند مورد استفاده قرار گیرند. چنین محدود سازی در ارلنگ با کمک export صورت می گیرد. در قسمت export شما لیستی از توابعی را که مایلید از بیرون قابل اجرا باشند را وارد می کنید. توابع بصورت نام / تعداد ورودی نوشته می شوند. از آنجایی که تابع area تنها یک ورودی می گیرد نام کامل آن بصورت area/1 خواهد بود.

  • مهدی حسینی مقدم