تغییر ناپذیر بودن داده ها در الکسیر

سلام
از اونجایی که داده ها تو الکسیر immutable هستد بهترین راه برای استفاده از حلقه ساده این زبان یا توابع بازگشتی چیه ؟
برای کارای IO چیکار کنم که سرعتش مناسب باشه ؟ پردازش عکس های ساده یا خوندن کاراکتر به کاراکتر یک فایل حجیم چون داده ها immutable هستند علاوه بر افت سرعت باعث میشه منابع سیستم خیلی استفاده بشن ، بهترین راه چاره چیه برای این کارا ؟

من از الکسیر استفاده نمی کنم. اما مفهوم داده های Immutable در بیشتر زبان های فانکشنال هست. شما درکت از دیتا Immutable درست نیست. این نوع داده ها علاوه بر افزایش عموما منابع کمتری هم مصرف می کنند ( البته بستگی زبان هم داره ). خوندن از یه فایل هم ریطی به این نوع از داده ها نداره. در عمل اگه شما از یه character device مثل هارد بخونین در هر صورت کرنل شما به صورت کاراکتر به کاراکتر دیتا رو می خونه.

در کل پیشنهاد می کنم بیشتر در مورد اصول برنامه نویسی فانکشنال مطالعه بفرمائید

3 پسندیده

بله متاسفانه با فانکشنال اصلا آشنا نیستم در خصوص immutable هم بعد مطالعه و تمرین ب این نتیجه رسیدم. فایلم یه متن بود داخل یه فایل که میخواستم پردازش کنم ولی چون داده ها تغییر ناپذیرن با یه تغییر کوچولو داخل ی متن دوباره بهش فضای جدید اختصاص میده و همین باعث میشه سرعتش کم بشه . خیلی خوشحال میشم ب من یه متنی کتابی منبعی معرفی کنید که مفاهیم برنامه نویسی فانکشنالو سیر تا پیاز بگه و فرق و معایب و مزایاشو بهتر درک کنم

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

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

1 پسندیده

با زبان انگلیسی مشکلی نیست بالاخره هرطوری شده میشه مفهوم رو کشید بیرون مشکل با خود فانکشناله
خیلی سخته ذهن خودمو با فانکشنال تطبیق بدم ، برای حل مسئله مثل یه برنامه نویس فانکشنال فکر کنم
آرایه ها رو با توابع بازگشتی تغییر بدم و…
کدی که تو GO مینویسم از کدی که تو الکسیر نوشتم خیلی سریعتر اجرا میشه علتشم اینه طرز تفکر یه برنامه نویس فانکشنال رو ندارم و درنتیجه خروجی خوبی هم نخواهم داشت.دربه در دنبال یه کتابی ام از سیر تا پیاز مفاهیم فانشکنال رو بگه ولی فعلا منبع خوبی پیدا نکردم ، یاد گرفتن سینتاکس الکسیر زمان بر نیست اما بدست اوردن طرز فکر فانکشنالی عملا کار سختیه
برای مثال ما برای مدت خیلی درازی عادت کردیم از حلقه ها بخصوص for استفاده کنیم و تو برنامه نویسی فانکشنال تا جایی که میدونم همین کار رو باید با توابع بازگشتی انجام داد و اینجاس که کله مو میکوبم به مانیتور :frowning:
بزا بگردم اگه یه منبع خوب برا مفاهیم فانشکنال پیدا کنم حتما میفرستم ، از خود زبان مهم تره این چون ویژگی هاش و طرز فکری که باید با اون کد زد رو بدست بیاریم دیگه هاسکل الکسیر فرقی نداره

1 پسندیده

خیلی کتاب مجانی دراین زمینه موجوده
http://learnyouahaskell.com/
https://www.gitbook.com/book/drboolean/mostly-adequate-guide/details

1 پسندیده

سلام ،منظورم مفاهیم فانکشناله اینکه برنامه نویس فانکشنال چجوری مسائل رو باید پیاده کنه ؟
مثلاً خودم اینطوری متوجه شدم که head , tail در لیست ها ممکنه یکی از موارد استفادش همین توابع بازگشتی باشند که بجای حلقه ها استفاده میشن و دارم تمرین میکنم و سعی میکنم ذهنمو به توابع بازگشتی عادت بدم .
اگر یه کتابی باشه که فانکشنال چیه ؟ فرقش چیه ؟ چه ویژگی هایی داره و… سیر تا پیازش روبگه پیدا کردن کتاب آموزش هاسکل خیلی آسون تره . البته کتاب Elixir in Action رو که تو یکی از پست های قبلی گفته بودین دارم میخونم و فعلا بنظر من بهترین کتابی بوده که علاوه بر اموزش الکسیر مفاهیم فانکشنال رو هم یجورایی توضیح میده اما در کل یه کتاب جامع و کامل باشه که از صفر تا صد صرفا مفهوم فانشکنال رو بگه خیلی عالی تر میشه

در مورد فایل باید بگم که این جوری نیست که اگه فایل آپدیت شه استرینگ شما هم آپدیت می شه. در همه زبان ها باید فایل رو دوباره بخونی. در مورد استارکچر ها هم، من الکسیر رو دقیق نمی دونم اما مثلا تو کلوژر و Go به این صورت که وقت قسمتی از دیتا که تغییر می کنه تو مموری عوض می شه و قسمتی که ثابت مونده سر جاش می مونه. این رو هم یاید یادتون باشه که وقتی دیتا تغییر ناپذیر باشه مدیریت حافظه بسیار آسون تر و سریع تر می شه.

2 پسندیده

نه آرايه ها و نه هيچ نوع ديگه اى از ديتا در زبان هاى فانكشنال قابل تقير نيستند

1 پسندیده

کتابهایی که عرض کردم و
Haskell from the first principles
functional programming in scala
این مطالب به خوبی توضیح‌ میدن
ولی حتی روبی هم کلی ساختارهای فانکشنال داره
وقتی شما map reduce select flat map و استفاده میکنید از اصول فانکشنال بهره میگیرید map نتیجه ی انجام فانکشن بر هرداده لیست و به عنوان لیست جدیدمیده این طوری لیست اول تغییر نمیکنه

3 پسندیده

روبى ميتونه خيلى فانكشنال باشه

2 پسندیده

درود خدمت شما . به هر صورت داریم داده رو می ریزیم توی یک متغییر جدید حتی به وسیله map و … باشه !! درسته ؟

1 پسندیده

متغییری وجود نداره. داده ای نداری که تغییر پذیر باشه که متغییر داشته باشی. یه سری binding داری به یه سری داده

2 پسندیده

خير به هيچ وجه!
همونطور كه @lxsameer گفت در واقع متغيرى وجود نداره.
در اليكسر assignment صورت نميگيره بلكه اليكسر هميشه سعى ميكنه راهى براى پتررن مچ كردن از چپ به راست پيدا كنه

2 پسندیده

تشکر از دوستان عزیز @lxsameer و @toomaj @samdvr که همیشه کمک هستند و شرمنده از اینکه سطح سواد بنده کم و همیش باعث زحمت می شم .

@toomaj می شه یک مثال کاربردی بزنی . مثلا در یک پروژه بزرگ یا کاربردی بزنید ؟ خیلی از موارد مثلا در ذهن منم هست مثلا از head , taile استفاده کنم یا پنترن بزنم ولی دقیقا این موضوع فکر نکنم بتونم با این موارد کوچیک آموزشی درک کامل کنم.

حتی در برخی از ویدیو ها دیدم طرف برای اینکه مثلا از داده های x,s,w,g,u,q بیاد یک داده های جدیدی درست کنه رفتنه یک فانکشن جدید درست کرده (دقیقا ویدیوشو یادم نیست کجا دیدم ) اینم بازم می شه بلاک کد اضافه

بلخره من می خوام یک آرایه درست کنم از یک آرایه قدیمی و چندین جا فراخوانیش کنم اون رو طبق روال تا به امروز می انداختم در یک متغییر جدید و فراخوانی می کردم و الان شما می فرمایید که در الکسیر یا برنامه نویسی فانکشیونال این کار اضافه کاری و اشتباه هست

خلاصه مطلب من دقیقا درک نکردم :smiley:

1 پسندیده

@shahryarjb فكر ميكنم منظورتون فانکشنال بود :hugs:

سايز پروژه تفاوتى ايجاد نميكنه، استفاده از head و tail همون پترن مچينگ هست، سر فرصت بيشتر توضيح ميدم.
من به هيچ وجه عرض نكردم در برنامه نويسيه فانكشنال چيزى اشتباه يا اضافه كاريه!
من گفتم اصلا assignment وجود نداره و امكان نداره.

به دوستانى كه از متدهاى ديگه به فانكشنال ميان پيشنهاد ميكنم كلا برنامه نويسى رو از پايه شروع كنند و مفاهيم بخصوص oop رو سعى نكنن به كار بگيرند چون عملى نيست و كار يادگيرى سخت و گيج كننده ميشه.
در يك كلام بايد فانكشنال فكر كرد و با راه حل هاى فانكشنال عمل كرد

1 پسندیده

دقیقا و گل گفتین پیر طریقت ما ،باید با ذهن فانکشنالی به مسائل نگاه کرد اما مشکل اینجاست این ذهنیتو نداریم چون اطلاع صحیح و پایه ای نداریم از فانکشنال و امیدوارم شما اساتید اگر ممکن باشه مفاهیم فانکشنالی رو برامون توضیح بدین :cry:

متغییری وجود نداره. داده ای نداری که تغییر پذیر باشه که متغییر داشته باشی. یه سری binding داری به یه سری داده

این حرف واقعا کاربردی و جالب بود ممنون

2 پسندیده

وضعیت متغیر های سراسری چطوری تو فانکشنال ها ؟ وقتی که متغیر سراسری نیست کمبودش چطورش جبران میشه ؟
البته حرف که شما همه چی binding هست رو تونستم درک کنم اما این کمبود چطور جبران میشه ؟

در این مدت این وب سایت باعث شده اساتیدی مثل شما samdvr ,lxsameer رو پیدا کنم و نگاه خیلی حرفه ای تر و زیباتری به برنامه نویسی داشته باشم و پیشرفت خیلی خوبی داشتم از وقتی این وب سایت رو پیدا کردم.
من چیز خاصی بلد نیستم ، از طرفی هم آدم سمج و پرحرفی ام ولی کسی جز شما 3 نفر رو نمیشناسم تخلیه اطلاعاتی کنم برای همین خواهش میکنم بی حوصلگی نکنید و مباحث این فانکشنال رو لطف کنید برای من و خیل عظیمی که شک ندارم اونها هم بلد نیستن و میخوان یاد بگیرن توضیح بدین ، وب رو هرچقدر میگردم چیز خاصی پیدا نمی کنم.

2 پسندیده