ですから、私は最初のプロジェクトをC ++でコーディングしていますが、単に機能するのではなく、コードを「クリーン」にするのにより多くの努力が必要と思われます。つまり、C ++が、いが動作するコードを「許可」しているように見えます。
考えさせられた
プログラミング言語は、設計によってクリーンなコードを実施できますか?そのような言語はすでにありますか?
また、これはプログラミング言語の開発/理論の設計原則としてどのように組み込まれていますか?どのような手段が使用されていますか?
ですから、私は最初のプロジェクトをC ++でコーディングしていますが、単に機能するのではなく、コードを「クリーン」にするのにより多くの努力が必要と思われます。つまり、C ++が、いが動作するコードを「許可」しているように見えます。
考えさせられた
プログラミング言語は、設計によってクリーンなコードを実施できますか?そのような言語はすでにありますか?
また、これはプログラミング言語の開発/理論の設計原則としてどのように組み込まれていますか?どのような手段が使用されていますか?
回答:
言語設計が「クリーンコード」に与える主な効果は、構文レベルです。多くの省略表現とあいまいな演算子(Perl / APL)を使用する言語は「ダーティ」コードに適していますが、要素のセットが小さい言語(Pythonなど)はよりクリーンなコードに適しています。
しかし、セマンティクスは非常に異なる動物です。言語のセマンティクスがクリーンな方法で使用されることを強制する方法はありません。特に、コンパイラーとして、言語のユーザーが何を達成しようとしているのかを知ることができないためです。強力なツールとは、それだけです。善悪を問わず、強力なツールです。
結局のところ、セマンティクスは構文よりも重要です。また、メンテナンス開発者として把握するのが最も難しい部分でもあります(たとえば、「このコードは実際に何を意味するのでしょうか?私はそれが何をするかわかります...」)。
したがって、クリーンなコードを強制する設計はないと言いますが、クリーンなセマンティクスで簡単な構文を記述して、それを簡単にすることができます。良くも悪くも、きれいなコードは主に開発者の知識、動機、規律、スキルの問題です。
言語は、クリーンなコードの定義の一部であるバグの特定のクラスに対処するようにプログラマーに強制または奨励することができます。たとえば、さまざまな言語が比較的適切に対処しています。
ただし、クリーンなコードは主に人間同士のコミュニケーションに関するものなので、それはあなたをそこへの道の一部にするだけです。プログラミング言語には、実際にこれを支援するためのレバーが1つしかありません。それが表現力です。定義するのは本当に難しい用語ですが、基本的には、優れたプログラマーがより表現力豊かな言語でよりクリーンなコードを書くのは簡単です。彼らは、他の人間とうまく通信する用語でアルゴリズムを簡単に表現するために利用できるより多くのツールを持っています。誤解しないでください。どんなプログラミング言語でも(ほぼ)きれいなコードを書くことができます。いくつかの言語はそれを簡単にし、より良い相対的な結果をもたらします。
ただし、表現力だけをダイヤルすることはできず、魔法のように人々はより良いコードを書き始めるでしょう。ほとんどのプログラマーでは、言語を変更するためのノブを増やしますが、適切に使用する方法がわからないため、コードは実際には悪化します。コードの品質を向上させるには、規律と良い指導が必要です。特効薬はありません。
定量化できれば、最適化できる言語を作成できます。
「クリーンコード」ポリシーを実際に実施する特定の言語は知りませんが、ビルドで実行されるスタイル警官は非常に一般的です。
これが言語に組み込まれるのとは別のステップである主な理由は、主に優先順位の関数です。プログラミング言語の最大の関心事は、プログラマーが最も幅広いレベルで採用できるように最大限の柔軟性を持たせることです。非常に多くの異なるプログラミング言語とDSLがあり、ユーザーのベースを人為的に制限し、どの入力が許可されるかについて慎重に意見を述べることで、より広範な採用を妨げる可能性があります。
たとえば、人々に強制的に書くことはC#の最大の利益ではありません
if (condition)
{
の代わりに
if (condition) {
しかし、スタイルチェッカーは、やる気があると判断することができます。
だから、質問に答えるために
プログラミング言語は、設計によってクリーンなコードを実施できますか?
重点鉱山
絶対に、「クリーンコード」の意味について強力な定義を提供する限り。
たとえば、次のことを意味する「クリーンコード」を定義できます。
また、これらの規則の一部またはすべてに同意しない場合もありますが、最終的にはこれらは定量化可能であり、プログラムで実施できます。
いいえ、あなたが説明するという意味ではありません。「ugさ」を自動的に検出することはできません!
ただし、言語設計者は、優れたコードを奨励することができます(「クリーン」とは言いたくない場合があります。これは、優れた安全なコードも長くて「ugい」場合があるためです)。たとえば、Rust言語の設計者は、C ++プログラマーがしがみつく傾向があること(ヒープに割り当てられた値に単一の「所有者」を与えるなど)に注目し、それらのいくつかを簡単に行えるようにしました。これには、特定の一般的な間違いを犯していないことを確認するために使用できるタイプチェッカーの提供が含まれます。
優れた言語デザインはしばしばリアクティブであると言えます。デザイナーは優れたプログラマーが何をするかを見て、それをより簡単で「きれい」にしようとします。