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


#1

پست تکراری هست با لینک زیر ولی هر دو پست خوانده شود اگر شما اطلاعات کمی مثل من نسبت به پروتکول دارید

با درود خدمت شما . بنده هیچ وقت درک کاملی نسبت به protocol در برنامه نویسی نداشتم . همش توضیحاتی که می خونم سخت هست .

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

۱. دقیقا protocol چیست؟
۲. چه زمانی باید از آن استفاده کنیم ؟

بنده لینک های زیر رو هم امروز مطالعه کردم:


https://javabyab.com/26399/protocol-در-زبان-برنامه-نویسی-swift-چیست؟

ولی نمی دونم کجا باید استفاده کنم و چرا؟


#2

خیلی ساده همون interface یا trait هست, اگر هر چیزی یک پروتوکل رو implement/extend/etc (پیاده سازی) کنه باید از data type و فانکشن های اون protocol پیروی کنه protocol compliant.

پروتکل همون معنی قرارداد رو در برنامه نویسی هم داره.


The  `Size`  protocol expects a function called  `size`  that receives one argument (the data structure we want to know the size of) to be implemented.

پروتکل Size انتظار دارد که هر چیزی که از این protocol استفاده کرد یک تابع به نام` size’ که یک ارگومان را دریافت می کند (ساختار داده که می خواهیم اندازه آن را بدانیم) را پیاده سازی کند.

defprotocol Size do
  @doc "Calculates the size (and not the length!) of a data structure"
  def size(data)
end

defimpl Size, for: BitString do
  def size(string), do: byte_size(string)
end

defimpl Size, for: Map do
  def size(map), do: map_size(map)
end

defimpl Size, for: Tuple do
  def size(tuple), do: tuple_size(tuple)
end

کیبرد فارسی ندارم زیاد ادیت شد :smile:


#3

من در مورد Protocol های Elixir چیز زیادی نمی دونم اما فکر می کنم که از Clojure الهام گرفته شده باشن ( البته یه جا همچین چیزی خوندم ) اگر این جوری باشه خیلی پیشنهاد می کنم این پست رو بخونین. توی این پست توضیح داده که چرا protocol ها از interface و اینها برتر هست. و البته این مقاله مربود به کلوژر 1.2 هست.


#4

توماج جان اینجوری که مشخصه اون قسمتی که for داره فقط مواردی هست که خود الکسیر معرفی کرده و نمی شه چیز دیگه ای زد درسته ؟

  • Atom
  • BitString
  • Float
  • Function
  • Integer
  • List
  • Map
  • PID
  • Port
  • Reference
  • Tuple

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

که استراکت هست اگر اول استراکت اسمش بیان بشه می ره توی اون تابعی که می خواد

حالا سوال آخر خدمتتون شما و @lxsameer . من کجا باید احساس کنم نیاز به پروتکل دارم ؟ زمانی که می خوام از یک فانکشن چندین نوع فانکشن با خصوصیات مختلف بسازم ؟ نمی دونم الان کجا باید مصرف کنم ازش . من یک cms نوشتم و احساس نکردم اصلا پروتکل نیاز دارم


#5

زمانی که نیاز به پلیمرفیزم داری نقطه خوبی برای شروع


#6

یعنی چی ؟ :thinking: می شه زیر دوره اول ابتدایی بهم بگید :sweat_smile: من انقدر سوال تو فکرم ایجاد کردم وسط یک طوفانم الان

یعنی نیاز به این دارم از یک چیزی در چند شکل باشه ؟ بهش فکر کنم می گند چند ریختی درسته این صحبتم ؟


#7

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


#8

#9

خوندمش امروز انقدر کلمات بزرگ قلمبه داشت متوجه نشدم آخر چی گفت :expressionless: فارسیشم بدتر از اون :grinning: بیشتر گیج شدم


#10

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


#11

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


#12

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


#13

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


#14

در روبی باید از یک کلاس به عنوان پروتکل استفاده کنی


#15

یه چیزی که protocol داشته باشه دیگه :smile:


#16

برام جالب اومد در الکسیر می شه در فانکشن با Guard این کارو که گفته درست کرد حتی با نسخه جدید که می شه Guard هارو کاستوم کرد
https://hexdocs.pm/elixir/master/guards.html


#17

پروتکل فقط یک ابزار نیست در اصل یک پترن هست که به سادگی در روبی امکان پذیره. بعضی زبان ها به صورت built in و explicit پروتکل و trait دارند اما روبی باید با پترن هایی که میسازیم بوجود بیاد
نظر شما چیه؟


#18

آره . یک مثال برای پسربچه ۵ ساله :smile_cat:


#19

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


#20

از نظر سرعت مشکل ساز هستند یا ناخوانایی کد ؟