پارادایم فانکشنال در jvm

در زبان کلوژر برنامه شما میتونه قوانین Referential Transparency پردایم فانکشنال رو رعایت نکنه، یعنی بستگی به کد نویسی و کتابخانه های مورد استفاده هم داره،
یکی از ماهیت های اکوسیستم JVM اینه که نمیتونید کاملا فانکشنال باشید و زندگی راحتی داشته باشید

سلام میتونید این گفته رو برای من کمی بیشتر بشکافید؟ که دقیقا چرا این موضوع صادق هست ؟ و علتش چی هست؟

ممنونم

چیزی که من میدونم کلا JVM‌ برای شئ‌گرایی درست شده و همه چی توش آبجکت هست. زبان های FPای که روی JVM هستن صرفا syntax فانکشنال با یک سری بهینه‌سازی هستند. یجورایی Syntactic sugar دارن.

1 Likes

اصلا نمیشه گفت Syntactic sugar هست چون کلوژر از jvm فقط به عنوان virtual machine استفاده میکنه. ولی تا حدودی با شما موافقم.
به خاطر ضعف‌های jvm، یه سری کارها رو نمیشه انجام داد (پیاده سازیش سخت میشه و نتیجه هم خیلی خوب در نمیاد). مثلا کلوژر میتونست tail call optimization بهتری داشته باشه!

2 Likes

من زیاد کلوژر بلد نیستم. ولی مثلا در اسکالا، توابع هم آبجکت هستند و Function1 تا Function22 را برای توابع یک تا بیست‌ و دو پارامتر خودش تعریف کرده و با Syntactic sugar میشه ساده‌تر و FPتر استفاده کرد. حالا توی کلوژر نمیدونم چطوری مدل شده.
یا حالا همین tail recursion‌که گفتی توی اسکالا optimizer تبدیل میکنه به loop.

1 Likes

خب چرا از خودم نپرسیدی؟ :sweat_smile:
البته خوبه که دیگران هم نظر بدن

من فکر میگم syntactic sugar رو کمی اشتباه متوجه شدین، معنیش کدهای کوچکی هستند که کار کد های بزرگتر مشابه رو انجا میدن، کلوژر به هیچ وجه سینتکتیک شوگر نیست، یک زبان برنامه نویسی کامل و یک دایلکت لیسپه. مثل اینه که بگیم C سینتکتیک شوگر اسمبلی هست :slightly_smiling_face:

3 Likes

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

@Amin9393 جان شما تا شروع به کدنویسی با زبان زیبای کلوژر نکنی خیلی از موارد هیچوقت برات روشن نمیشه، کتاب آنلاین و رایگان Clojure For The Brave And True بسیار عالی مفاهیم رو توضیح داده، از همون اول کلی از سوالات شما پاسخ داده شده.
بعضی چیزای دیگه هم مثل referential transparency هست که پایه ای هستند و منابع بسیار.

2 Likes

ممنون. آره محدوده دقیق تعریفش رو مطمئن نیستم. ولی به هر حال وقتی برای تعریف یک تابع باید شئ درست کنم و مثل هر نوع داده دیگه آن را تعریف کنم و با Syntactic sugar دارم یک لامبدا تک خطی می‌نویسم، بنظرم اولی خیلی OOP بود و الان خیلی FP شد، درسته که کوتاه و در حد یک خط هم شد.

1 Likes

ولی لمدا syntactic sugar چیزی نیست، ممکنه برای لمدا سینتکس کوتاه یا همون syntactic sugar داشته باشیم، اما معنیش این نیست که لمدا سینتکتیک شوگر چیز دیگه ای باشه. اگر همچین اشتباهی بکنیم ممکنه در کدنویسی مشکلات زیادی پیش بیاد.

2 Likes

گفتم شاید سوالاتم خیلی زیاد شه :sweat_smile:

خیلی ممنونم ازتون کاملا درست میگید

مشکلی نیست :slightly_smiling_face: