エリクサーの学習に取り組んできました。私は、if/elseを1行だけ行うさまざまな方法について少し興味があります。エリクシルの場合にdo/elseキーワードを使用する理由
私は勝者のいずれかのために適切にどのパイプタプル...
if left_side_wins?(p, c) do
{"Humanity", p, c}
else
{"The Machine", c, p}
end
|> print_winner
...で始まりました。しかし... このは...
if left_side_wins?(p, c), do: {"Humanity", p, c}, else: {"The Machine", c, p}
|> print_winner
をしない...と私は|>
がelse
の一部と見なされているからだ、と私は括弧でそれを修正することができますを知っ
if(left_side_wins?(p, c), do: {"Humanity", p, c}, else: {"The Machine", c, p})
|> print_winner
...これが動作するようになりました。いずれかの勝者の場合、タプルはprint_winner
に正しくパイプされます。
しかし、私はも行う/他/エンドブロックインラインを使用して...
if left_side_wins?(p, c) do {"Humanity", p, c} else {"The Machine", c, p} end
|> print_winner
を行う...としてうまく機能している可能性があります。
私が読んだすべてのリソースは、do:.., else:..
形式を使用して説明していますが、do ... else ... end
はエラーが発生しにくく、クリーナーに見えます。
私の見ているものを超えて、それらの主な違いは何ですか?
do: ..., else: ...
が優先されるようですが、演算子の優先順位にはそれほど敏感ではありませんか?実際に構文
すばらしい議論、ありがとう!他のものよりも選択肢がぼやけているのですか、それとも一般的に「エリシシティ」として受け入れられ、さまざまな状況で使用されていますか?それにもかかわらず、「...常に価値のあるパイプの連鎖を始める」「...表現をそれ自身の関数にする」というのは、素晴らしいアドバイスです。 – kevlarr
彼らはどちらもエリキシルです。私はdoとelseに '' do:else: 'を使うべきであるというだけの式が1つしかなければ、複数の式がある場合に' 'else else''を残すべきだと主張しています。しかし、個人的には、単一の表現の場合でも、私はちょうど良い見た目をチェックします。 1行の中のすべてが80文字未満の場合、 'do、else:'を使用します。そうでなければ 'do else end'を使います。 Credo linter https://github.com/rrrene/credoをチェックしてください。あなたのコードをチェックします:)これはクールな学習ツールです! – tkowal