プログラミング言語が冗長か簡潔かを判断する方法は?


17

プログラミング言語は、多くの場合、冗長または簡潔であると説明できます。

私の理解では、冗長言語は読みやすく、理解しやすく、簡潔な言語は簡潔で簡潔ですが、読むのはより困難です。定義で考慮すべき他のものがありますか?

今日の一般的なプログラミング言語の多くは冗長であるように思われ、これらの用語2つの用語は、ある言語を他の言語と比較して多かれ少なかれと表現するためにのみ使用されます。

プログラミング言語が他の言語よりも冗長/簡潔であるかどうかをどのように判断しますか?

例:C#はJavaより冗長ですか?

回答:


30

私の理解では、冗長言語は読みやすく、理解しやすく、簡潔な言語は簡潔で簡潔ですが、読むのはより困難です。

これは誤りです。詳細とは、多くの記号を意味します。簡潔は、シンボルが少ないことを意味します。

これは読みやすさや理解のしやすさとは関係ありません

冗長なCOBOLが読みやすいと感じる人もいれば、非常に多くのシンボルがほとんど必要ないために混乱を招く人もいます。

一部の人々は、プログラムが非常に短いため、簡潔なI / J / KおよびAPLが読みやすいと感じています。他の人は、記号があいまいなので読みにくいと感じます。

Terse / Verboseは、読みやすい、または理解しやすいとは関係ありません。

定義で考慮すべき他のものがありますか?

いいえ。簡潔で詳細な定義は問題ありません。

重要なのは、これらの定義が「読みやすく、理解しやすい」とは何の関係もないことです

今日の一般的なプログラミング言語の多くは冗長であるようです。

本当に?

プログラミング言語が他の言語よりも冗長/簡潔であるかどうかをどのように判断しますか?

トークンを数えて何かを成し遂げてください。

Add 2 TO A GIVING B.

7トークン

b = a + 2;

6トークン

http://dictionary.reference.com/browse/verbose

http://dictionary.reference.com/browse/terse


5
「Terse / Verboseは読みやすく、理解しやすいとは関係ありません」の+1 私は常に数学的な表記法を考えます。それは適切に行われた場合、非常に高密度でありながらまだ比較的読みやすいものです。
フランクシェラー

5
@sunpech:それが英語の単語の意味です。「冗長」とは多くの言葉を意味します。「簡潔」は単語が少ないことを意味します。可読性とは関係ありません。単純に単語数。私がしたことは、「単語」を「トークン」に置き換えることだけでした。それはただの英語で、特別なことは何もありません。
-S.Lott

1
トークンの長さも考慮する必要があります。Common Lispは非常に多くのキーワードが長いため、冗長に見えますが、これもCOBOLの冗長性を高めます。
デビッドソーンリー

1
@フランク・シェラー:絶対に間違っています。生徒が数学を学ぶのにかかる時間を考えてください。それは読めるほど読めない(深刻な数学)し、6年間の中等教育を受けた後でも大多数はそれを真剣に読むことができない。読めないことは悪いことではありません!しかし、数学は読みやすい表記法であると言うことは、控えめに言っても近視眼的なコメントです。
デビッドモルダー

2
@DavidMulder:数学表記は大きく異なるため、どちらも誇張の罪を犯していると思います。代数、集合論、基本計算の表記法は透明であると考えていますか?一方、私はテンソルの抽象的な表記法は読めないナンセンスだと考えています。(しかし、その後、表記法を適切に学習するのにも時間がかかりませんでした。)
フランクシェラー

6

プログラミング言語が他の言語よりも冗長/簡潔であるかどうかをどのように判断しますか?

同等または類似の言語構成を比較することにより、特に同じまたは同等のタスクを1つの言語と他の言語でどのように解決できるか。

C#はJavaより冗長ですか?

Javaは一般にC#より冗長です。最も明白な違いにはデリゲートとラムダ式が含まれます。Javaでは、C#で1つのラムダ式を使用して実行できることを実現するために、個別のインターフェイスを定義、サブクラス化、およびインスタンス化する必要があります。


1
Javaは、今のJava 8とラムダ式サポートdocs.oracle.com/javase/tutorial/java/javaOO/...
shanraisshan

1
@shanraisshan:はい、時間の経過とともに良くなりましたが、AFAIK Javaはまだ少し冗長です。たとえば、リンク先のドキュメントでは、コードに多数のp.getAge()ステートメントが含まれています。C#では、プロパティを作成しますAge。これは、メンバー関数と同じ程度のカプセル化をもたらしますが、代わりgetAgeに記述することができp.Ageます。
Doc Brown

1
また、Javaは改善されましたが、C#は静的なターゲットではありませんでした...ジェネレーター関数やasync / awaitのようなこの答えから、C#コードをJavaの同等のものよりも短くすることができます。
ジュール

3

プログラマでない人にコードスニペットを提供し、そのスニペットが何をしようとしているかを説明するように彼/彼女に依頼します。最も近い答えが得られる場合、それは冗長です。WTF式を取得する場合は簡潔です。


2

この尺度は、言語の表現力と呼ばれます。この典型的な測定基準は、同じ機能を実装するために必要なコードまたはステートメントの標準化された行を測定することです。

Wikiの一部の値-1つのステートメント/行の1つの機能を以下に実装するために必要なCコードのステートメント/行の数:

  • C-ステートメント:1行:1
  • C ++-ステートメント:2.5行:1
  • Fortran-ステートメント:2.5行:0.8
  • Java-ステートメント:2.5行:1.5
  • Perl-ステートメント:6行:6
  • Smalltalk-ステートメント:6行:6.25
  • Python-ステートメント:6行:6.5

これらの測定値の1つがFORTRANがCよりもある程度のマージン(!)を表現していることを示唆しているのに対し、C ++がC(!!) 「。
ジュール
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.