BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース 新たな言語機能とAPを加え,ツーリングを改良したElixir 1.3がリリース

新たな言語機能とAPを加え,ツーリングを改良したElixir 1.3がリリース

原文(投稿日:2016/06/27)へのリンク

José Valim氏が先日発表したElixir 1.3では,命令型の代入が廃止され,新たな型とアクセサが追加された。ビルドツールのMixと,ユニットテストフレームワークのExUnitにも改良が加えられている。

Elixir 1.3では,外部スコープからアクセスされる変数に対する命令型の代入が非推奨機能となった。このような記述が検出されると,毎回,警告が出力される。その背景には,外部スコープで使用される変数への代入は内部スコープに暗黙の戻り値を追加するのに等しい,という論理的な根拠がある。次にあげた関数定義はその一例だ。

def format(message, opts) do
  path =
    if (file = opts[:file]) && (line = opts[:line]) do
      relative = Path.relative_to_cwd(file)
      message  = Exception.format_file_line(relative, line) <> " " <> message
      relative
    end

  {path, message}
end

このifブロックはpathに値を返すと同時にmessageの値も更新して,それを囲む関数からpathとともに戻している。Elixir 1.3はこれを悪い使用例と解釈して,ifブロックが明示的に2つの値を返す,次のようなコードへのリファクタリングを要求する。

def format(message, opts) do
  path =
    if (file = opts[:file]) && (line = opts[:line]) do
      relative = Path.relative_to_cwd(file)
      message  = Exception.format_file_line(relative, line) <> " " <> message
      {relative, message}
    end

  {path, message}
end

記述を簡素化するためのもうひとつの言語機能である,新たなアクセスセレクタは,ネストしたデータ構造をトラバースするためのものだ。次のスニペットは,languageキーに関連付けられたmapを埋め込んだmapをトラバースして,nameキーのすべての要素を大文字(upcase)に変換する方法を示している。

iex> update_in myMap, [:languages, Access.all(), :name], &String.upcase/1

ElixirのビルドツールであるMixでは,クロスリファレンスチェックが可能になった。 存在しないモジュールや関数の呼び出しの検出や,特定のモジュールに属する関数に対するすべての呼び出しの検索,依存グラフの作成などに利用することができる。出力される内容も整理され, 警告が見つけやすくなった。さらにElixir 1.3のMixでは依存性追跡についても改良されており,コンパイル時間の短縮となって現れている。

ElixirのユニットテストフレームワークであるExUnitには,Mixのクロスリファレンスチェックを利用する--staleフラグが新たに加えられて,最後の実行時以降に変更されたユニットテストのみを実行することが可能になった。ExUnitには他にも,アサーション出力や名前付きブロックを使用したテストの構造化などが改良されている。

Elixir 1.3の変更点は他にも多数あり,リリースノートにその全内容が記載されている。

 
 

この記事を評価

関連性
スタイル
 
 

この記事に星をつける

おすすめ度
スタイル

BT