دانستنی‌ها

آموزش کلوژر برای برنامه‌نویسان جاوا

اخیرا کلوژر توجه‌ها را به خودش جذب کرده‌است. در ادامه با مثال‌هایی به تفاوت سینتکس این زبان و جاوا می‌پردازیم.

در دانشگاه، هیچ واحدی برای لیسپ (یا هر زبان تابعی دیگری) نداشتم. بعد از دانشگاه مشغول به کار به عنوان برنامه‌نویس جاوا شدم و باز هم ارتباطی با برنامه‌نویسی تابعی نداشتم. بالاخره من کدی مشابه زیر دیدم:

فکر کردم که استفاده از این زبان دیوانگی است! اما با محبوبیت بیشتر‌ و بیشتر‌ برنامه‌نویسی تابعی، من تصمیم گرفتم به لیسپ شانسی برای یادگیری بدهم. در این مطلب، تلاش می‌کنم زیبایی‌های کلوژر (لیسپ برای ماشین مجازی جاوا)‌ را به شما نشان بدهم.

توجه: من هنوز در حال یادگیری زبان هستم بنابراین ممکن است برداشت‌هایم ساده و دور از واقعیت باشد. اگر شما برنامه‌نویس خبرهٔ لیسپ یا کلوژر هستید، خوشحال می‌شوم با نظراتتان مطلب را بهبود دهید.

اولین برنامه

این برنامه Hello World در زبان کلوژر است که در REPL آن را اجرا می‌کنیم. (برای آشنایی با REPL این مطلب پیش‌تر منتشر‌شده‌ی جاواکاپ را مطالعه کنید.)

سینتکس زبان بسیار ساده‌است:

  • همه‌چیز داخل پرانتز قرار می‌گیرد.
  • اسم تابع اول قرار می‌گیرد.
  • آرگومان‌ها (در صورت وجود) بعد از اسم تابع می‌آیند.
 

تابع square که در ابتدای مطلب تعریف کردیم، به صورت زیر استفاده می‌شود:

همانطور که می‌بینید در کلوژر نسبت به جاوا پرانتز‌های بیش‌تری وجود ندارد، تنها کافیست پرانتز را به سمت چپِ اسم تابع انتقال دهید!

 

عملیات‌های ریاضی

عملیات‌های ریاضی مثل جمع و منها هم از قاعده ذکر‌شده استثنا نیستند و عملگر + یا باید ابتدای عبارت بیایند. در واقع این نماد‌ها، نماد تابع‌های کلوژر هستند. ممکن است کمی زمان ببرد که به این شکل عادت کنید.

باید دقت داشت که این نحوه نمایش، از نحوه نمایش عادی، سخت‌تر نیست. فقط یادمان باشد که عملیات مربوطه ابتدا می‌آید.

تعریف تابع

برای تعریف تابع از ماکروی defn استفاده می‌کنیم.

۱. ابتدا defn را می‌نویسیم.

۲. سپس اسم تابع را مشخص می‌کنیم.

۳. در ادامه، لیست پارامتر‌های ورودی را در براکت می‌نویسیم.

۴. در نهایت بدنه تابع را می‌آوریم.

آخرین عبارت در بدنهٔ تابع، به عنوان دستور return عمل می‌کند.

حالا باید درک تابع square برای ما آسان باشد. ما آرگومان ورودی x را می‌گیریم و (x x *) را برمی‌گردانیم. به همین سادگی.

عبارت‌های شرطی

عبارت if در کلوژر وجود دارد ولی متفاوت از کلیدواژه if در جاوا عمل می‌کند. در حقیقت عبارت های if مشابه عملگر سه‌عملوندی در جاوا هستند. بر اساس شرط داده‌شده، یکی از دو مقدار را برمی‌گرداند. برای مثال:

۱. if را فراخوانی می‌کنیم:

۲. سپس شرط را می‌نویسیم:

۳. سپس مقداری می‌آید که در صورت true بودن مقدار شرط باید برگردد:

۴. در نهایت، مقداری که باید در زمان false بودن مقدار باید برگردد را می‌گذاریم:

یک مثال می‌تواند به فهم کمک شایانی کند:

اگر بخواهیم ترکیب و زنجیره‌ای از شرط‌ها مثل if else در جاوا داشته باشیم، از cond استفاده می‌کنیم. سینکتس cond مانند زیر است:

۱. فرخوانی ماکرو:

۲. لیستی از شرط‌ها با عبارت مختص هر کدام:

۳. و یک عبارت else اختیاری در صورتی که هیچ کدام از شروط برقرار نبودند:

حل یک مساله واقعی

یادگیری سینتکس برای این مقاله کافیست! بیایید یک مساله معروف را حل کنیم. مساله Fizz buzz یکی از مسائل آسان برای استفاده از قابلیت‌های زبان است. برای مطالعه کامل صورت مساله از این لینک استفاده کنید.

ما با تعریف تابع شروع می‌کنیم که یک ورودی می‌گیرد و همان را برمی‌گرداند.

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

این یک راه بدیهی و نادرست است چرا که برای اعداد ۶ و ۹ و غیره درست جواب نمی‌دهد ولی مشکل آن را جلوتر حل می‌کنیم. بیاید buzz را اضافه کنیم:

buzz هم اضافه کردیم. با استفاده از ساختار cond، اضافه کردن fizzbuzz هم ساده است:

عالی است! اکنون لازم است بخش‌پذیری را اضافه کنیم. از تابع mod برای این کار استفاده می‌کنیم:

توجه کنید که ما حالت fizzbuzz را به بالا منتقل کردیم چرا که می‌خواهیم قبل از حالت های fizz و buzz چک شود.

تمام شد! ما مساله را حل کردیم.

خلاصه

با این آشنایی اولیه، دیدیم که کلوژر زبان ساده‌ایست. ساختار‌های اصلی مثل تعریف تابع، عملیات‌های ریاضی یا شرط‌ها بسیار شبیه باقی زبان‌های برنامه‌نویسی هستند. چیزی که اهمیت دارد، این است که کلوژر می‌تواند به راحتی مسائل فوق العاده پیچیده مثل fizz buzz (!) را حل کند. امیدوارم از این مطلب لذت برده‌باشید.

تماشای ویدیو

 

منبع: dzone.com

.

.


با ما همراه باشید

آدرس کانال تلگرام: JavaCupIR@

آدرس اکانت توییتر: JavaCupIR@

آدرس صفحه اینستاگرام: javacup.ir

آدرس صفحه ویرگول: javcup

آدرس گروه لینکدین: Iranian Java Developers

 

[تعداد: 2   میانگین: 5/5]
برچسب ها
نمایش بیشتر

نوشته های مشابه

‫۲ نظرها

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا