設計上のプログラミング言語は「クリーンコード」を強制できますか?[閉まっている]


19

ですから、私は最初のプロジェクトをC ++でコーディングしていますが、単に機能するのではなく、コードを「クリーン」にするのにより多くの努力が必要と思われます。つまり、C ++が、いが動作するコードを「許可」しているように見えます。

考えさせられた

プログラミング言語は、設計によってクリーンなコードを実施できますか?そのような言語はすでにありますか?

また、これはプログラミング言語の開発/理論の設計原則としてどのように組み込まれていますか?どのような手段が使用されていますか?


14
多くの言語が試しました。私の意見ではリモートで成功したものはありません。
ロボットを取得

5
残念ながら、これは「クリーンコード」の客観的な定義がないため、完全に意見に基づいています。チャットルームで気軽に議論してください。そこにいるすべての人が意見を共有できると確信しています。
Ixrec 16

9
いいえ、FORTRANはどの言語でも作成できます。
whatsisname

4
あなたは、言語を馬鹿にすることができるかどうか尋ねています。彼らが言うように、ばかは独創的です。
ロボットをゲット

2
この質問の目的のために、「クリーンコード」にはどのような特徴がありますか?それを定義する必要があります。そうしないと、正当な理由のある回答がすべて有効になります。
セオドロスチャツィジアンナキス16

回答:


20

言語設計が「クリーンコード」に与える主な効果は、構文レベルです。多くの省略表現とあいまいな演算子(Perl / APL)を使用する言語は「ダーティ」コードに適していますが、要素のセットが小さい言語(Pythonなど)はよりクリーンなコードに適しています。

しかし、セマンティクスは非常に異なる動物です。言語のセマンティクスがクリーンな方法で使用されることを強制する方法はありません。特に、コンパイラーとして、言語のユーザーが何を達成しようとしているのかを知ることができないためです。強力なツールとは、それだけです。善悪を問わず、強力なツールです。

結局のところ、セマンティクスは構文よりも重要です。また、メンテナンス開発者として把握するのが最も難しい部分でもあります(たとえば、「このコードは実際に何を意味するのでしょうか?私はそれが何をするかわかります...」)。

したがって、クリーンなコードを強制する設計はないと言いますが、クリーンなセマンティクスで簡単な構文を記述して、それを簡単にすることができます。良くも悪くも、きれいなコードは主に開発者の知識、動機、規律、スキルの問題です。


2
型システムは正しいセマンティクスの実施に向けて大いに役立つと思います。たとえば、厳密に型指定された言語では、変数に適切な型の値が割り当てられます。型を安価で簡単にする言語は、型により多くのセマンティクスをエンコードすることを奨励します。強く型付けされた言語は、プログラマーに型変換についての意図を表現させます。ボイラープレートでセマンティクスを曖昧にする言語は、セマンティクスについて推論することも難しくします。さて、「クリーン」セマンティクスについては、明確ではありません。しかし、私はそれが正しいセマンティクスと大きな重複を持っていると思います。
モニカの

7

言語は、クリーンなコードの定義の一部であるバグの特定のクラスに対処するようにプログラマーに強制または奨励することができます。たとえば、さまざまな言語が比較的適切に対処しています。

  • ヌルポインター例外。
  • 共有状態のバグ。
  • 並行性の問題。
  • 未確認の例外。

ただし、クリーンなコードは主に人間同士のコミュニケーションに関するものなので、それはあなたをそこへの道の一部にするだけです。プログラミング言語には、実際にこれを支援するためのレバーが1つしかありません。それが表現力です。定義するのは本当に難しい用語ですが、基本的には、優れたプログラマーがより表現力豊かな言語でよりクリーンなコードを書くのは簡単です。彼らは、他の人間とうまく通信する用語でアルゴリズムを簡単に表現するために利用できるより多くのツールを持っています。誤解しないでください。どんなプログラミング言語でも(ほぼ)きれいなコードを書くことができます。いくつかの言語はそれを簡単にし、より良い相対的な結果をもたらします。

ただし、表現力だけをダイヤルすることはできず、魔法のように人々はより良​​いコードを書き始めるでしょう。ほとんどのプログラマーでは、言語を変更するためのノブを増やしますが、適切に使用する方法がわからないため、コードは実際には悪化します。コードの品質を向上させるには、規律と良い指導が必要です。特効薬はありません。


6

ある程度。多くの言語は、言語設計者の理想に従って、いくつかの形式のクリーンコードを奨励するために意図的に設計されています。languageい理解できないコードを任意の言語で書くことは確かに可能ですが、一部の言語はそれを思いとどまらせる努力をします。

例として、Pythonは言語のセマンティック構造に従ってブロックをインデントするように強制しますが、他の多くの言語では完全にランダムにインデントすることも、まったくインデントしないこともできます。これは、特定の理想的な清浄度を積極的に促進する言語の例です。


3

定量化できれば、最適化できる言語を作成できます。

「クリーンコード」ポリシーを実際に実施する特定の言語は知りませんが、ビルドで実行されるスタイル警官は非常に一般的です。

これが言語に組み込まれるのとは別のステップである主な理由は、主に優先順位の関数です。プログラミング言語の最大の関心事は、プログラマーが最も幅広いレベルで採用できるように最大限の柔軟性を持たせることです。非常に多くの異なるプログラミング言語とDSLがあり、ユーザーのベースを人為的に制限し、どの入力が許可されるかについて慎重に意見を述べることで、より広範な採用を妨げる可能性があります。

たとえば、人々に強制的に書くことはC#の最大の利益ではありません

if (condition)
{

の代わりに

if (condition) {

しかし、スタイルチェッカー、やる気があると判断することできます。

だから、質問に答えるために

プログラミング言語は、設計によってクリーンなコードを実施できますか?

重点鉱山

絶対に、「クリーンコード」の意味について強力な定義を提供する限り。

たとえば、次のことを意味する「クリーンコード」を定義できます。

  • 行の長さは80文字以下
  • 100行以下で構成される関数
  • インデントは2つのスペースでなければなりません
  • 開いている中括弧は、ちょうど1つのスペースが先行する行の終わりに続く必要があります
  • 1行に2つ以下の演算子

また、これらの規則の一部またはすべてに同意しない場合もありますが、最終的にはこれらは定量化可能であり、プログラムで実施できます。


1

いいえ、あなたが説明するという意味ではありません。「ugさ」を自動的に検出することはできません!

ただし、言語設計者は、優れたコードを奨励することができます(「クリーン」とは言いたくない場合があります。これは、優れた安全なコードも長くて「ugい」場合があるためです)。たとえば、Rust言語の設計者は、C ++プログラマーがしがみつく傾向があること(ヒープに割り当てられた値に単一の「所有者」を与えるなど)に注目し、それらのいくつかを簡単に行えるようにしました。これには、特定の一般的な間違いを犯していないことを確認するために使用できるタイプチェッカーの提供が含まれます。

優れた言語デザインはしばしばリアクティブであると言えます。デザイナーは優れたプログラマーが何をするかを見て、それをより簡単で「きれい」にしようとします。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.