Searching...
فارسی
EnglishEnglish
EspañolSpanish
简体中文Chinese
FrançaisFrench
DeutschGerman
日本語Japanese
PortuguêsPortuguese
ItalianoItalian
한국어Korean
РусскийRussian
NederlandsDutch
العربيةArabic
PolskiPolish
हिन्दीHindi
Tiếng ViệtVietnamese
SvenskaSwedish
ΕλληνικάGreek
TürkçeTurkish
ไทยThai
ČeštinaCzech
RomânăRomanian
MagyarHungarian
УкраїнськаUkrainian
Bahasa IndonesiaIndonesian
DanskDanish
SuomiFinnish
БългарскиBulgarian
עבריתHebrew
NorskNorwegian
HrvatskiCroatian
CatalàCatalan
SlovenčinaSlovak
LietuviųLithuanian
SlovenščinaSlovenian
СрпскиSerbian
EestiEstonian
LatviešuLatvian
فارسیPersian
മലയാളംMalayalam
தமிழ்Tamil
اردوUrdu
Programming Elixir

Programming Elixir

Functional |> Concurrent |> Pragmatic |> Fun
توسط Dave Thomas 2013 287 صفحات
4.28
500+ امتیازها
گوش دادن
Try Full Access for 7 Days
Unlock listening & more!
Continue

نکات کلیدی

1. الکسیر: برنامه‌نویسی تابعی با تغییرناپذیری و هم‌زمانی

برنامه‌نویسی درباره‌ی تبدیل داده‌هاست و عملگر |> این تبدیل را به‌وضوح نشان می‌دهد.

پارادایم تابعی. الکسیر یک زبان برنامه‌نویسی تابعی است که بر تغییرناپذیری و هم‌زمانی تأکید دارد. این زبان بر روی ماشین مجازی ارلنگ اجرا می‌شود و مدل هم‌زمانی قوی و قابلیت‌های تحمل خطای آن را به ارث می‌برد. کد الکسیر به فرآیندهای کوچک و مستقل سازمان‌دهی می‌شود که می‌توانند به‌طور هم‌زمان اجرا شوند و از طریق ارسال پیام با یکدیگر ارتباط برقرار کنند.

تغییرناپذیری و تبدیل. در الکسیر، داده‌ها تغییرناپذیر هستند، به این معنا که پس از ایجاد، نمی‌توان آن‌ها را تغییر داد. به‌جای تغییر داده‌های موجود، توابع در الکسیر داده‌ها را تبدیل کرده و مقادیر جدیدی تولید می‌کنند. این رویکرد به کدی منجر می‌شود که پیش‌بینی‌پذیرتر و آسان‌تر برای درک است، به‌ویژه در محیط‌های هم‌زمان.

عملگر لوله. عملگر |> (لوله) یکی از ویژگی‌های کلیدی در الکسیر است که به توسعه‌دهندگان اجازه می‌دهد تا فراخوانی‌های تابع را به‌صورت خوانا و از چپ به راست زنجیره کنند. این عملگر نتیجه‌ی عبارت سمت چپ را به‌عنوان اولین آرگومان به تابع سمت راست منتقل می‌کند و تبدیل داده‌ها را به‌وضوح و آسان برای دنبال کردن می‌سازد.

2. تطبیق الگو: پایه‌ی ظرافت الکسیر

در الکسیر، علامت = یک تخصیص نیست. بلکه مانند یک ادعاست.

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

تجزیه. تطبیق الگو به توسعه‌دهندگان اجازه می‌دهد تا به‌راحتی مقادیر را از ساختارهای داده‌ی پیچیده استخراج کنند:

  • لیست‌ها: [head | tail] = [1, 2, 3] سر را به 1 و دنباله را به [2, 3] متصل می‌کند
  • تاپل‌ها: {a, b, c} = {1, 2, 3} a را به 1، b را به 2 و c را به 3 متصل می‌کند
  • نقشه‌ها: %{key: value} = %{key: "example"} مقدار را به "example" متصل می‌کند

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

3. لیست‌ها و بازگشت: بلوک‌های سازنده‌ی برنامه‌های الکسیر

تکرار انسانی است، بازگشت الهی.

ساختار لیست. لیست‌ها در الکسیر به‌صورت ساختارهای پیوندی پیاده‌سازی می‌شوند که شامل یک سر (اولین عنصر) و یک دنباله (باقی‌مانده‌ی لیست) هستند. این ساختار به‌طور طبیعی به پردازش بازگشتی منجر می‌شود.

پردازش بازگشتی. الکسیر رویکرد بازگشتی به پردازش لیست را تشویق می‌کند که اغلب به راه‌حل‌های زیبا و کارآمدتری نسبت به حلقه‌های دستوری منجر می‌شود. عملیات رایج لیست:

  • طول: شمارش بازگشتی عناصر
  • نقشه: اعمال یک تابع به هر عنصر
  • کاهش: جمع‌آوری نتیجه‌ای در سراسر همه‌ی عناصر
  • فیلتر: انتخاب عناصری که شرایطی را برآورده می‌کنند

بهینه‌سازی فراخوانی دنباله. الکسیر بهینه‌سازی فراخوانی دنباله را پیاده‌سازی می‌کند که اجازه می‌دهد بازگشت کارآمد بدون نگرانی از سرریز پشته انجام شود. این بهینه‌سازی زمانی اعمال می‌شود که فراخوانی بازگشتی آخرین عملیات در یک تابع باشد و به‌طور مؤثر بازگشت را به یک حلقه تبدیل کند.

4. ماژول‌ها و توابع نام‌گذاری‌شده: سازمان‌دهی کد الکسیر

ماژول‌ها فضاهای نامی برای چیزهایی که تعریف می‌کنید فراهم می‌کنند.

سازمان‌دهی کد. ماژول‌ها در الکسیر به‌عنوان محفظه‌هایی برای توابع مرتبط عمل می‌کنند و راهی برای فضاهای نامی و سازمان‌دهی کد فراهم می‌کنند. آن‌ها با استفاده از ماکروی defmodule تعریف می‌شوند و می‌توانند شامل تعریف توابع، ماکروها و سایر ویژگی‌های ماژول باشند.

تعریف توابع. توابع نام‌گذاری‌شده درون ماژول‌ها با استفاده از ماکروی def تعریف می‌شوند. جملات متعدد یک تابع می‌توانند تعریف شوند، هرکدام با تطبیق الگوی خاص خود بر روی آرگومان‌ها. توابع خصوصی (فقط قابل فراخوانی درون ماژول) با استفاده از defp تعریف می‌شوند.

ویژگی‌های کلیدی ماژول‌های الکسیر:

  • مستندسازی: ویژگی‌های @moduledoc و @doc برای مستندسازی درون‌خطی
  • ویژگی‌ها: ویژگی‌های ماژول با @ برای پیکربندی و متاداده تعریف می‌شوند
  • واردات و مستعارها: آوردن توابع از ماژول‌های دیگر به حوزه
  • رفتارها: تعریف رابط‌هایی که ماژول‌ها می‌توانند پیاده‌سازی کنند

5. مدل هم‌زمانی: فرآیندهای سبک‌وزن و ارسال پیام

توسعه‌دهندگان الکسیر آن‌قدر راحت فرآیندهای جدید ایجاد می‌کنند که اغلب در مواقعی که شما در زبانی مانند جاوا یک شیء ایجاد می‌کردید، این کار را انجام می‌دهند.

مدل بازیگر. الکسیر مدل بازیگر هم‌زمانی را اتخاذ می‌کند، جایی که هر بازیگر (فرآیند) یک موجودیت مستقل است که می‌تواند پیام‌ها را ارسال و دریافت کند. این فرآیندها بسیار سبک‌وزن هستند و اجازه می‌دهند هزاران یا حتی میلیون‌ها فرآیند به‌طور هم‌زمان بر روی یک ماشین اجرا شوند.

ایجاد و ارتباط فرآیند:

  • spawn: ایجاد یک فرآیند جدید
  • send: ارسال یک پیام به یک فرآیند
  • receive: دریافت و تطبیق الگو بر روی پیام‌های ورودی

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

  • link: اتصال دوطرفه؛ اگر یک فرآیند خراب شود، فرآیند پیوندی نیز خراب می‌شود
  • monitor: یک‌طرفه؛ فرآیند نظارت‌کننده در صورت خرابی فرآیند نظارت‌شده مطلع می‌شود

6. OTP: چارچوبی برای ساخت برنامه‌های مقیاس‌پذیر و تحمل‌پذیر در برابر خطا

ناظران قلب قابلیت اطمینان هستند.

رفتارهای OTP. OTP (پلتفرم باز مخابراتی) مجموعه‌ای از رفتارها را برای ساخت برنامه‌های مقیاس‌پذیر و تحمل‌پذیر در برابر خطا فراهم می‌کند:

  • GenServer: برای پیاده‌سازی روابط مشتری-سرور
  • Supervisor: برای مدیریت و راه‌اندازی مجدد فرآیندهای فرزند
  • Application: برای بسته‌بندی و مدیریت برنامه‌های OTP

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

تعویض کد داغ. OTP از تعویض کد داغ پشتیبانی می‌کند، که اجازه می‌دهد برنامه‌های در حال اجرا بدون توقف به‌روزرسانی شوند. این ویژگی، همراه با ساختار درخت نظارت، امکان ایجاد سیستم‌های بسیار در دسترس را فراهم می‌کند.

7. برنامه‌نویسی متا: گسترش الکسیر با ماکروها و پروتکل‌ها

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

ماکروها. سیستم ماکروی الکسیر امکان قابلیت‌های برنامه‌نویسی متا قدرتمند را فراهم می‌کند. ماکروها بر روی درخت نحو انتزاعی (AST) کد عمل می‌کنند و امکان تولید و تبدیل کد در زمان کامپایل را فراهم می‌کنند.

مفاهیم کلیدی در برنامه‌نویسی متای الکسیر:

  • quote: ضبط AST یک بلوک کد
  • unquote: تزریق مقادیر به عبارات نقل‌شده
  • using: تعریف رفتار زمانی که یک ماژول "استفاده" می‌شود

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

ویژگی‌های پروتکل:

  • defprotocol: تعریف یک پروتکل با امضای توابع
  • defimpl: پیاده‌سازی یک پروتکل برای انواع داده‌های خاص
  • پیاده‌سازی‌های پشتیبان: مدیریت انواعی که به‌طور صریح پیاده‌سازی نشده‌اند

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

آخرین به‌روزرسانی::

FAQ

What's Programming Elixir about?

  • Functional Programming Focus: Programming Elixir introduces readers to functional programming using the Elixir language, emphasizing immutability and data transformation.
  • Concurrency and Scalability: It highlights Elixir's strengths in building concurrent and distributed applications, leveraging the Erlang VM for fault tolerance and scalability.
  • Practical Learning Approach: The author, Dave Thomas, uses a hands-on approach with code examples and exercises to solidify understanding and application of concepts.

Why should I read Programming Elixir?

  • Comprehensive Coverage: The book provides a thorough exploration of Elixir, suitable for both beginners and experienced programmers, covering fundamental and advanced topics.
  • Focus on Concurrency: It delves into Elixir's ability to handle concurrent programming effortlessly, invaluable for developers working on scalable applications.
  • Expert Guidance: Written by a respected figure in the programming community, it offers insights and best practices to help readers avoid common pitfalls.

What are the key takeaways of Programming Elixir?

  • Functional Programming Principles: Readers learn about immutability, first-class functions, and higher-order functions, foundational for effective Elixir code.
  • Concurrency and Fault Tolerance: The book emphasizes Elixir's concurrency model and building fault-tolerant applications using OTP.
  • Real-World Examples: Numerous examples and exercises illustrate how to apply Elixir concepts in real-world scenarios, reinforcing learning.

What are the best quotes from Programming Elixir and what do they mean?

  • "Programming Should Be About Transforming Data": This quote encapsulates the philosophy that programming is more about data manipulation than state management.
  • "Let the process crash.": Reflects the philosophy of fault tolerance, encouraging systems that recover from failures rather than preventing them.
  • "Elixir is here to free you from antiquated concurrency mechanisms": Emphasizes Elixir's modern approach to concurrency, simplifying scalable application development.

How does Programming Elixir approach teaching functional programming?

  • Hands-On Examples: Uses practical examples and exercises to teach functional programming concepts, promoting active engagement.
  • Incremental Learning: Concepts are introduced incrementally, building on previous knowledge for a comprehensive understanding.
  • Emphasis on Immutability: Highlights the importance of immutability, explaining how it leads to safer and more predictable code.

What is the significance of pattern matching in Elixir?

  • Core Concept: Pattern matching is fundamental in Elixir, allowing developers to destructure data easily and bind variables concisely.
  • Control Flow Simplification: It simplifies control flow by enabling functions to have multiple clauses matching different patterns.
  • Versatile Tool: Used extensively in function definitions, case statements, and variable assignments, making it a versatile tool in Elixir programming.

How does immutability affect programming in Elixir?

  • No Side Effects: Immutability ensures data cannot be changed after creation, eliminating side effects and simplifying code reasoning.
  • Concurrency Benefits: Simplifies concurrent programming by removing the need to manage shared state, reducing synchronization complexity.
  • Data Transformation Focus: Encourages thinking in terms of data transformations, leading to cleaner and more functional code.

How does Programming Elixir address concurrency in Elixir?

  • Actor Model Introduction: Introduces the actor model of concurrency, where processes communicate through message passing.
  • Lightweight Processes: Elixir allows the creation of lightweight processes, enabling many tasks to run simultaneously without threading issues.
  • Fault Tolerance Emphasis: Leverages the Erlang VM's capabilities to create resilient applications, emphasizing fault tolerance in concurrent systems.

What is the role of the Enum and Stream modules in Elixir?

  • Collection Processing: The Enum module provides functions for processing collections, allowing iteration, filtering, and data transformation.
  • Lazy Evaluation: The Stream module enables lazy evaluation, computing values only when needed, improving performance and reducing memory usage.
  • Composability: Both modules support composable operations, allowing developers to build complex data processing pipelines clearly and concisely.

What is the significance of OTP in Programming Elixir?

  • Framework for Applications: OTP is a set of libraries and design principles for building robust applications in Elixir.
  • Supervision Trees: Explains creating supervision trees for monitoring and restarting processes, crucial for application reliability.
  • Concurrency Model: OTP's concurrency model allows scalable applications handling many processes simultaneously, vital for leveraging Elixir's strengths.

How does Programming Elixir explain the concept of processes?

  • Lightweight Processes: Elixir processes are lightweight and managed by the Erlang VM, allowing thousands of concurrent processes.
  • Message Passing: Emphasizes the message-passing model for process communication, promoting decoupling and fault tolerance.
  • Supervision and Fault Tolerance: Details using supervisors to monitor processes and handle failures gracefully, essential for resilient applications.

What advanced topics are covered in Programming Elixir?

  • Macros and Metaprogramming: Explains macros for extending the language and creating domain-specific constructs.
  • Protocols for Polymorphism: Introduces protocols for achieving polymorphism, promoting code reuse and flexibility.
  • Umbrella Projects: Discusses managing multiple related applications within a single project structure, useful for large codebases.

نقد و بررسی

4.28 از 5
میانگین از 500+ امتیازات از Goodreads و Amazon.

کتاب برنامه‌نویسی الیکسیر به دلیل توضیحات شفاف و آموزش مؤثر مفاهیم الیکسیر بسیار مورد تحسین قرار گرفته است. خوانندگان از پوشش برنامه‌نویسی تابعی، هم‌زمانی و مبانی OTP در این کتاب قدردانی می‌کنند. این کتاب به عنوان یک مقدمه عالی برای تازه‌واردان به دنیای الیکسیر شناخته می‌شود و دارای محتوای ساختارمند و تمرین‌های مفید است. برخی از خوانندگان بخش‌هایی از کتاب را فاقد عمق کافی، به‌ویژه در موضوعات پیشرفته و OTP، یافتند. سبک نگارش کتاب به طور کلی جذاب است، اگرچه برخی آن را تحقیرآمیز تلقی کردند. به طور کلی، این کتاب برای کسانی که به یادگیری الیکسیر علاقه‌مندند، به‌ویژه زمانی که با منابع اضافی تکمیل شود، توصیه می‌شود.

Your rating:
4.63
24 امتیازها

درباره نویسنده

دیو توماس نویسنده‌ای محترم در جامعه برنامه‌نویسی است که به خاطر مشارکت‌هایش در ادبیات روبی و الیکسیر شناخته می‌شود. او هم‌نویسنده‌ی کتاب «برنامه‌نویس عمل‌گرا» و نویسنده‌ی کتاب تأثیرگذار «برنامه‌نویسی روبی» (کتاب «تبر») است. توماس به خاطر نوشتاری شفاف و جذاب که به‌طور مؤثر مفاهیم پیچیده را به خوانندگان منتقل می‌کند، شهرت دارد. کار او در «برنامه‌نویسی الیکسیر» توانایی‌اش در معرفی زبان‌ها و پارادایم‌های جدید به توسعه‌دهندگان با تجربه را نشان می‌دهد. کتاب‌های توماس اغلب شامل مثال‌ها و تمرین‌های عملی هستند که رویکرد عمل‌گرایانه‌اش به آموزش برنامه‌نویسی را منعکس می‌کنند. تخصص او در زبان‌ها و پارادایم‌های متعدد گسترده است و او را به منبعی ارزشمند برای توسعه‌دهندگانی که به دنبال گسترش مهارت‌های خود هستند، تبدیل می‌کند.

Listen
0:00
-0:00
1x
Dan
Andrew
Michelle
Lauren
Select Speed
1.0×
+
200 words per minute
Home
Library
Get App
Create a free account to unlock:
Requests: Request new book summaries
Bookmarks: Save your favorite books
History: Revisit books later
Recommendations: Personalized for you
Ratings: Rate books & see your ratings
100,000+ readers
Try Full Access for 7 Days
Listen, bookmark, and more
Compare Features Free Pro
📖 Read Summaries
All summaries are free to read in 40 languages
🎧 Listen to Summaries
Listen to unlimited summaries in 40 languages
❤️ Unlimited Bookmarks
Free users are limited to 4
📜 Unlimited History
Free users are limited to 4
📥 Unlimited Downloads
Free users are limited to 1
Risk-Free Timeline
Today: Get Instant Access
Listen to full summaries of 73,530 books. That's 12,000+ hours of audio!
Day 4: Trial Reminder
We'll send you a notification that your trial is ending soon.
Day 7: Your subscription begins
You'll be charged on Jun 7,
cancel anytime before.
Consume 2.8x More Books
2.8x more books Listening Reading
Our users love us
100,000+ readers
"...I can 10x the number of books I can read..."
"...exceptionally accurate, engaging, and beautifully presented..."
"...better than any amazon review when I'm making a book-buying decision..."
Save 62%
Yearly
$119.88 $44.99/year
$3.75/mo
Monthly
$9.99/mo
Try Free & Unlock
7 days free, then $44.99/year. Cancel anytime.
Scanner
Find a barcode to scan

Settings
General
Widget
Loading...