この記事は、ロシア語を話すエリクサーのコミュニティであるWunsh.ruのコンテストに参加しています。 開業医とただの共感者- 参加してください!
Elixir言語とそのインフラストラクチャを学習する過程で得られた知識を統合するために、私はこの記事を書いています。 この記事が、Elixirアプリケーションを作成することを決定したプログラマーに役立つことを願っています。
エントリー
「Elixirは、スケーラブルでサポートが容易なシステムを作成するために設計された動的で機能的なプログラミング言語です。」 -elixir-lang.org
Elixirを使用してアプリケーションを作成すると、必ずMixに出会えます。 アプリケーションの作成、アセンブル、テスト、公開、依存関係管理などのコマンドを実行できるため、不可欠なアシスタントになります。 Rubyに精通している場合、このツールはBundler、RubyGems、およびRakeを組み合わせたものに非常に似ています。 一言で言えば、MixはElixirに付属している便利なツールであり、スイス製ナイフに劣らないタスクを実行します。
新しいアプリケーションの初期化
将来のミックスアプリケーション用のテンプレートを作成する最も簡単な方法は、「mix new app_name」コマンドを使用することです。
$ mix new quadratic_equation
このコマンドは、アプリケーションの一種のスケルトンを作成します。 つまり、quadratic_equationという名前のフォルダーと、次のファイルおよびフォルダー構造:
.gitignore # README.md # markdown config/ config.exs # lib/ quadratic_equation.ex # mix.exs # mix- c test/ quadratic_equation_test.exs # test_helper.exs #
ファイルの名前と内容にはいくつかの規則がありますが、その知識は役に立つでしょう:
- サブモジュール名にメインアプリケーションモジュールの名前を使用して、名前の衝突の可能性を減らします。
- 各モジュールは個別のファイルに配置する必要があり、逆も同様です。各ファイルには1つのモジュールが含まれている必要があります。
- ファイル名はsnake_caseスタイルでなければなりません。
- モジュール名はキャメルケーススタイルでなければなりません。
- フォルダ構造は、モジュールの名前構造を繰り返す必要があります。
アプリケーションで受け入れられている構造に従ってください。これにより、コンパイラは不必要なエラーなしでコードをダウンロードできます。
アプリケーションテスト
新しいミックスアプリケーションを生成するときにテストを配置するために、 test/
フォルダーが作成されました。 アプリケーションのテストは、実行可能な(ただし必ずしも品質ではない)コードを記述する上で重要な(しかし不可欠ではない)部分です。
テストは、アプリケーションのルートフォルダーからmix test
コマンドを使用して--trace
されます--trace
オプションは、より有益な出力に使用されます。
$ mix test --trace
また、テストが相互にブロックするときに--trace
オプションを使用することも理にかなっています。 また、このオプションはすべてのテストを同期的に実行します(async:trueアクションをキャンセルします)。
また、このコマンドは_build
フォルダーを作成し、すべての.beam
ファイルを配置することにより、テスト環境でアプリケーションをコンパイルします。
IEXでアプリケーションをビルドして実行する
iexは、Elixirで提供されるインタラクティブなアプリケーションコンソールです。 Rubyに関しては、これはirbに類似しています。
iex -S mix
コマンドを使用して、混合アプリケーションを開始できます。 このコマンドは、必要に応じてコードをプリコンパイルし、インタラクティブコンソールを起動して、アプリケーションをロードします。
$ iex -S mix Erlang/OTP 19 [erts-8.1] [source-e7be63d] [64-bit] [async-threads:10] [hipe] [kernel-poll:false] Interactive Elixir (1.3.4) - press Ctrl+C to exit (type h() ENTER for help) iex(1)>
それとは別に、 mix compile
コマンドを使用してアプリケーションをコンパイルできます。
アプリケーションコードの記述
アプリケーションが単純であるため、すべてのコードを最上位モジュールの本体、つまりQuadraticEquationに配置します。
# lib/quadratic_equation.ex defmodule QuadraticEquation do @moduledoc """ The module with the logic of the solution of the quadratic equation """ end
タスクには、1つのパブリック関数といくつかのプライベート関数が必要です。 パブリック関数には、方程式を解くためのロジックが含まれ、プライベート関数には、元の2次方程式と結果の解のオプションが表示されます。
テストを書くことから始めましょう。 パブリックメソッドの回答オプションを決定するだけです。 最上位モジュール用に生成された特別なファイルにテストを配置します。
# test/quadratic_equation_test.exs defmodule QuadraticEquationTest do use ExUnit.Case doctest QuadraticEquation end
学校のコースから、二次方程式には2つの根、時には同じ根が存在するか、解がまったくないことを覚えています。
# test/quadratic_equation_test.exs defmodule QuadraticEquationTest do use ExUnit.Case doctest QuadraticEquation test "when discriminant less than zero" do assert QuadraticEquation.calculation(1, 2, 3) == {:fail, [error: "Discriminant less than zero!"]} end test "when discriminant equal zero" do assert QuadraticEquation.calculation(2, 4, 2) == {:success, [x1: -1.0, x2: -1.0, d: 0.0]} end test "when discriminant more than zero" do assert QuadraticEquation.calculation(2, 3, 1) == {:success, [x1: -0.5, x2: -1.0, d: 1.0]} end end
今はテストを実行しません。まず、QuadraticEquationで計算関数を定義します。 この関数は、3つの数値、つまり従来の表記法の2次方程式に固有の変数a、b、cを取ります。
# lib/quadratic_equation.ex ... @doc """ See the description of the module. """ def calculation(a, b, c) do end ...
ここでテストを実行し、失敗することを確認します。
二次方程式の解を関数に追加します。 また、テストで予想される関数の予想される戻り値も示します。
# lib/quadratic_equation.ex ... def calculation(a, b, c) do # print_equation(a, b, c) d = :math.pow(b, 2) - 4 * a * c if d >= 0 do x1 = (-1 * b + :math.sqrt(d)) / (2 * a) x2 = (-1 * b - :math.sqrt(d)) / (2 * a) # print_success(x1, x2, d) {:success, [x1: x1, x2: x2, d: d]} else # print_fail(d) {:fail, [error: "Discriminant less than zero!"]} end end ...
プライベート関数は、次の構造を使用して定義されます...
defp method_name do end
記事ではプライベートメソッドを提供しません。GitHub.comのサンプルのソースコードにあります。
ご注意 アノテーション@moduledoc
および@doc
、モジュールの本質の詳細な説明および@doc
の本質の説明に必要です。 また、exdocはそれらからリンクされたドキュメントを生成でき、hex.pmはドック自体を生成してレイアウトします。 生成されたドキュメントでモジュール/パブリック関数を非表示にするために、 @moduledoc
falseおよび/または@doc
falseディレクティブが使用されます。
ミックスタスクの作成
このサンプルコードのタスクの作成はオプションですが、一般的な記事では、このパートが役立ちます。
ミックスアプリケーションでは、これに割り当てられたlib / mix / tasksフォルダーにすべてのタスクを配置するのが一般的です。 そのため、最初にこのフォルダーをアプリケーションに追加します。
$ mkdir -p lib/mix/tasks
次に、アプリケーションのメインモジュールの名前とタスクの名前を含む名前を持つタスク用のこのフォルダーにファイルを作成します。
$ touch lib/mix/tasks/quadratic_equation.example.ex
タスクは難しくなく、その責任はQuadraticEquationモジュールの計算関数を呼び出すことです。
# lib/mix/tasks/quadratic_equation.example.ex defmodule Mix.Tasks.QuadraticEquation.Example do use Mix.Task @shortdoc "QuadraticEquation. Example of calculation." def run(_) do QuadraticEquation.calculation(2, 3, 1) end end
@shortdoc
注釈@shortdoc
、タスクの本質の簡単な説明と、 mix help
コマンドの出力リストに表示するために必要です。
$ mix help
Hexでアプリを公開する
Hex-ErlangおよびElixirアプリケーションライブラリ。
mix.exsファイルでミックスアプリケーションを公開する前に、プロジェクトの説明とメタデータを追加する必要があります。 メタデータの一部は、 mix new ...
コマンドによって自動的に生成されました。
# mix.exs @version "0.1.0" def project do [app: :quadratic_equation, version: @version, elixir: "~> 1.3", build_embedded: Mix.env == :prod, start_permanent: Mix.env == :prod, package: package, homepage_url: "https://hexdocs.pm/quadratic_equation", source_url: "https://github.com/folklore/quadratic_equation", description: "Example of creating a Mix-application - from initialization to publication.", deps: deps] end def package do [name: :quadratic_equation, files: ["lib", "mix.exs"], maintainers: ["Stanislav Gordanov"], licenses: ["MIT"], links: %{"Github" => "https://github.com/folklore/quadratic_equation"}] end
公開するには、hex.pmのプロファイルも必要です。 まだ作成していない場合、作成する最も簡単な方法はコマンドを使用することです...
$ mix hex.user register
ユーザー名、メールアドレス、パスワードを入力する必要があります。 また、送信されたレターのリンクをクリックして、入力したメールを確認します。
アプリケーションを公開する前に、ドキュメントを生成する必要があります。 コードを説明で十分にカバーしていない場合は、モジュールは@moduledoc
を使用して文書化され、関数は@moduledoc
を使用して文書化されることを@moduledoc
て@doc
。
ドキュメントにREADMEファイルを追加することもできます;このため、アプリケーション構成に含めます。
# mix.exs def project do [#... docs: [extras: ["README.md"]] ] end
ドキュメントを生成するには、次のコマンドを使用します...
$ mix docs
すべての準備手順が完了したら、パッケージマネージャーでアプリケーションの公開を開始できます。 パブリケーション自体は複雑ではなく、次のコマンドによって行われます...
$ mix hex.publish
これで、アプリケーションがhttps://hex.pm/packages/quadratic_equationで利用可能になりました。
おわりに
ご覧のとおり、Mixを使用してアプリケーションスケルトンを生成するのは、パッケージマネージャーに公開するのと同じように、難しい作業ではありません。 Elixirでアプリケーションを作成するのはそれほど難しくありません。 言語を学び、アイデアを見つけて実装します。 どうぞ!
文学
» ミックスの紹介
» ミックスでElixirプロジェクトを整理する
» Elixirプロジェクトのミックスタスクを作成する
» 最初のElixirライブラリを作成して公開する
» Elixirライブラリの作成と公開
» OlixアプリケーションとしてElixirライブラリを作成する
» ホセ・ヴァリムとエリクサー| プロタル
» 二次方程式
関数型プログラミング言語Elixirに興味がある場合、または単に同情的な場合は、 Wunsh && Elixir Telegramチャットに参加することをお勧めします。