-5

実際のプログラミングの質問よりも社会的な好奇心...

1000年前に最初のプログラミングクラス(Fortran 66)を受講したとき、そしてわずか500年前に最初のCクラスとC ++クラスを受講したとき、言語間でかなり標準的な句読点がありました。Basic(shudder)、PL / 1、PL / AS、RexxでもPascalで見ました。わかりました、APL2はこの議論の一部ではありません。

各言語には、独自の句読点があります。Pascalのピリオド、Fortranのコンマ区切りのdoループ、他のほとんどすべてのセミコロン。

私が学んだように、各言語には、空白(または左マージン)<space> if <space>などで区切られたキーワード(if、for、do、while、untilなど)もあります。

各言語には、呼び出されたものすべての関数、サブルーチンがあります。一部の組み込みの一部のユーザーがコーディングしました。それらは<whitespace|left margin> function_name(parameters);によって相殺されました。sqrt(x)またはrand(y);のように

最近、句読点規則の新しいセットがあるようです。特に、初期化子が変数宣言の最後に接着されるC++ではintx(0); またはauto_ptr<p>p(new gizmo); これは常に、誰かが関数prototoyeを宣言している、または関数を整数として使用していると思い込ませます(え?)。

次に、「if」と「for」は親子関係を拡大したようです。if(true)for(;;)など。キーワードはいつから関数になりましたか。

そして最後に、機能は彼らの親子を流したようです。sqrt(2)select(...)

質問:古い方法が消えて、この新しい方法が流行したのはいつですか?私以外の誰かが読むのが面倒で、句読点の配置が伝えるために使用した情報がなくなっていると感じますか?K&Rが「if」または「for」の最後に{を付けて、あちこちでバイトを保存することをよく知っています。ここではその言い訳を使用することはできません。HDDスペースが100MiBを超えて急増したため、読みやすさを失う理由としてのスペースがなくなりました。

あなたの考えが求められます。これを行う正当な理由がある場合、私は喜んでそれを学び、おそらくあと50年でそれに慣れるでしょう。もちろん、コンパイラーがこれらの(IMHO)タイプミスを認識し、そのまま続行するのは良いことですが、そのようにコーディングできるからといって、そうしなければならないという意味ではありませんよね?

ありがとう!

4

2 に答える 2

4

C ++でのオブジェクト宣言と関数宣言の間の時折のあいまいさに関しては確かに正しいです。「最も厄介な解析」を検索してください。ただし、常に混乱している場合は、C++ を読むのがあまり得意ではないということです。練習で改善する必要があります。しかしとにかく、C++ は主に読みやすいように設計されているわけではないことが知られています。特に練習が必要です。他の設計上の優先順位があります。誰もがこれらの優先順位を共有しているわけではありません。そのため、誰もが C++ を使用しているわけではありません。

条件を括弧で囲むことについては、自由に記述できます

if (foo) { bar; }

それよりも

if(foo) { bar; }

if関数呼び出しの構文と構文の間に人為的な区別を作成するため。C は、レクサーがトークン間の境界を見つけることができる限り、空白について完全に緩和されているため、残りはスタイルであり、言語ではありません。空白に関するこの緩和がいつ始まったのかを知りたい場合は、言語の ALGOL ファミリーの開発中のある時期だと思います。ALGOL58 は知りませんが、存在するかどうかを確認する場所の 1 つです。

あなたの「古い方法」の言語のいくつかは、関数の引数を囲むだけでなく、式でグループ化するために括弧を使用したと確信しています。

C や C++ のプログラムを関数呼び出しと間違えたことは一度もないと思いifます。に解決されるマクロで奇妙なことを行う人がいればif、間違いなく私を混乱させる可能性があります。しかし、C スタイルのマクロが混乱を引き起こさないと主張した人は誰もいませんでした。

すべての言語がほぼ同様の方法で句読点を使用する必要があるという主な主張がある場合は、Lisp と Ruby を調べてください。うまくいけば、ガスケットを吹き飛ばして、それを乗り越えることができます;-)

私は、K&R が「if」または「for」の末尾に { を配置して、あちこちでバイトを節約していることをよく知っています。ここでその言い訳は使えない

それがリッチーがそこに置いた理由かもしれませんが、私がそこに置いた理由ではありません。主に縦方向のスペースを節約するためにそこに置きました。それは今日でもまだ限界があります: 私のハードディスクは、私がこれから書くコードのすべての行をその容量のごく一部に保存できるかもしれません.家具。{-on-a-line-on-its-own は、一度に複数の機能を画面上に表示することで問題を複雑にしたくない人々によって発明されたと確信しています。余分な垂直方向の空白により、これがうまく防止され、画面に収まる機能の複雑さについて、よりコンパクトなスタイルよりも厳しい制限が課せられます。

Python は、開閉句読点をまったく気にしないことで、ブロックごとに垂直方向のスペースをもう 1 行節約しますが、それが GvR がそのようにした理由だとは思いません。

要約すると、私の答えは「いいえ」だと思います。誰もがコードのフォーマットについて好き嫌いを正確に共有しているわけではありません。または私の。いいことでもあるんでしょうね。

于 2012-06-11T12:36:56.117 に答える
0

C ++、Java、C#、およびその他の現代言語は高級言語であるため、これらのキーワードはすべて、それらをより理解しやすく「親しみやすい」ものにするためのものです。それらは、可能な限り私たちの共通言語に近いものでなければなりません。時々、「デフォルト」の表現は、コードの見栄えを良くし、より明確で読みやすくするために変更されます。これはすべて、プログラマーの作業を容易にするために行われます。

現在、Visual Studio(.NET)などの多くのフレームワークは、スペースやタブなどを配置および削除するコードを「修正」します。

問題はこれに慣れているだけです。このルールは変更され、新しい基準を変更して採用し続けます。したがって、世代の問題はここで明らかです。

ところで、forこれは関数です。これはイテレータです。_についても同じでif、述語と関数を引数として取ります。

于 2012-06-11T12:40:44.967 に答える