کاربرد atomها در الکسیر


#1

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

می دونم که مقدارش همون اسمشه و با : شروع میشه. ولی کاربردش کجاهاست؟

من فکر می کنم یه چیزی مثل enumerationها در جاوا و سی شارپ هست. یا چیزی مثل ثوابت در جاوا. مثلاً:

final int SUCCESS = 1;
final int FAILURE = 0;

if operation == SUCCESS
    do_something

پرانتزها رو گوشیم کار نمی کنن بخاطر همین بالا نگذاشتم


#2

اتم ها در الیکسیر همیشه منحصر به فرد unique
هستند و همیشه اتم یک داده مثلا :a همیشه یک عدد در حافظه داره و هیچ وقت تغییر نمیکنه به همین دلیل کار با آنها از string در مواردی مثل keyword list وmap
کارامد تره شما میتونید مثل enum به اتم ها نگاه کنید


#3

ممنون :slightly_smiling_face:


#4

سلام و با اجازه از دوستان.

سوال رو در غالب ۳ نکته و یک نتیجه گیری جواب میدم :

نکته ۱ :
درمورد اینکه اصلا atom یعنی چه؟

  • در elixir مفهوم atom یعنی یک named constant و اول اسمش یه ( : ) داره، مثل: atom:
    این به این معنی هستش که خود اون چیزی که مینویسی هم یعنی name و هم یعنی value.
    –> پس اون مثال جاوا درست نیست، چون value با name فرق داره. (value میشه عدد های سمت راست و name میشه success و failure).
  • در اسم یه atom میشه از کاراکتر هایی مثل space و غیره استفاده کرد که در این صورت باید بعد از علامت : همه چیز رو داخل " " قرار بدیم.
    مثال :
    "has error in":

  • بقیه توضیحات به نظرم ساده باشه و نیازی نباشه من بگم، ولی بازم اگه سوال داشتی بپرس.

نکته ۲ :
در نامگذاری اتم ها یه سری چیز ها میشه استفاده کرد که برای expressive بودن کد خیلی به درد میخوره.

  • مثلا در elixir شما اجازه داری در آخر اسم یه atom علامت های ! و ؟ قرار بدی که به expressive بودن code کمک میکنه.
    مثال : ?kidding یا !ohNo

  • یا اینکه میشه از علامت @ استفاده کرد که مثلا موقع کار با node ها در function هایی مثل Node.spawn_link/2 به expressive بودن کمک میکنه.
    مثال :
    iex> Node.spawn_link :something@computername, fn -> Module.function end

نکته ۳ :‌
جواب سوالت، درمورد اینکه atom ها در چه جاهایی استفاده میشن؟

در elixir در خیلی جا ها atom ها استفاده میشن که ساده هستش و نیازی به توضیح نداره.
ولی علاوه بر اون موارد من ۲ مورد به ذهنم میرسه که شاید اول کار زیاد واضح نباشن :

  • یه مورد استفاده atom ها همون true یا false یا nil هستن :
    مثال :‌
    iex> true == :true
    true
    iex> false == :false
    true
    iex> nil == :nil
    true

  • یه مورد استفاده دیگه atom ها میشه وقتی که شما یه اسمی رو با حرف اول capital شروع میکنی و value بهش نمیدی :
    در واقع در elixir هرچیزی که با حرف capital شروع بشه بهش میگن یه alias.
    درسته که حرف اول یک alias اگه capital باشه یعنی که اسم یه Module هستش، ولی همه ماجرا این نیست!
    نکته اینجاست که اگه ما به اون alias مورد نظر value ندیم، اون اسم بصورت پیش فرض میشه معادل یه atom که اولش عبارت .Elixir (الیکسیر و نقطه) باشه!!
    یکم پیچیده شد، یه مثال :
    "iex> MyAlias == :"Elixir.MyAlias
    true
    پس همونطور که میبینیم وقتی این مقایسه رو انجام دادیم به ما true برگرداند، که اینجا MyAlias دیگه اسم Module نیست و یه atom هستش.

در elixir کلا خیلی جا ها atom ها رو میبینی که امیدوارم این ۲ مورد هم کمک کننده بوده باشه.