TGViewer
Go Casts | Systems & Agents 🚀 Go Casts | Systems & Agents 🚀 @gocasts · 10K subscribers
Post #113 1.68K
سلام دوستان، این ویدیو رو اگه دوست داشتید ببینید.
Functional Programming in 40 Minutes • Russ Olsen • GOTO 2018
https://www.youtube.com/watch?v=0if71HOyVjY

شاید تعجب کنید که چرا دارم در مورد functional programming صحبت می کنم.
اینکه چرا زبان های functional رو دنبال می کنم در آینده خواهم گفت.

ضمنا oop اونی که ما فکر میکنیم و اونی که زبان های معروف به oop سعی می کنن به ما بفهمونن نیست. برای تایید حرفم کافیه بریم سراغ خالق عبارت oop یعنی Alan Kay. شاید اگه به شما بگن functional ترین زبان دنیارو انتخاب کنید، احتمالا همه تون LISP رو انتخاب میکنید که صرفا یه سری پرانتزه و وسط پرانتزا یه سری کاراکتر هم میبینی😂😂. مثلا این تابع Factorial هست در زبان LISP

(define (factorial n) (cond ((= n 0) 1) (t (* n (factorial (- n 1))))))


حالا حرف alan kay رو بخونید:

OOP to me means only messaging, local retention and protection and hiding of state-process, and extreme late-binding of all things. It can be done in Smalltalk and in LISP.

http://userpage.fu-berlin.de/~ram/pub/pub_jf47ht81Ht/doc_kay_oop_en

من تقریبا یک سالی میشه که خیلی دنبال میکنم زبان های functional رو مثل elixir، زبان های fp دیگه ای هم هستن مثل closure و haskell و erlang که خیلی محبوب هستن

گولنگ تقریبا یه زبان object oriented هست، تو همیشه باید دغدغه struct و state فیلدهاشو داشته باشی، اینکه چه متدی چه فیلدی رو آپدیت میکنه و بعد از اینکه یه زنجیره ای از متدهارو روی structت فراخوانی میکنی عملا دیگه غیرقابل پیش بینی هست که state اون آبجکت چیه

کلا نوشتن pure function تو هر زبانی خیلی ساده و لذتبخشه. یه تابع خیلی ساده و باحال که به عنوان ورودی یه سری مقدار میگیره و به عنوان خروجی یه مقدار جدید میده. دیتای ورودی رو تغییر نمیده، هیچ گونه side-effectی هم نداره، side-effect اینطوری میشد که مثلا وسط تابع ت یه کوئری به دیتابیس میزدی، یا یه سرویس و api دیگه رو فراخوانی میکردی و یا حتی یه چیزی تو فایل میریختی، اینا میشد side-effect.

تو برنامه نویسی به این توابع میگن pure function یعنی تابعی که هیچ side-effectی نداره، ورودی میگیره و یه خروجی تحویل میده

ایده functional programming خیلی قشنگه، اونجا همه چیز pure function هست، همه data structure ها هم immutable هستن، یعنی تو حتی اگه بخوای هم نمیتونی دیتای ورودی رو تغییر بدی، تو فقط میتونی دیتا رو کپی کنی و روی کپی تغییرات ایجاد کنی، اینطوری side-effect روی ورودی هم نداری

من تجربیاتی که تو این یک ساله از برنامه نویس های مختلف خوندم اینه که هر کسی برنامه نویس functional رو کار کرده به شدت لذت برده از زبان های functional، هم به شدت حجم کدی که مینویسن کمتره، هم معمولا کد تمیزتره و ساختار درستی داره، هم اینکه خیلی باگ پیدا کردن راحت تره. و در یک کلام productivity خیلی خوبی بهت میده، از این نظر که از زمان گرفتن ایده و کد نوشتن و اجرا کردنش روی پروداکشن زمان کمی بگذره، گولنگ هم تو productivity خیلی خوبه به همین دلیل محبوب شده، اما اصلا functional نیست و نمیخواد باشه، چون بزرگترین شرط functional بودن immutability هست که data structure های گولنگی ندارن بجز string که این یکی فقط immutable هست.

خیلی functional programming به ریاضی نزدیکه. مثلا من اگه بهت بگم تو زبان گولنگ مقدار y تو کد زیر چیه میگی ۴
var x = 2
var y = x + 2
اما اگه مقدار x رو بهت نگم، میگی که معلوم نیست، اول باید مقدار x در سمت راست معلوم بشه بعدش میشه مقدار y رو محاسبه کرد. چون تو برنامه نویسی زبان های oop عادت کردیم عملگر = رو assignment ببینیم، که همیشه اول مقدار سمت راست رو محاسبه میکنه و در متغیر سمت چپ ذخیره میکنه

اما تو زبان های functional مثل elixir عملگر = مثل همون عملگر = ریاضیات عمل میکنه و بهش pattern matching میگن.
تو ریاضی اگه این معادله رو با مقدار y برابر با ۳ بهت بدن خیلی سریع میگی x میشه ۲ و دیگه نمیگی اول باید مقدار x معلوم باشه، کافیه مقدار یکی از مجهولات در هر طرف معادله مشخص باشه که بشه مقدار دیگری رو تشخیص داد.
y= x + 1

دقیقا تو زبان های functional هم همینطوره، این دقیقا اتفاقیه که با pattern matching در elixir میفته. تو همه چیز رو تابع ریاضی میبینی، یه ورودی میگیری و یه خروجی داری همین. فوق العاده برنامه نویسی رو ساده، لذتبخش و راحت میکنه


مثلا discord با ۵۰۰ میلیون کاربر با elixir نوشته شده، یا whatsapp با بیش از ۲ میلیارد کاربر با erlang نوشته شده که زبان های functional هستن.

#functional_programming #elixir #lisp #pattern_matching

@gocasts
  • 👍 14
  • 🔥 6
  • ❤ 2
More from @gocasts
  1. Oct 11, 2026روحت شاد آقای چاپلین. باورم نمیشه که عصر جدید داره برامون تکرار میشه! انگار خط تولید «عصر…
  2. Oct 9, 2026با یه پارادوکسی مواجه هستیم که خیلی مهمه درست درکش کنیم. وقتی در مورد کارایی که با ایجنت‌ه…
  3. Oct 4, 2026از دیروز چند آیتم ظاهری در GoCasts به‌روز شده 🚀 اگه دقت کرده باشید، لوگو، اسم کانال و بیو…
  4. Oct 1, 2026اینم از عمو باب که تسلیم شد! کاری ندارم که با ایشون هم نظر بودید و هستید یا نه. به دور از…
  5. Oct 1, 2026ترکیب Sonnet 5.5 و Opus 5.5 این روزا خیلی خوب جواب میده. الگویی که برای من جواب داده اینه:…
  6. Sep 24, 2026این بهترین تجربه‌ای بود که تا حالا با یه agent داشتم. دیشب با تاخیر چند ساعته ایمیل هاستین…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →