2021-05-15に投稿

Elixir学習日記3: Elixir、最初の一歩

背景

Elixirの入門書を読んでいる。

学んだこと

  • iexでElixirのREPL(Read-Eval Print Loop)に入れる。

image.png

  • Elixirにおいて変数に代入するというのは、名前に一時的に値を縛りつけること。(Binding)
  • Cのような手続き型の言語においては、変数に実体的な値が代入されている。これを破壊的代入という。
  • Elixirにおいてはそのような形ではなく、名前に値を参照させている。上の例では、n1を参照させている。のであって、この場合、n1が入っているという箱のイメージは実態とずれていることになるのかな?

  • 「Elixirでは値はイミュータブル」という宣言があったけれど(書籍中)、これは値の再代入が不可能であるという意味ではないようす。上の例(画像)ではn1を代入したあと2を代入してもエラーになっていない。

  • これこそは、上の、「変数に実質的な値を代入しているのではなく、参照先を指定しているだけ」ということの現れではないかな。と思った。
  • しかしその場合、データの2はどこに存在し続けているのだろう???????
  • 2が空中にぽっかり浮いていて、その2を名前が随時参照する...ということかしら????? それはおかしい...気がする。....

関数、モジュール

  • 引用。

コンピュータプログラミングにおいて、プログラムの断片をひとつのまとまりとしてとらえたものを一般に「サブルーチン」と呼びます。このサブルーチンを具体的にどう呼ぶかは言語によって異なります。RubyやJavaのようなオブジェクト指向言語ではメソッド(method)と呼ばれることが多いのですが(例外もあります)、Erlang、Haskell、Elixirのような関数型言語では関数(function)と呼ばれます。PHPのように関数とメソッドを使い分ける言語もあります。また、プロシージャ(procedure)という用語を用いる言語もあります(Pascalなど)。

Tsutomu Kuroda. Elixir/Phoenix Primer Volume 1 Third Edition: The first step (OIAX BOOKS) (Japanese Edition) (Kindle の位置No.723-727). Coregenik. Kindle 版.

気になったこと

  • JavaScriptはどこにはいるの???
  • サブルーチンっていう言葉の意味を初めて知った(ちゃんと見た)気がして嬉しい。
  • Rubyでも、Pythonでも「関数」っていう呼び名はある気がするけど、それは便宜上みたいなこと?
  • 実際にはRubyでは全てがオブジェクトっていうのは見たことあって、それは例えば、 putsをいきなり書いたとしても、
puts('hello!')
  • これは実は何かしらのグローバルオブジェクトにメッセージを送っているという意味になるのだよ、ということをどこかで見た気がする。
  • 実行時にその見えないグローバルオブジェクトに渡されているのだよ、と。
  • これはやっぱり、object orientedな言語においては、何らかのオブジェクトが常にいて、そいつにメッセージを送っているというのに対し、関数型言語ではそうではないということなのかしら。
  • methodという言葉は、「a particular form of procedure for accomplishing or approaching something, especially a systematic or established one」(New Oxford American Dictionary)なので、establised、つまりもともとすでに出来上がっているもの(オブジェクトに対し設定されているもの)という意味が強いと理解している。functionはそれではないので...ということか。
  • A function, or a method? That is the question...な感じ

Elixirのモジュールは名前空間です

引用2。

IOはモジュール(module)の名前です。Elixirのモジュールは関数の入れ物(名前空間)です。

Tsutomu Kuroda. Elixir/Phoenix Primer Volume 1 Third Edition: The first step (OIAX BOOKS) (Japanese Edition) (Kindle の位置No.729-730). Coregenik. Kindle 版.

名前空間ってそういう意味だったのかあ〜〜〜〜〜〜〜〜〜〜。

次のように関数の引数は括弧で囲まなくても構いません。

IO.puts n

しかし、原則として関数の引数は括弧で囲むことが推奨されています。
Tsutomu Kuroda. Elixir/Phoenix Primer Volume 1 Third Edition: The first step (OIAX BOOKS) (Japanese Edition) (Kindle の位置No.732-735). Coregenik. Kindle 版.

  • Rubyライクに括弧を省略していいことになっているけど、マナー的には囲うのが一般的だよ。と。

その他学んだこと

  • コメントは#で。(octothorpe, またのなを pound, hash, mesh, とも。)
  • 行全体をコメントに。後ろにつければ行末のコメントはできるけど、複数行に跨がるコメントのシステムはElixirには存在しないとのこと。これも驚いた。
  • 文末のセミコロンはつけてもいいけど、普通は付けずに1行1センテンスで書くよ、とのこと。

次回は4章、基本データ型。

だんだんプログラミングっぽくなってきて嬉しいじゃないの。

使っている本:Elixir/Phoenix 初級① 第3版: はじめの一歩 (OIAX BOOKS) 黒田 努

ツイッターでシェア
みんなに共有、忘れないようにメモ

mkataoka73

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント