言語の大文字と小文字を区別しないキーワード[非公開]


31

カスタムスクリプト言語を記述しようとしています。大文字と小文字を区別しないキーワードを提供することで言語を容認する提案がありました。

私は個人的にこのアイデアが好きではありませんが、エンドユーザーを幸せにするだろうと言っている私のチームの人はほとんどいません!FORTRAN、BASIC、SQLなどの言語の例では、大文字と小文字が区別されないことを示しています。

これはいい考えですか?


4
まあ、Visual Basicは一般に大文字と小文字を区別しませんが、質問に答えますか?; P
ヤニス


3
ユーザーをASCII文字セットに制限しない限り、識別子の大文字と小文字を区別しないようにすることは非常に難しいことに注意してください。
サイモンリヒター

2
@MainMa:C ++ atleastは直接ではありません。識別子に実装定義の文字を使用できますが、保証されているのはa-zA-Z0-9(開始時を除く)とのみ_です。
Xeo

2
VB6は、実際には一種のハイブリッドアプローチを使用しています。キーワードと識別子は任意の方法で記述でき、IDEはすぐにそれらを格納された方法に変換します。(「endif」と書くこともでき、「end if」に変換されます。)
Felix Dombek

回答:


42

エンドユーザーが誰であるか自問してください。CやJavscriptのプログラミング経験がある人、またはUnixのIT経験を持つ人が作成することを意図している場合、大文字小文字の区別はおそらく正しいことです。ユーザーがそれを期待しているからです。しかし、ほとんどのエンドユーザー、パワーユーザーであっても、これは混乱を招くでしょう。

VB / VBA / VBScriptは大文字と小文字を区別しません。これは、プログラマーでない人でも簡単に言語を理解できるようにするために行われた決定です。スクリプトではなく、多くのユーザーが取得するExcelの式では、大文字と小文字は区別されません。ほとんどのケースの選択肢を書いて、テキストの外観多かれ少なかれプロと研磨作ることができますが、場合には、自己が変更されませんセマンティック言葉の意味を。だから、開発者以外は大文字と小文字を区別するスクリプト言語に混同されると信じています。

繰り返しますが、これは技術的な選択ではありません。これは、対象読者をよく知っている人々が行う必要がある製品管理の選択です。


プログラミング言語を見る前に、どのファイルシステムが大文字と小文字を区別するかを考えてください。WindowsのFAT / NTFSとMacOS XのHFS +はどちらも大文字と小文字を区別しませんが、UnixのUFS / NFSは大文字と小文字を区別します。パワーユーザーは、ファイル/変数をわずかな違いで区別する機能を好みますが、ほとんどのユーザーは物事をより直感的に保つことを好みます。Avnerが言うように、違いは製品管理の選択です。
マイケルショップシン

4
それはスクリプト言語であるため、簡単です-大文字と小文字を区別しない方法があります。大文字と小文字を区別する理由 答えが「CやJavaのようになる」場合、それは本当に正当な理由ですか?
ベン

15
@Ben Python、Ruby、bash、Lua、およびPerlは、大文字と小文字を区別する非常に一般的なスクリプト言語の例です。大文字と小文字を区別しない言語には、DelphiやSQLなどのエンタープライズ言語が含まれます(カウントする場合はCOBOL IIRCも含まれます)。なぜそれがスクリプト言語にとって簡単なのか、そしてなぜ世界最大のスクリプト言語の設計者が意見が違うのですか?

2
スクリプト言語であるため、簡単なことではありません。関連する質問は、スクリプトを実行しているのは誰で、彼らにとって最良の選択は何かということです。(おそらく一貫しているべきだと言います。キーワードの大文字と小文字が区別されない場合は、識別子の大文字と小文字を区別しないでください ...)
comingstorm

@delnan大文字と小文字を区別する機能が組み込まれているOSを対象とするスクリプト言語でも大文字と小文字を区別することは論理的な選択だと思います。
Artemix

16

実装がどれほど簡単か難しいかではなく、提示したいユーザーエクスペリエンスに基づいて決定する必要があります。

ユーザーが大文字と小文字を区別しにくくする場合は、それを実装する必要があります。

ポイントとして、SQLは大文字と小文字を区別しません。これにより、インタラクティブな設定で非常に使いやすくなります。

これを見てする別の方法があるが、これまでとの違いになりますkeywordし、Keywordあなたの言語で、この差は、ユーザにとって意味でしょうか?スクリプト言語の場合、答えは「いいえ」です。


3
「この違いはユーザーにとって意味がありますか」に対する+1。ユーザーは何よりも重要です。
ベン

大文字と小文字が区別されないため、対話設定でSQLを使用する方が簡単なのはなぜですか?Caps Lockを誤ってオンにして気付かないことがあるからですか?
カズ

@Kaz-かなり。
ChrisF

11

プログラミング言語は、大文字と小文字を区別する期間にする必要があります。人々はこれに非常に簡単に調整できます。ほとんど小文字で作業し、既存のAPIで大文字と小文字が混在する識別子またはすべて大文字の識別子に注意する必要があります。

言語の大文字と小文字を区別しないようにすることはかつて明白に思えました。これは、すべてのコンピューティングシステムとそのI / Oデバイス(キーボード、プリンター、ディスプレイデバイス)で小文字が利用可能でなかったためです。プログラミング言語の実装では、大文字で記述されたプログラムのみを表示または印刷できるため、受け入れなければなりませんでした。そして、そのために彼らは、上ケースを受け入れるようにするので、ケース・小文字を区別しないでなければならなかった下部ケースを拒否すると同時に手段で大文字と小文字を区別すること。小文字はプログラマーが望んでいたものでしたが、常に持つことはできませんでした。大文字で叫んだプログラムを実際に使用したい人はいませんでした。それは単なるハードウェアの制限でした。

しばらくの間、端末でケースの折りたたみを行うことさえ一般的でした。端末が大文字しか表示できないが、大文字と小文字をサポートするコンピューティングシステムにログインする必要がある場合、端末は小文字を大文字に変換します。これはずっと前だと思いますか?「Apple IIのように、Apple II Plusには小文字の機能はありませんでした。」(http://en.wikipedia.org/wiki/Apple_II_Plus)初期のAppleコンピューターのユーザーが大文字と小文字が混在するBBSにダイヤルインすると、ターミナルエミュレーター(またはホスト)はすべてを大文字に変換する必要がありました。当時は、すべて大文字で書かれたメッセージが掲示板で一般的でした。この機能は、LinuxカーネルなどのUnixライクなオペレーティングシステムで引き続き使用されています。たとえばstty olcuc、シェルプロンプトでを入力します。Unix ttyのライン制御では、出力で小文字を大文字にマッピングでき、入力で大文字を小文字にマッピングできます。これにより、小文字を持たない端末で、小文字のプログラミング言語で作業できます。

大文字と小文字を区別しないことは、過去のコンピューター時代の時代遅れの概念であり、国際化されたコンピューティングの現代世界ではあまりうまく機能しません。それを他の言語に拡張しますか?フランス語はどうですか:Èとèは同等だと思いますか?それとも日本人?ファイルとふぁいるが同じ識別子であるように、ひらがなとカタカナは単なるケースであると考えていますか?このような愚行をサポートすると、字句アナライザーが大幅に複雑になり、Unicodeスペース全体の大文字小文字の等価マップが必要になります。

数学では大文字と小文字が区別されることに注意してください。たとえば、大文字のシグマは合計を表し、小文字のシグマは標準偏差などの別の何かを表します。これは、同じ式で問題なく作成できます。(プログラミング言語はΣとσを同等にしますか?)

英語の正書法は敏感です。たとえば、多くの固有名詞は、通常の名詞またはその他の品詞に対応します。「may」は動詞ですが、「May」は月、または女性の名前です。さらに、頭字語または略語が小文字で書かれている場合、混乱を招く可能性があります。SATは学力適性検査の略で、「sat」は「sit」の過去分詞です。知的な人々は細部に注意を払い、適切に大文字を使います。

基本的に、1985年以降に作成された大文字と小文字を区別しない新しいプログラミング言語は、電子メールや投稿を2回目の発想なしで発言する人のためのものです。

あなたの言語が別の言語のコードを翻訳するためのコード生成ターゲットとして使用され、その他の言語が大文字と小文字を区別する場合はどうなりますか?どうにかしてすべての名前を変換して区別をキャプチャする必要があります。(つまり、これは技術的な決定ではなく、対象となる視聴者の感情的な好みの問題だけであると断言するのはばかげています。)

ファイルが別のオペレーティングシステムからインポートされるときに、Windowsでのケース処理によって引き起こされる迷惑な問題を見てください。これは技術的な問題です。大文字と小文字を区別するファイルシステムには、大文字と小文字を区別しないファイルシステムにはない外部データに関する問題があります。

Common Lispは理想的なアプローチを採用しています。シンボル名は大文字と小文字が区別されますが、トークンが読み取られると、大文字に変換されます。この手段そのトークンfoofOOFOOおよびFooすべての意味同じ記号:名前文字列として保存されているシンボル"FOO"。さらに、この動作はデフォルトの読み取りテーブル設定にすぎません。読者は、大文字を小文字に折り畳んだり、大文字を反転したり、保存したりすることができます。最後の2つの選択により、大文字と小文字が区別される方言が生成されます。これにより、ユーザーは最大限の柔軟性を得ることができます。


1
「フランス語はどうですか:Èとèは同等だと思いますか?それとも日本語ですか?ひらがなとカタカナは単なる例だと思いますか。したがって、ファイルとふぁいるは同じ識別子です。」答えは「はい」であり、他の人の文化が愚かだと思う場合にのみ愚かです。
ベン

さて、あなたの小さな頭が爆発するための準備をしてください。他の人の文化は(世界の現在の出来事に関しては特定の例外を除いて)愚かではないと思いますが、同時にファイルとプログラミング言語で同じ識別子としてふぁいる。
カズ

@Ben言及されている文化を知っていますか?Kazが何について話しているか知っていれば、彼を愚か者と呼ぶことはないでしょう。
デビッドカウデン

1
@DavidCowden、私は決してカズ・バカとは呼ばない。識別子を使用する場合は常に同じケースを使用する必要があることに同意します。アクセントの違いが大文字と小文字の違いよりも重要であるように、かなの違いは大文字と小文字の違いよりも重要です。ただし、大文字と小文字のみが異なる2つの識別子を持つのはばかげているように、仮名またはアクセントだけが異なる2つの識別子を持つのもばかげています。仮名またはアクセントだけが異なる識別子を同じように扱うよりも禁止する方が理にかなっていますが、異なるものとして扱うことはほとんど意味がありません。
ベン

大文字と小文字、アクセント、または仮名などが異なるだけの識別子を禁止する場合、それらが同じであることを暗黙のうちに認めます(ただし、一貫性のみを主張します)。そのようなものを追放せず、コーディング規約の問題となるようにユーザーに任せる方が良いでしょう。良いアイデアは、プログラムがそれを主張できる宣言型システムを持っているだろうfooFoo同義語として、または別個のものとして扱われるべきです。このような宣言がないと、両方のエラーが発生します。また、宣言はまで拡張されないためFOOFOO引き続き禁止されています。追加する必要があります。
カズ

6

実際の決定要因は、同じ名前の複数のものをどのくらいの頻度で作成するかです。という名前の列が必要になることはあまりないため、SQLでは大文字と小文字を区別しませんSELECT。Javaでは他のすべての行がのようObject object = new Object()に見えるため、同じ名前でクラス、インスタンス、およびコンストラクターを参照するため、面倒です。

つまり、大文字と小文字の区別は名前のオーバーロードに最も役立ち、オーバーロードは大規模で複雑なプロジェクトで主に役立ちます。スクリプト言語など、よりまれに使用する場合は、大文字と小文字を区別しないため、プログラミングがはるかに簡単になります。

識別子が大文字と小文字を区別しないだけでなく、空白も区別しないルール言語を一度作成しました。また、同じ識別子を参照するエイリアスを作成することもできました。たとえば、ProgrammersStackExchange、プログラマースタックエクスチェンジ、およびPSEはすべて、まったく同じシンボルに解決され、互換的に使用できます。

ドメインには同じものを参照する非常によく知られた多くの方法があり、名前の競合はまれだったため、非常にうまく機能した私のドメインにとって。ある名前を使用してクエリを入力し、その結果に別の名前を使用しても驚くことはありません。言語サポートにより、ドメインとプログラミング言語間の翻訳が非常に簡単になりました。ただし、変数へのすべての参照を見つけるなど、特定のタスクが難しくなりました。ありがたいことに、私の場合、このような状況はめったに起こらないか、支援するツールサポートを構築するのはかなり簡単でしたが、自分の状況を考慮する必要があります。


名前にキーワードを再利用したいのは問題ではないと思います。SQL、Visual Basic、およびC#(前者は大文字と小文字を区別せず、後者は大文字と小文字を区別しない)はどちらも、SQL、VB.net、およびC#で識別子を引用する方法"double quotes"(または[brackets]MS SQL)を許可することでこれを解決します。[brackets]@atsign
Random832

「どれくらいの頻度で同じ名前の複数のものを持ちたいと思うでしょうか。」大文字と小文字を区別しないということは、大文字と小文字を区別しない名前を明確にするために、オーバーヘッドを追加する必要があることを意味します(たとえば、接頭辞としてのプロパティ名と区別するための 'member'の接頭辞としてのmなど)。
-nwahmaet

オブジェクトオブジェクトに名前を付けるのはなぜですか?それは単にトラブルを求めているだけです。
ベン

@Ben、コンテナオブジェクトを実装している場合、addメソッドのパラメータを他に何と呼びますか?
ウィンストンイーバート

@WinstonEwert、私はそれを呼ぶでしょうo。それは単なるパラメータ名であるため、実際に何を呼ぶかは重要ではありません。攻撃的または違法ではないか、混乱を引き起こしやすい限り。
ベン

5

スクリプト言語で大文字と小文字が区別されると仮定します。変数名またはキーワードに間違った大文字と小文字を使用してタイプミスをしたかどうかをユーザーに知らせるコンパイラまたは構文チェッカーを作成しますか?そうでない場合、言語の大文字と小文字を区別しないようにするための非常に強力な議論になります。


良い点ですが、答えではありません。

@delnan:おそらく、Avner Shahar-Kashtan(私が+1を与えた)の回答ほどではないかもしれませんが、おそらくOPに役立つでしょう。
Doc Brown

3
ええ、コメントとして参考になります;)

大文字と小文字の区別についてユーザーに警告するのは良いアイデアだと言うように言い換えると、答えになるでしょうか?私には、それが想定されていました。
ジェフ

いいえ、それは答えとしてフレーズされた質問にほとんど答えていない小さな点でしょう。私見では。

4

オンザフライで変数を宣言できますか?もしそうなら、私は大文字と小文字を区別しないと主張します。

ATypo = 42; 

とは対照的に

Atypo = 42; 

デバッグ時間を不必要に要求するのは、2つのステートメントを同等にすることで作業が楽になるからです。


2
私見では、読みやすくなります。結局、文を開始するとき、最初の単語を大文字にしますが、その意味を変えないでください。コードにも同じことが必要です!
NWS

2
@delnan-あなたは読みやすくしたい、それは同じアルファベットを使用しています、大文字と小文字を変えるとなぜ意味が変わるのですか?
NWS

1
アメリカ合衆国最高裁判所によると、@ delnanは、コンピューター言語はコンピューターと人間の両方が理解できるように設計された表現力のある言語です(コンピューターコードは最初の修正によって保護されていると判断した場合)。彼らは英語ではありませんが、彼らは言語であり、「BOB」は「ボブ」とは異なると言うことは「ボブ」は人間が使用することを意図した言語ではばかげています。はい、私たちはそれに対処することを学ぶことができますが、それは全く言い訳にはなりません。
ベン

2
@Ben類推してみましょう。数学表記は、プログラミング言語とは異なり、人間専用です。古代のコンピューターの歴史的遺物である大文字小文字の区別がないという通常の議論は、ここでは当てはまりません。それでも、数学者がそれを主張しaA交換可能であるべきだとは思わない。例外なく、一貫して大文字と小文字を区別します。たとえば、一部のコンテキストでは、大文字はセットに使用され、小文字はセットメンバーに使用されます。別の例は、電気工学で発生します。小文字は時間に依存し、大文字は時間に依存しません

2
@Ben ...これらおよび他のコンテキストでは、大文字と小文字の区別が制限事項とは見なされません。私は、他の手段の中でも大文字を使用して意味を伝える規則を通じて、より生産的な方法で使用される冗長なシンボルを解放するものと考えています。簡潔なドメイン固有の表記法のように、これは素人には馴染みのないように見えるかもしれませんが、専門家はより良く、より迅速にコミュニケーションをとることができます。

2

FORTRAN、BASIC、SQLなどの言語の例では、大文字と小文字が区別されないことを示しています。

FORTRANとSQL(およびCOBOL)が大文字と小文字を区別しない理由は、通常、通常の文字セットに大文字しか含まれていないマシンで使用するために設計されたためです。これらの言語の大文字小文字の区別は、(少なくとも)言語設計の選択というよりも歴史的な成果物です。

大文字と小文字を区別しないことを主張することもできますが、反対に、大文字と小文字を区別することでコードを読みやすくすることができます。


4
「Xは良い、Yは関連するZを強制するので、YはXを強制することで良い」という議論にうんざりしている(例えば、健全なコーディングスタイル/ Python /オフサイドルール)。優れたプログラマーは、たとえ許可されていても、読みやすさに重大な影響を与えるような方法で大文字を使用しません。大文字と小文字を区別しない環境では、大文字と小文字を区別せずに大文字を使用します(そして、他の100件の残虐行為を犯します)。悪いプログラマーは、どの言語でもFortranを書くことができます。(免責事項:私は大文字と小文字の区別が大好きです!)

何だと思う。自分が独自のスタイルルールを開発できるほど優れたプログラマーだと思う悪いプログラマーによって書かれたコードを読まなければならないのはうんざりです。(免責事項:私はFORTRANとCOBOLの時代にプログラミングを学び、その時代の大文字と小文字の区別や他の言語の残虐行為を嫌いました。)
Stephen C

大文字と小文字を区別しない言語での大文字の使用は、非感受性の濫用とみなされます。
カズ

@Kaz-erm ... 100万人のSQLプログラマーにそれを伝えてみてください。
スティーブンC 14

1

大文字と小文字の区別は有害と見なされます。

人生は大文字と小文字を区別せず、ユーザーもプログラマーでもありません。

大文字と小文字を区別する言語は、大文字と小文字を区別しない比較が困難である制約システムの歴史的な事故です。このハンディキャップはもはや存在しないため、大文字と小文字を区別するコンピューターシステムを再び作成する理由はありません。

コンピューターの利便性をユーザーの利便性よりも優先するため、大文字と小文字の区別は悪であると言えます。

(関連、私は数年前を思い出します、彼の名前がす​​べて大文字であるために、一部の天才は彼のクレジットカード請求書の支払いを拒否しましたが、彼はそれを大文字と小文字を混ぜて綴りました。有効な支払い要求。裁判官は議論を当然のように扱った。


大文字と小文字を区別しても、コンピューターの利便性はユーザーの利便性より優先されません。大文字と小文字を区別する言語と大文字と小文字を区別しない言語を実装しましたが、唯一の違いはいくつかの場所での追加の関数呼び出しです。また、他の答えは -sensitivityの場合は、文字セットが限られているために歴史的なアーティファクトであると言います-あなたの理論と矛盾しませんか?

Unicodeは、これを他の領域全体に配置します。
-DeadMG

3
そのブログは、PythonやPHPでのみCが悪い理由を正当化せず、OPは大文字と小文字を区別する識別子についてではなく、キーワードについてのみ語っています。そのリンクは、その主題について絶対に何も言うことはありません。
-DeadMG

1
@Benエディターは、言語の規則に関係なく、入力時に大文字と小文字を修正できます(そして修正します)。それでも抜けるエラーを許可すること(たとえば、手の込んだエディターが手元にないため)は役に立ちません。それはそれを修正するためにそれについて不平を言うのではなく、周りに問題を残すことを意味します。さらに、一貫した大文字を使用すると、大文字と小文字が異なる複数の識別子を持つことができますが、コンテキストと大文字のおかげで、曖昧さなしに非常に異なるものを示し、人間にとって簡単に解析できます。

2
@Ben:一部の言語では、非常に厳密な辞書編集の習慣や規則さえあります。CおよびC ++では、すべて大文字はマクロであり、混乱を防ぐためにマクロはすべて大文字のままにする必要があります。一部の言語では、大文字の有無にかかわらず記号の意味が異なります(大文字と小文字が対応していないさまざまな言語でどの程度うまく機能するかはわかりません)。そのようなルールや規則がある場合、異なる名前空間の効果を得ることができ、異なる名前空間で識別子名を複製することはしばしば機能します。
デビッドソーンリー

1

私の個人的な経験から、大文字と小文字を区別する言語と区別しない言語の間に大きな違いはありません。

さらに重要なことは、プログラマーがコード内に保持する必要がある命名規則と構造規則であり、コンパイラーまたはパーサーはそれをチェックしません。ある種の規則に固執すれば、適切な名前を簡単に知ることができ(変数checkOutまたはCheckOutに名前を付けたとは思わないでしょう)、コードはおそらく大文字小文字を区別し、読みやすくなります。

同じ意味でCheckOutとcheckOutとcheckoutとcHeCkOuTとCHECKOUTを使用しないでください。それは可読性を損ない、その種のコードの理解をより苦痛に満ちたものにします(しかし、コードの可読性を破壊するためにできるもっと悪いことがあります)。

ある種のルールを使用すると、一目でわかるようになります。

CheckOut.getInstance()-checkOut.calculate()と呼ばれるクラスの静的メソッド-変数または_checkOut.calculate()と呼ばれるパブリックフィールドに保持されるオブジェクトのメソッド-CHECKOUTと呼ばれるプライベートフィールドに保持されるオブジェクトのメソッド-それは最終的な静的または定数フィールド/変数です

他のファイルやファイルの一部をチェックアウトすることなく。コードの読み取りが速くなります。

Java、PHP、アクションスクリプト、JavaScript、C ++など、よく使用する言語で同様のルールを使用している開発者がかなりいます。

まれに、大文字と小文字を区別しないことに怒っている場合があります。たとえば、クラス名にCheckOutを使用し、変数にcheckOutを使用したい場合で、互いに衝突するため使用できない場合です。しかし、大文字と小文字を区別し、自分の命名規則でそれを使用することに慣れているのは、プログラマーの問題です。大文字と小文字を区別しない言語で、標準のプレフィックスまたはポストフィックスを使用したルールを作成できます(VBでプログラミングはしませんが、多くのVBプログラマーがこの種の命名規則を持っていることは知っています)。

ほとんどの開発者は大文字と小文字を区別する言語を使用し、ほとんどの開発者は大文字と小文字を区別する命名規則を使用しているため、大文字と小文字を区別するようにしたいので、大文字と小文字を区別する必要がありますなんらかの変更をせずにルールを守ることができます。しかし、それはむしろ宗教的な議論です-客観的なものではありません(本当の欠点や大文字と小文字の区別の良い側面に基づいていません)大文字と小文字が区別される場合でも、大きな違いはありません)。


1

プログラミング言語では大文字と小文字を区別しないでください。

最近の多くの言語で大文字と小文字が区別される主な理由は、単にカーゴカルト言語の設計です。そして、他の多くのものと同様に、Cはこれを明らかに間違っていました。

これは、実際にはCとUNIXの背後にある推進哲学の一部です。実装が簡単な悪いソリューションと実装が難しい良いソリューションのどちらかを選択できる場合は、悪いソリューションを選択し、混乱を回避する負担をかけますユーザー。 これはスナークのように聞こえるかもしれませんが、それは絶対に真実です。「最悪の方が良い原理」として知られ、過去数十年にわたってCおよびC ++が原因で数十億ドル相当の損害を直接引き起こし、グリッチで安全でないソフトウェアを書くのが非常に簡単になりました。

言語の大文字と小文字を区別しないようにするのは間違いなく簡単です。大文字と小文字を区別せずにすべてが一致することを確認するための特別な作業を行うために、レクサー、パーサー、およびシンボルテーブルは必要ありません。ただし、次の2つの理由から、これも悪い考えです。

  • 最初に、特にスクリプト言語を作成する場合、ある場所では「myObject」、別の場所では「MyObject」と呼ぶ単純なタイプミスがあります。 、実行時エラーにはなりません。(これは、Pythonのように、これが間違っているスクリプト言語の主要な問題点として悪名高い。)
  • 第二には、大文字と小文字の区別ができない場合の感度の手段を持っていない虐待され、同じ単語を持っているだけで総額を変更することにより、同じスコープ内の2つの異なるものを参照してください。C環境でWindowsコードを操作しなければならず、のようHWND hwnd;ない宣言に遭遇したことがあるなら、私が話していることを正確に知ることができます。そのように書く人は連れ出して撃たれるべきであり、言語の大文字と小文字を区別しないようにすることで、大文字と小文字の区別の乱用がコードに侵入するのを防ぎます。

それで、それを正しくするために余分な努力をしてください。結果として得られるコードは、よりクリーンで読みやすく、バグが少なくなり、ユーザーの生産性が向上します。それがプログラミング言語の究極の目標ではありませんか?


プログラミング言語には、実行前にこのタイプのエラーをキャッチするためのレキシカルスコープが必要です(それ以外の場合は非常に動的です)。Common Lispは非常に動的な言語ですが、レキシカルバインディングを持たず、動的変数としてグローバルに定義されていない変数を使用した場合、コンパイラーはそれを知らせます。大文字と小文字を区別しないことに頼ることはできません。なぜなら、大文字と小文字の違いだけでなく、すべてのタイプミスをキャッチしたいからです。
カズ

私は気にしませんHWND hwnd;。これは、大文字と小文字の区別がうまく機能する例です。ただし、すべてのキャップタイプの「インディアンヒル」の表記法はばかげています。hwnd_t hwndはるかに優れています。それはすべてのせいだと思うFILE。昔々、バージョン6 UnixのI / Oライブラリヘッダーファイルには次が含まれていました#define FILE struct _iobuf。それはマクロだったので、すべて大文字でした。ANSI Cでtypedefになったとき、すべて大文字のスペルが保持されていました。そして、これを模倣することにより、ALL_CAPS_TYPE規則が発明され、ベルラボの「インディアンヒルスタイルガイド」で体系化されたと思います。(元のスタイル!)
Kaz

現在、「Indian Hill Style Guide」をグーグルで検索すると、ほとんどすべての大文字のtypedef名を完全に後悔しているBell Labsの1990年のドキュメントへの参照が見つかります。しかし、元のバージョンはのようなものを推奨していましたtypedef struct node *NODE。Microsoftがこれを取り上げたに違いないはずです。だから、ベル研究所のせいだHWND
カズ

1

「大文字と小文字を区別してコードを読みやすくする」と誰かが言ったとは信じられません。

確かにそうではありません!Company and company(public variable Company、matched private variable company)と呼ばれる変数を同僚の肩越しに調べましたが、フォントと色の選択により、2つの違いを区別することは非常に困難です-隣り合っていても。

正しいステートメントは、「大文字と小文字を混在させるとコードが読みやすくなります」である必要があります。それははるかに明白な真実です。たとえば、companynameではなくCompanyNameおよびCompanyAddressという変数です。しかし、私が知っている言語では、小文字の変数名しか使用できません。

私が知っている最も狂った慣習は、「大文字のパブリック、小文字のプライベート」です。それは単にトラブルを求めているだけです!

私のエラーの受け止め方は、「静かに失敗したが成功したように見えるのではなく、何かがうるさく、できるだけ早く失敗する方が良い」です。そして、コンパイル時間よりも早くありません。

大文字を使用するつもりで誤って小文字の変数を使用した場合、同じクラス内でそれを参照していると、しばしばコンパイルされます。したがって、コンパイル時と実行時の両方で成功したように見えても、微妙に間違ったことをしている可能性があり、おそらくそれを長時間検出しない可能性があります。何か問題があることを検出したとき

プライベート変数に接尾辞が付いている規則を使用することをお勧めします-例:Company public variable、CompanyP private variable。誤って2つを混同する人はいません。それらはインテリセンスで一緒に表示されます。

これは、接頭辞付きのプライベート変数pCompanyがインテリセネの適切な場所に表示されないハンガリーの表記法に対する人々の反論とは対照的です。

この規則には、恐ろしい大文字/小文字の規則のすべての利点があり、欠点はありません。

私の意見では、人々が変数を区別するために大文字と小文字の区別に訴える必要性を感じているという事実は、想像力の欠如と常識の欠如の両方を示しています。または、悲しいことに、人間の羊は慣習に従う習慣が好きです。「それが常に行われている方法だから」

たとえ関連していても、作業するものを明確に、そして明らかに異なるものにします!!


1
わかりましたcompanyName == companyname。それは理にかなっているようですが、ロケールをどのように処理しますか?世界のさまざまな部分でプログラムをコンパイルすると、PHPのように異なるセマンティクスが発生しますか?完全に英語中心であり、識別子でASCII印刷可能セットのみをサポートしますか?大文字と小文字を区別しないことは、非常にわずかな余分なゲインのための非常に複雑なことです。
Phoshi

0

非常に正当な理由がない限り、大文字と小文字を区別しないようにしてください。たとえば、Unicodeでの大文字と小文字の比較を処理するのは面倒です。古い言語の大文字と小文字の区別(またはその欠如)は、そのニーズが非常に異なっていたため、重要ではありません。

この時代のプログラマは、大文字と小文字を区別することを期待しています。


1
ケース比較はそれほど難しくありません。識別子を分解するだけです。É= E '= e' =é。覚えておいてください、あなたはまだ選択することができに従うべき規則の場合、英語が合理的な選択です。(キーワードも英語である場合は確か)
-MSalters

2
はい、それらはUnicodeスペース全体で「それほど難しい」ものです。
カズ

1
「この時代のプログラマーは大文字と小文字を区別することを期待していますか?」彼らがストックホルム症候群にかかっているのは、Cファミリーとの関係が長すぎたためです。
メイソンウィーラー

さて、Cファミリは、言語とコードの非常に大きな割合を占めるだけです。それに、私はそれは良いことだと思うし、あなたのコメントはそうではない理由を提案していない。
DeadMG

0

大文字と小文字の区別により、コードが読みやすくなり、プログラミングが簡単になります。

  • 人々は大文字と小文字の適切な使用が読みやすいと感じます

  • 大文字と小文字が異なる同じ単語が関連するものを参照できるように、CamelCaseを許可/奨励Car car; します。したがって、指定carされた変数はtypeで作成されCarます。

  • ALL_CAPS_WITH_UNDERSCORESは、多くの言語の規則により定数を示します

  • all_lower_with_underscoresは、メンバー変数などに使用できます。

  • 最新のプログラミングツール(ソース管理、エディター、diff、grepなど)はすべて、大文字と小文字を区別するように設計されています。大文字と小文字を区別しない言語を作成すると、プログラマーが当たり前のツールで問題を抱えることになります。

  • 言語が解釈される場合、大文字と小文字を区別しないコードの解析によりパフォーマンスが低下する可能性があります。

  • 英語以外の文字はどうですか?コプト語、中国語、ヒンディー語を決してサポートしないことに決めましたか?言語をすべてデフォルトのUTF-8にし、大文字または小文字が同等でない文字を持つ一部の言語をサポートすることを強くお勧めします。キーワードでこれらの文字を使用することはありませんが、さまざまなツールで大文字と小文字の区別をオフにし始めると(たとえば、ファイル内の物を見つけるために)、シュールで恐らく不快な体験に遭遇します。

利点は何ですか?あなたが言及する3つの言語は、1970年代以前のものです。これを行う現代言語はありません。

一方、エンドユーザーを実際に幸せにするものは、世界に少しの光をもたらします。それが本当にユーザーの幸福に影響するのであれば、あなたはそれをしなければなりません。

エンドユーザー向けに本当にシンプルにしたい場合は、大文字と小文字を区別/区別しないよりもうまくやることができます- スクラッチを見てください!数少ない漫画の猫とよりビジネスに優しい色で、私が今まで見た中で最も親しみやすい言語について知っています。あなたは何も書く必要はありません!ちょっとした考え。


1
「大文字と小文字を区別しないことは悪夢です」と言いたいと思います。日本人には大文字と小文字があります。ひらがなとカタカナは、異なる種類の場合です。Aとaが特定の方法で「同じ」であるように、AとAも同じです。カタカナは、強調のために使用されることもあります。ローマ字を使用する言語でも同様に大文字です。言うまでもなく、プログラミング言語の識別子でひらがなとカタカナを同じものとして扱うのは馬鹿げたことでしょう。
カズ

ありがとう-それは豊かです!投稿を少し整理しました。
グレンペターソン

1
Car car;大文字と小文字の区別に対する最良の引数の1つです。これは見苦しいため、言語で大文字と小文字が区別されない場合は、大文字と小文字を区別することはできません。
メイソンウィーラー

1
ですCar myCar;ので、より良いですか?
グレンペターソン

@Mason Wheeler:言語構成要素を悪用できないものに制限すると、多くのことができなくなりますよね?大文字と小文字の区別を悪用する人への私のアドバイスは「しない」です。
デビッドソーンリー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.