Do you want to pick up from where you left of?
Take me there

Executables

Untuk membuat eksekutabel di Elixir kita akan menggunakan escript. Escript menghasilkan sebuah eksekutabel yang bisa dijalankan pada sistem apapun yang sudah diinstali Erlang.

Memulai

Untuk membuat sebuah eksekutabel dengan escript hanya ada beberapa hal yang kita perlu lakukan: implementasi sebuah fungsi main/1 dan mengubah Mixfile kita.

Kita akan mulai dengan membuat sebuah modul untuk menjadi titik masuk (entry point) ke eksekutabel kita. Inilah tempat kita mengimplementasi main/1:

defmodule ExampleApp.CLI do
  def main(args \\ []) do
    # Do stuff
  end
end

Kemudian kita perlu mengubah Mixfile kita untuk memasukkan opsi :escript ke project kita bersama dengan menspesifikasikan :main_module kita:

defmodule ExampleApp.Mixproject do
  def project do
    [app: :example_app, version: "0.0.1", escript: escript()]
  end

  defp escript do
    [main_module: ExampleApp.CLI]
  end
end

Memparse Argumen

Dengan aplikasi kita siap, kita dapat lanjut ke memparse argumen dari command line. Untuk melakukan ini kita akan gunakan OptionParser.parse/2 dari Elixir dengan opsi :switches untuk mengindikasikan bahwa flag kita adalah boolean:

defmodule ExampleApp.CLI do
  def main(args \\ []) do
    args
    |> parse_args
    |> response
    |> IO.puts()
  end

  defp parse_args(args) do
    {opts, word, _} =
      args
      |> OptionParser.parse(switches: [upcase: :boolean])

    {opts, List.to_string(word)}
  end

  defp response({opts, "Hello"}), do: response({opts, "World"})

  defp response({opts, word}) do
    if opts[:upcase], do: String.upcase(word), else: word
  end
end

Membuild

Sesudah kita selesai mengkonfigurasi aplikasi kita untuk menggunakan escript, membuild eksekutabel kita adalah mudah dengan Mix:

mix escript.build

Let’s take it for a spin:

$ ./example_app --upcase Hello
WORLD

$ ./example_app Hi
Hi

Selesai. Kita sudah membuat eksekutabel pertama kita menggunakan escript.

Caught a mistake or want to contribute to the lesson? Edit this lesson on GitHub!