V
"если b - непустой список, то a = b, иначе a = c"
Size: a a a
V
AD
V
[_ | _]
наиболее близок к этому вербальному описаниюV
nil, []
и прочего усложняет чтениеAD
AD
LL
defmodule X do
def cmp(list) do
Enum.filter(list, fn x ->
if x == [], do: true, else: false
end)
end
def pm(list) do
Enum.filter(list, & match?([], &1))
end
end
n = 10_000
list =
[[]]
|> Stream.cycle()
|> Enum.take(n)
|> Enum.zip(1..n)
|> Enum.flat_map(fn {a, b} -> [a, b] end)
Benchee.run(%{
"pm" => fn ->
X.pm(list)
end,
"cmp" => fn ->
X.cmp(list)
end
})
Name ips average deviation median 99th %
pm 1.97 K 508.00 μs ±10.35% 488.60 μs 679.60 μs
cmp 1.60 K 626.34 μs ±11.92% 606.18 μs 1151.46 μs
Comparison:
pm 1.97 K
cmp 1.60 K - 1.23x slower +118.34 μs
V
AD
V
V
AD
LL
if x == [], do: true, else: false
и оставить x == []
Name ips average deviation median 99th %
pm 1.97 K 508.16 μs ±10.02% 492.75 μs 693.95 μs
cmp 1.57 K 637.88 μs ±15.06% 608.31 μs 1172.37 μs
Comparison:
pm 1.97 K
cmp 1.57 K - 1.26x slower +129.72 μs
V
if match(correct_case)
ты пытаешься сделать if not match(incorrect_case1, incorrect_case2, ...)
a это смена семантики, потому что множество всех вариантов значений слишком велико чтобы покрыть их негативными кейсамиAD
AB
LL
AD
V
match?([_ | _], ...)
жеММ