読者です 読者をやめる 読者になる 読者になる

牌語備忘録 -pygo

あくまでもメモです。なるべくオフィシャルの情報を参照してください。

牌語備忘録 -pygo

すごE本を読んでみたメモ -- 第4章

書籍『すごいErlangゆかいに学ぼう!/Learn You Some Erlang for great good! 』まとめ

第4章 型(あるいはそれを欠いています)

4.1 動的で強い型付け

  • Erlang は強い型付き言語

4.2 型変換

1> erlang:list_to_integer("54").
54
2> erlang:integer_to_list(54).
"54"
3> erlang:list_to_integer("54.32").
** exception error: bad argument
in function list_to_integer/1 called as list_to_integer("54.32") 4> erlang:list_to_float("54.32").
54.32
5> erlang:atom_to_list(true).
"true"
6> erlang:list_to_binary("hi there").
<<"hi there">>
7> erlang:binary_to_list(<<"hi there">>).
"hi there"

変換用関数一覧

  • atom_to_binary/2
  • atom_to_list/1
  • binary_to_atom/2
  • binary_to_existing_atom/2
  • binary_to_list/1
  • binary_to_term/1
  • binary_to_term/2
  • bitstring_to_list/1
  • float_to_list/1
  • fun_to_list/1
  • integer_to_list/1
  • integer_to_list/2
  • iolist_to_atom/1
  • iolist_to_binary/1
  • list_to_atom/1
  • list_to_binary/1
  • list_to_bitstring/1
  • list_to_existing_atom/1
  • list_to_float/1
  • list_to_integer/2
  • list_to_pid/1
  • list_to_tuple/1
  • pid_to_list/1
  • port_to_list/1
  • ref_to_list/1
  • term_to_binary/1
  • term_to_binary/2
  • tuple_to_list/1

4.3 データ型を守るために

型テスト BIF

  • is_atom/1
  • is_binary/1
  • is_bitstring/1
  • is_boolean/1
  • is_builtin/3
  • is_float/1
  • is_function/1
  • is_function/2
  • is_integer/1
  • is_list/1
  • is_number/1
  • is_pid/1
  • is_port/1
  • is_record/2
  • is_record/3
  • is_reference/1
  • is_tuple/1

以下2つのコードは同じだが Erlang では後者が好まれる。

my_function(Exp) ->
    case type_of(Exp) of
        binary -> Expression1;
        list -> Expression2
    end.
my_function(Exp) when is_binary(Exp) -> Expression1;
my_function(Exp) when is_list(Exp) -> Expression2.

4.4 型ジャンキーのために

第 30 章では簡単に Erlang で 静的型解析を行うツールである Dialyzer を紹介し、独 自の型を定義してより安全にコードを書く方法を紹介 します。