変数
変数は基本イミュータブル
型
一般的な型名 | Gleamでの型名 | Gleamでの表現 | ライブラリ |
---|---|---|---|
整数 | Int | 1234 | gleam/int |
文字列 | String | ”Gleam” | gleam/string |
リスト | List | [] | gleam/list |
タプル | Tuple | #(“Langage”, “Gleam”) | gleam/map |
浮動小数点型 | float | -12.5 | gleam/float |
真偽値 | Bool | true | gleam/bool |
動的型 | Dynamic | ———————— | gleam/dynamic |
型変換(キャスト)
Int → String
ファイルIO
gleam_erlang
をインストール
gleam add gleam_erlang
ファイル書き込み
read
pub fn read(from path: String) -> Result(String, Reason)
ファイル読み込み
write
pub fn write(contents contents: String, to path: String) -> Result( Nil, Reason, )
デバッグ出力
stdlib
をimportすると使える
pub fn debug(term: a) -> Nil
Result型から値を取得したい
GleamにはRustのようなResult型がある。
以下のようにすればResult型から値を取得出来る。
例えばこんな感じ(gleam_stdlib
とgleam_erlang
パッケージをインストールする必要がある。)
しかし、この方法だとError()
が返された場合に例外が発生する。これを避けるにはresult.unwrap
を使う。
gleam/result
を使う
Gleamには、Result型
を扱う際に便利なメソッドが用意されている。
これらを使うことでよりシンプルにResult型
を操作することができる。
ドキュメントはここから見ることができる。
このライブラリに含まれている、result.unwrap()
を使うことでResult()
から簡単に値を取り出すことが出来る。
unwrap()
には2つの引数を指定する必要があり、それぞれ
Result型
の値Error()
だった場合の値 を指定する。Rustのunwrap()
と動作が違うので注意。(どちらかというとunwrap_or_default()
に近い挙動をする。)
Elixirと連携したい
ここではElixirのIO.puts()
をGleamから呼び出してみる。
externalというキーワードで、バックエンドの関数を呼び出すことができる。IO.puts
はElixirのIOモジュールで宣言されているため、
- まず1つめの引数で
Elixir.IO
と指定する。 - その次にputsという関数を呼び出すため、2つめの引数で
puts
を指定する。
この最初の引数のElixir
の部分を指定せず関数のみを指定すると、Erlangの関数を呼び出すことができる。(GleamはErlangにコンパイルされるため、デフォルトでErlangの関数を呼び出す仕様にしたと考えられる)
ちなみにGleamはJavaScriptにもコンパイル出来る。その場合は以下のように、
Elixirでモジュールを指定したようにJavaScriptのファイル名を指定する。その次の関数名の指定は同じ。
他のBEAM言語との連携
2024/01/22追記
Gleamで他のBEAM言語の関数を呼び出す方法が変更されている。
Pythonのデコレータのように、関数の上に@external
キーワードを書いて宣言する。
他のBEAM系言語(Ex. Erlang/Elixir)の関数を呼び出すには、external
キーワードを使って関数を宣言する。
Erlangの場合
Elixirの場合
JavaScriptの場合
関数を定義する際には以下のように引数に型を付けることも出来る。これを行うことでより堅牢なプログラムを書くことができる。ただしGleamはこの型付けを完全に信用する。 もし型付けが間違っている場合は実行時エラーが発生するので気をつける。
GleamとElixirの相互運用についてはこのサンプルプロジェクトが参考になる。
Elixirのライブラリを使いたい
こちらで新しい方法について解説しています。
https://zenn.dev/comamoca/articles/interop-of-gleam-and-elixir
ElixirのライブラリをGleamから使うには、
gleam add パッケージ名
でパッケージを追加external
で関数を宣言 この順番で行う。 GleamはHexに対応しているのでgleam add
でGleamパッケージと同じようにパッケージをインストールすることができる。 また、Gleamには配下のElixirプログラムを自動でコンパイルするというとても便利な機能があるので、プロジェクトの一部をElixirで書きそれをGleamから利用する事も可能。Elixirライブラリのグルーコードを書く場面で便利だと感じた。
パッケージをインストールした後はexternalで宣言することで呼び出す事ができる。
この際、iex -S mix
などでパッケージの関数を呼び出したりして調べながら書いていくと分かりやすい。
以下はElixirのPandexパッケージのgfm_to_html
関数を呼び出す例。
Javascriptターゲット
GleamはJavascriptをターゲットにコンパイルすることが出来る。 GleamをJavascriptにコンパイルするのは以下の2通りの方法で行うことが出来る。
ビルドオプションにJavascriptを指定
gleam run