2

私は現在Rubyについて読んでいます。それは素晴らしい言語だと思いますが、同じアクションをコーディングするために、構文がわずかに異なるだけの同等の方法が非常に多くあることに少し悩まされています。たとえば、unless conditionalステートメントを書くことと完全に同等if !conditionalです。

私にとって、これは表現力を追加するものではなく、他の人のコードに従うのがより面倒になるだけです。私が見逃している利点はありますか (いくつかの構文キーワードが自分の好みに合わなかったために言語を拒否することは通常ないため、さまざまな好みに対応する以外に説得力がありません)?

おそらくすべての言語で、この例が他にもあります。私がこの例を使用しているのは、特に合理的な防御が欠けているからです。

4

4 に答える 4

3

さまざまな好みに対応することが、おそらく説明です。この哲学は Perl から採用されており、TIMTOWTDIとして知られています (それを行う方法は複数あります)。

これには確かに利点があります。たとえば、既存の構文構造を新しく興味深い方法で組み合わせることができるため、Ruby 内で豊富なドメイン固有言語を作成しやすくなります。

しかし、この手法には多くの反対者もいて、特に Pythonは反対のことを目指しています。

それを行う明白な方法が 1 つ (できれば 1 つだけ) ある必要があります。

于 2011-02-13T09:14:25.140 に答える
1

さまざまな構文バリエーションを使用すると、さまざまなタイミングでより便利になり、読みやすくなります。開発者が特定のタスクに対して最も読みやすく明白な構文を選択できる便利なツールです。

これはあなたのunless例で示すことができます:

単純なブール式では、特定の開発者がどれだけ見栄えが良いと考えるかに応じて、個人的な好みがあるかもしれませんが、unless または if を使用する実際の利点はありません。

if !my_bool_var
    #
end

unless my_bool_var
    #
end

これらは同じように読みやすく (そして書きやすく) なっています。

ただし、より複雑なブール式では、ifフォームには欠点があります。

if !((a + b + c) < (x-a)*b && my_bool_var || ((x - a)*b)/(c+1) > 2)
    #
end

unless (a + b + c) < (x-a)*b && my_bool_var || ((x - a)*b)/(c+1) > 2
    #
end

ここで、not 形式は、not が式全体に適用されることが確実にわかっているため、少し読みやすくなっています。一方、if 形式では、角かっこを視覚的に一致させる必要があります。これは、このような複雑な式では難しい場合があります。エディターでは、これが多少役立ちます。

于 2011-02-13T12:23:36.320 に答える
1

Perl にも 'unless' 構文があり、Larry Wall の言語学者としての経歴に由来すると思います。

セマンティクスを頭の中ですばやく判断できれば、分岐構造は理解しやすくなります。たとえば、次のような二重否定を考えてみましょう。

  if (!$isDisabled)
  {

  }

私の弱い脳がビートをスキップさせます

unlessこれをもう少し自然言語に近づけることができます

  unless($isDisabled)
  {

  }
于 2011-02-13T09:14:07.727 に答える
0

一般に、開発者に同じことを達成するための多くの方法を提供することは普通のことであり、もちろん、開発者が別の方法よりも 1 つの方法を選択するのはある種の好みです。ただし、スマート コンパイラは、コードをバイナリ実行形式に変換するときに、すべての方法を同じ結果に変換することを知っておく必要があります。

于 2011-02-13T09:12:20.570 に答える