استفاده از protocol

با درود خدمت دوستان .
به بخش های پایانی از کتاب که آموزش الکسیر هست رسیدم که مبحث protocol مطرح شده . تعریف کتاب و همینطور در کل پروتکول اینه که توسعه می ده امکانات ماژول رو

به صورت مثال اومده :

defprotocol Collection do
  @fallback_to_any true
  def is_collection?(value)
end

defimpl Collection, for: [List, Tuple, BitString, Map] do
  def is_collection?(_), do: true
end

defimpl Collection, for: Any do
  def is_collection?(_), do: false
end

Enum.each [ 1, 1.0, [1,2], {1,2}, %{}, "cat" ], fn value ->
  IO.puts "#{inspect value}:  #{Collection.is_collection?(value)}"
end

آیا نمی شه این چنین چیزی رو در یک ماژول دیگه تعریف کرد و فانکشن نوشت ؟ چرا باید از پروتکول استفاده کنیم؟
در حقیقت شما در کجا های کدتون از پروتکول استفاده می کنید؟

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

protocol ها شبیه interface ها در زبان های دیگه هستند
به مثال https://stackoverflow.com/documentation/elixir/9519/polymorphism-in-elixir#t=201708231349539924172
نگاه کنید در اینجا هم kelvin هم Fahrenheit پروتکل temperature و دارن implement میکنن یعنی باید هردو فانکشن to_celsius و تعریف کنند چون بدنه temperature این و تقاضا میکنه
مدل کردن داده ها با interface ها بسیار قدرتمندهستش و هرجا میتونی ازش بهره بگیر
interface در Go

1 پسندیده

ممنون مهندس جان . ولی می شه بجاش فانکشن زد درسته؟ و ازش استفاده نکرد ؟
فقط برام سواله که ویژگی خاصی داره که ازش استفاده کنیم ؟

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

آخه از یک ماژول هم می شه هرجا استفاده کرد بخاطر همین گفتم . بازم ممنونم

Protocol در زمان compile شدن error میده اگه type که باید اونو implement کنه فانکشن نداشته باشه برای polymorphism هم بهتره

1 پسندیده

این شامل بحث بزرگتری به نام algebraic data types هستش
که اگه خواستی توضیح میدم

1 پسندیده

ممنون از شما اگر زمان دارید و وقتتون گرفته نمی شه در حد یک گرا هم بدید می رم دنبالش برای یادگیری بیشتر
ممنونم:tulip:

باز در مورد Elixir مطمئن نیستم اما اگه یادم یاشه Protocol ها رو از Clojure ایده گرفته ( یادم نیست ) ولی در کل بد نیست این مقاله ها رو بخونی . کمک می کنه هدف پروتکل ها رو درک کنی


http://www.ontoillogical.com/blog/2014/10/18/solving-the-expression-problem-in-clojure/
2 پسندیده

ممنون مهندس . تازه رفتیم تو الکسیر به خودم قول دادم حداقل یک سال روش کار کنم یک پروژه زدم باز نرم زبون جدید یاد نگیرم:joy: هر وقت مطلب شما رو در مرد کلوژور می بینم دوباره وسوسه می شم
یک بار رفتم شروع کنم خیلی سخت بود :sweat_smile:

بعد نمی دونم آیا الکسیر در حال یادگیری هستم کلوژر بدردم می خوره اصلا یاد بگیرم یا نه

1 پسندیده

اول اینکه مهندس خودتی :smile: دوم اینکه هدف از اون مقالات این بود که درک کنی چرا نیاز هستند. منظور این نبود که Elixir رو ول کنی.

1 پسندیده

algebraic data types برای مدل کردن داده ها که همه از یک نوع هستند به کار میره مثلا اگه پیتزا و همبرگر دو تایپ باشند هردو غذا هستند و میتونن کالری داشته باشن حالا اگر ما interface غذا رو تعریف کنیم با کالری و تایپ پیتزا و همبرگر و عضو اون بکنیم باید این تایپ ها فانکشن کالری و تعریف کنن در غیر این صورت کامپایلر خطا میده چون همبرگرو پیتزا زیرمجموعه غذا هستند هرجا غذا رو نیاز داشته باشیم میتونیم همبرگر یا پیتزا رو استفاده کنیم مثال در کد scala قابل درک تره

2 پسندیده

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

1 پسندیده

تشکر بله متوجه شدم . سوال این بود بهش کلوژر در آینده به نظر شما نیازمند می شم . یا خودم تقریبا فکر می کنم هرچی می خوام روی الکسیر هست و نیازمند به زبان جدیدی نمی شم

به نظر من بد نیست چیزای جدید یاد بگیریم کمک می کنه دیدمون بهتر شه. مثلا ٍElixir تو لیست من هست

2 پسندیده

این مشابه protocols در swift نه extensions
extensions در scala
typeclass گفته میشن و بحث جدایی هستند

2 پسندیده

تشکر از شما و ممنون از همیشه پاسخ دادن به سوالات بنده خیلی ممنونم .

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

به عنوان مثال وقتی می خوام بگم یک گوشی که پدرش مثلا فلان کلاس باشه پس باید حتما ویژگی هایی مثل بلوتوث و … داشته باشه وگرنه ارور بده و تقریبا به خود کلاس صفحه ایمپورت می کنم یا کنارش می زارم درست ترش . پس کاراییشون به یک صورت هست اینجوری ذهنم بیشتر باز می شه

البته مثال اول سمت فارنهایت و …رفت یک لحظه ذهنم رفت سر اکستنشنز چون تمام این موارد برای تغییراتش پایین همون کلاس بعد از اتمامش یک اکستنشنز باز می کنیم و این موارد می نویسیمش یا تغییر رنگ به رنگ مورد قبول سو ایفت تغییر مثلا هگزان به سی جی کالر

تشکر از شما بخاطر راهنمایی

به برادرمون حق میدم وسوسه شما در مورد کلوژور منو هم تو بد دردسری انداخته و هر ازگاهی شدیداً وسوسه میشم برم طرفش اما خیلی سخته و نمیشه و هر بار رفتم پشیمون برگشتم .
https://scanlibs.com/quick-clojure/
این کتابم پیدا کردم خوندم یکم چیزی نگرفتم ولی اگر تو الکسیر تونستم به مقامات والای عرفانی برسم و حدودی بفهمم فانکشنال چیه یادگیری کلوژور برام عقده شده و حتماً میرم سراغش هرچند rust هم چون باهاش میشه تو سطح پایین شنا کرد و به درد کارم بیشتر میخوره بهش علاقه مند شدم اما این کلوژور واقعا برام عقده شده و هربارم که پرفورمنسش رو میبینم و تعریف در مورد سینتاکسش بیشتر عقده ای تر میشم بخصوص که محیط غنی جاوا هم قابل دسترسی است داخلش :frowning:
راستی شهریار جان این کتاب برای شروع بد نیست و خیلی جالبه منتها کار عاقلانه ای نیست الان رفت سراغ کلوژور .
الکسیرم خودش خفنه و من کلی عاشق خودش و phoenix شدم.

2 پسندیده

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

2 پسندیده