BT

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

| 作者: Sergio De Simone フォローする 12 人のフォロワー , 翻訳者 吉田 英人 フォローする 0 人のフォロワー 投稿日 2016年8月16日. 推定読書時間: 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の変更点は他にも多数あり,リリースノートにその全内容が記載されている。

 
 

この記事を評価

関連性
スタイル
 
 

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

あなたの意見をお聞かせください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする
コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

ディスカッション

InfoQにログインし新機能を利用する


パスワードを忘れた方はこちらへ

Follow

お気に入りのトピックや著者をフォローする

業界やサイト内で一番重要な見出しを閲覧する

Like

より多いシグナル、より少ないノイズ

お気に入りのトピックと著者を選択して自分のフィードを作る

Notifications

最新情報をすぐ手に入れるようにしよう

通知設定をして、お気に入りコンテンツを見逃さないようにしよう!

BT