Size: a a a

2020 October 28

PG

Pig Greenest in pro.elixir
defp get_free_name(list, name), do: get_free_name(list, name, 2, name)

defp get_free_name(list, name, num, base_name) do
 unless Enum.member?(list, name) do
   name
 else
   get_free_name(list, "#{base_name} #{num}", num + 1, base_name)
 end
end
источник

NM

Nikita Mistyukov in pro.elixir
уж и забыл с чем этот ваш эликсир едят))) короче на любителя)
источник

NM

Nikita Mistyukov in pro.elixir
def get_project_name(list_names, name), do: get_project_name(list_names, name, name, 2)
def get_project_name(list_names, name, generated_name, idx) do
 cond do
   name not in list_names -> name
   generated_name not in list_names -> generated_name
   true -> get_project_name(list_names, name, "#{name} #{idx}", idx + 1)
 end
end
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Надо писать код, который легко читать

defmodule Foo do
 defp construct_widget_name(widget, project) do
   project
   |> list_project_widgets_for_project()
   |> Stream.map(& &1.name)
   |> get_free_name(widget.name)
 end

 @spec get_free_name(
         project_widgets_enum :: Enumerable.t(),
         widget_base_name :: String.t(),
         widget_number_to_try :: non_neg_integer()
       ) :: first_awailable_name :: String.t()
 defp get_free_name(project_widgets_enum, widget_base_name, widget_number_to_try \\ 0) do
   name_on_current_iteration =
     case widget_number_to_try do
       0 -> "#{widget_name}"
       ordinal_number -> "#{widget_name} #{widget_number_to_try}"
     end

   case Enum.member?(project_widgets_enum, name_on_current_iteration) do
     true -> get_free_name(project_widgets_enum, widget_base_name, widget_number_to_try + 1)
     false -> name_on_current_iteration
   end
 end
end
источник

ŹR

Źmićer Rubinštejn in pro.elixir
И форматировать короче тоже надо
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Community guidelines там всякие
источник

jc

john conor  in pro.elixir
project
   |> list_project_widgets_for_project()
источник

jc

john conor  in pro.elixir
вот да
источник

jc

john conor  in pro.elixir
источник

AD

Anastasiya Dyachenko in pro.elixir
Źmićer Rubinštejn
Надо писать код, который легко читать

defmodule Foo do
 defp construct_widget_name(widget, project) do
   project
   |> list_project_widgets_for_project()
   |> Stream.map(& &1.name)
   |> get_free_name(widget.name)
 end

 @spec get_free_name(
         project_widgets_enum :: Enumerable.t(),
         widget_base_name :: String.t(),
         widget_number_to_try :: non_neg_integer()
       ) :: first_awailable_name :: String.t()
 defp get_free_name(project_widgets_enum, widget_base_name, widget_number_to_try \\ 0) do
   name_on_current_iteration =
     case widget_number_to_try do
       0 -> "#{widget_name}"
       ordinal_number -> "#{widget_name} #{widget_number_to_try}"
     end

   case Enum.member?(project_widgets_enum, name_on_current_iteration) do
     true -> get_free_name(project_widgets_enum, widget_base_name, widget_number_to_try + 1)
     false -> name_on_current_iteration
   end
 end
end
опять не понятно рофл это или нет
источник

NM

Nikita Mistyukov in pro.elixir
а вообще, можно наверное не мучить дохлого, а засунуть в базу - он конфлит чтобы оно само там увеличивало)
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Anastasiya Dyachenko
опять не понятно рофл это или нет
Нет. На текущем этапе своей карьеры я считаю именно так
источник

AD

Anastasiya Dyachenko in pro.elixir
а почему Stream.map?
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Хз. На автомате набрал, не туда посмотрел видимо.
источник

AD

Anastasiya Dyachenko in pro.elixir
Źmićer Rubinštejn
Нет. На текущем этапе своей карьеры я считаю именно так
а на счет case с true/false разделяешь мнение что это лучше чем if?
источник

jc

john conor  in pro.elixir
Anastasiya Dyachenko
а на счет case с true/false разделяешь мнение что это лучше чем if?
первого уровня?
источник

jc

john conor  in pro.elixir
там может даже тернарник
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Anastasiya Dyachenko
а на счет case с true/false разделяешь мнение что это лучше чем if?
Я предпочитаю case всему остальному
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Во всяком случае, лучше case чем unless
источник

ŹR

Źmićer Rubinštejn in pro.elixir
У меня от этих отрицаний голова болит
источник