درخواست توضیح ساده در مورد protocol در زبان برنامه نویسی


#21

فعلا قطار رفت… برم تا جا نموندم، رسیدم خونه بیشتر پست میزارم


#22

نگهداری و دیباگ، اگر زیاده روی شده باشه وگرنه مشکلی نیست


#24

اینم از کتاب تازه خوندم گفتم اینجا بزارم بمونه

“Elixir’s protocol is a feature that lets you create a single interface that various data types can implement. Using that, you can have polymorphism: a single interface that works with different data types. If you came from object-oriented languages like Java, you’ll see that it’s very similar to how interfaces work. Elixir protocols will help you create simple interfaces, leading to a better codebase design.”

Excerpt From: Ulisses Almeida. “Learn Functional Programming with Elixir (for shahryar tavakkoli)”. Apple Books.


#25

یه مثال ساده

(defprotocol PlusTen
  (+ten [type-it-self] "Returns the given type-it-self + 10"))

(extend-type java.lang.Long
  PlusTen
  (+ten [int]
    (+ 10 int)))
(+ten 14)

(extend-type String
  PlusTen
  (+ten
    [string]
    (+ 10 (Integer/parseInt string))))

(+ten "10")

(extend-type clojure.lang.PersistentVector
  PlusTen
  (+ten
    [v]
    (map #(+ten %) v)))

(+ten [1 2 3 4])


(extend-type clojure.lang.IPersistentMap
  PlusTen
  (+ten
    [v]
    (map #(+ten %) (vals v))))

(+ten {:a 1
       :b 2
       :c 3})

;; Alternative syntax
(extend-protocol PlusTen
  java.lang.Long
  (+ten [int] (+ 10 int))

  String
  (+ten [string] (+ 10 (Integer/parseInt string))))

#26

مثال خوبیه، چون کلوژر و الیکسر هر دو لیسپ هستند و متا آبجکت ها (شایدم یکمی اغراق باشه) یه جورایی از لیسپ آمدند، بنظر من در این جور زبان ها بهتر میشه پروتکل ها رو توضیح داد


#27

#28

چقدر در مورد پروتکل بحث شده اینجا، فکر کنم شهریار الیکسرو بد نصب کرده ریست فکتوری شده.

من مثال بالا رو فعلا پاک کردم چون کامل نیست و ممکنه گمراه کننده باشه


#29

من داشتم پست می نوشتم تو لیست سرچم نیومد :tired_face: پست تکراری زدم
من از همه عزیزان معذرت می خوام البته این پست دوباره و پست قبلی باز آموزشی بود برام :smiley:
من آخر پروژمم هست دارم دارم می برم روی سرور فکر کنم

فکر کنم ریست فکتوری شدم :smile_cat:


#30

“Due to its inner workings, a protocol dispatch may in some cases be significantly slower than a direct function call. The reason is the runtime discovery of the implementation that needs to be invoked. Elixir provides a way of speeding things up in form of a protocol consolidation. A consolidation essentially analyzes your project and compiles the dispatch map, thus optimizing lookup operations. We’ll demonstrate this later, in chapter 13, when you build a release of a system.

Excerpt From: Saša Jurić. “Elixir in Action”. Apple Books.


#31

متوجه نمیشم این چه چیزی رو ثابت میکنه؟ اصلا اینجا بحث پرفرمنس مطرح نیست.
اگر قرار بود اینطور فکر کنیم خب کلا همه برنامه رو در یک پروسیژور بزرگ‌مینویسیم و خودمونو از ماژل و پروتکل خلاص میکنیم.
موضوع پلیمورفیزم، مدیریت کد و منطق بود. قطعا هرچی Function Dispatch در مسیر عمیقتری اتفاق بیوفته روی سرعت تاثیر داره، اما در بیشتر زبان های بخصوص کمپایل شده این موضوع تا حد زیادی برطرف شده(نه کاملا) و این فقط در مورد پروتوکل ها نیست.
من پیشنهاد میکنم بیشتر روی قابل نگهداری و خوانا بودن و عملکرد درست کد تکیه بشه حتی اگر گاهی باعث میشه یکمی روی کاغذ پرفرمنس بیاد پایین.


#32

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

مطمئنن ساخت یک بحث از نساختش بهتره حتی اشتباه باشه بازم به عنوان شاگرد ازش یاد می گیرم.


#33

بله اما این نمیتونه دلیل مناسبی باشه برای استفاده کردن یا نکردن از پروتکل، در الیکسر هم روشی برای بهبود این مساله وجود داره.
شما در جایی پرسیدی که چه مشکلی ممکنه بوجود بیاد، منظور من از ثابت کردن اینه که اون متن از کتاب پاسخ سوال شما نمیتونه باشه و اگر هم تا حدی به پرفرمنس اشاره کرده در قسمتی هم به dispatch map اشاره شده.
بازم بر میگردیم به همون موضوع که سرعت اینجا مشکل ساز نیست واقعا


#34

باید کتاب خوبی باشه، من فقط مقدمشو خوندم، یکمی هم قدیمی شده دیگه


#35

نسخه جدیدش اومده

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


#36

نه اتفاقا جالب بود چون من اون پست قدیمی رو اصلا ندیده بودم