IO

IO در Elixir

1 تمرین

درباره‌ی IO

توابعی برای مدیریت ورودی و خروجی توسط ماژول IO ارائه می‌شوند.

  • IO.puts/2 یک رشته را همراه با یک خط جدید در خروجی استاندارد می‌نویسد. مقدار :ok را برمی‌گرداند.
  • IO.write/2 یک رشته را بدون افزودن خط جدید در خروجی استاندارد می‌نویسد. مقدار :ok را برمی‌گرداند.
  • IO.gets/2 یک خط را از ورودی استاندارد می‌خواند.
  • IO.inspect/2 هر داده‌ای را در خروجی استاندارد می‌نویسد و گزینه‌های مفیدی مثل :label را می‌پذیرد. مقداری را که به آن داده شده بدون تغییر برمی‌گرداند. برای Debug مفید است.

پروتکل String.Chars

اگر بخواهید مقداری را به IO.puts/2 بدهید که نتواند آن را چاپ کند، خطای Protocol.UndefinedError را خواهید دید.

IO.puts({:ok, 7})
# ** (Protocol.UndefinedError) protocol String.Chars not implemented for {:ok, 7} of type Tuple

وقتی این اتفاق بیفتد، ممکن است بخواهید به‌جایش از IO.inspect/2 استفاده کنید.

IO.inspect/2 برای Debug

IO.inspect/2 برای Debug عالی است چون آرگومانش را بدون تغییر برمی‌گرداند، می‌تواند هر داده‌ای را چاپ کند و گزینه‌ی :label را ارائه می‌دهد.

"HELLO\n"
|> String.trim()
|> IO.inspect(label: "step 1")
|> String.downcase()
|> IO.inspect(label: "step 2")

# > step 1: "HELLO"
# > step 2: "hello"
# => "hello"

دستگاه‌های IO

اولین آرگومان همه‌ی آن توابع یک دستگاه IO است، با مقدار پیش‌فرض :stdio (ورودی/خروجی استاندارد). برای نوشتن در دستگاه خطای استاندارد، به‌جایش از :stderr استفاده کنید. یک دستگاه IO می‌تواند یک فرایند هم باشد، برای مثال فرایندی که با فراخوانی File.open/2 ایجاد می‌شود، که امکان نوشتن در یک فایل را فراهم می‌کند.

ویرایش از طریق GitHub این پیوند در پنجره یا زبانه‌ی جدیدی باز می‌شود

IO را یاد بگیرید