Elixir রিপ্রেজেন্টার নরমালাইজেশন

Elixir রিপ্রেজেন্টার সমাধানগুলোতে যে নরমালাইজেশনগুলো প্রয়োগ করে তার একটি সারসংক্ষেপ


Elixir রিপ্রেজেন্টার বেশ কিছু নরমালাইজেশন প্রয়োগ করে। বিস্তারিত জানতে কোডটি বা টেস্ট ডেটা দেখুন।

কমেন্ট ও ডকস মুছে ফেলা

সব কমেন্ট, ডকস, মডিউলডকস ও টাইপডকস মুছে ফেলা হয়।

আগে

defmodule Fake do
  @moduledoc """
  Fake module to demonstrate stuff
  """

  @doc "Not much to see here"
  def foo do
    # TODO: return bar
    nil
  end
end

পরে

defmodule Fake do
  def foo do
    nil
  end
end

ইমপোর্টের ক্রম সাজানো

মডিউল বা ফাংশনের শুরুতে থাকা import স্টেটমেন্টগুলো এভাবে সাজানো হয়: alias, use, require, import।

আগে

defmodule Fake do
  import D
  alias A.U.V
  use B
  alias A.{T, S}
  require C

  def foo do
    import Z
    alias X
    use Y
  end

  import NotTouched
  alias NotTouched
end

পরে

defmodule Fake do
  alias A.{S, T}
  alias A.U.V
  use B
  require C
  import D

  def foo do
    alias X
    use Y
    import Z
  end

  import NotTouched
  alias NotTouched
end

কোড ফরম্যাট করা

কোডটি [mix code][mix-code] দিয়ে ফরম্যাট করা হয়, যা do end ব্লক বাধ্যতামূলক করে। পাইপে থাকা সব ফাংশন বন্ধনী দিয়ে লেখা হয়। আর টাইপ লেখা হয় বন্ধনী ছাড়া।

আগে

defmodule    Fake   do
        @type foo() :: integer() | atom
def foo, do:    nil |> bar
end

পরে

defmodule Fake do
  @type foo() :: integer | atom
  def foo do
    nil |> bar()
  end
end

আইডেন্টিফায়ার নরমালাইজ করা

আইডেন্টিফায়ারগুলো একটি প্লেসহোল্ডার মানে নরমালাইজ করা হয়। কিছু বিশেষ ভ্যারিয়েবল ও মডিউল অ্যাট্রিবিউট (_, @spec, __MODULE__ ইত্যাদি) প্রতিস্থাপন করা হয় না। ম্যাপ, স্ট্রাক্ট ও কিওয়ার্ড লিস্টের কী (key) নরমালাইজ করা হয় না।

আগে

defmodule Fake do
  alias Fake, as: SuperFake
  @my_constant 42

  @impl true
  def foo(bar) when is_integer(bar) do
    bar + @my_constant
  end

  def foo(%{a: a} = bar) do
    %{bar | a: a + @my_constant}
  end

  def foo(_), do: nil
end

পরে

defmodule Placeholder_1 do
  alias Placeholder_1, as: Placeholder_2
  @placeholder_6 42
  @impl true
  def placeholder_4(placeholder_5) when is_integer(placeholder_5) do
    placeholder_5 + @placeholder_6
  end

  def placeholder_4(%{a: placeholder_7} = placeholder_5) do
    %{placeholder_5 | a: placeholder_7 + @placeholder_6}
  end

  def placeholder_4(_) do
    nil
  end
end

ম্যাপ ও স্ট্রাক্টের কী (key) সাজানো

ম্যাপ ও স্ট্রাক্টের কী (key) সাজানো হয়। কিওয়ার্ড লিস্টের কী (key) সাজানো হয় না।

আগে

defmodule Fake do
  def foo do
    %MyStruct{z: 3, y: 2, x: 1}
    m = %{c: 3, a: 1, b: 2}
    %{m | b: 20, a: 10}
    [b: 2, a: 1]
  end
end

পরে

defmodule Fake do
  def foo do
    %MyStruct{x: 1, y: 2, z: 3}
    placeholder_3 = %{a: 1, b: 2, c: 3}
    %{placeholder_3 | a: 10, b: 20}
    [b: 2, a: 1]
  end
end