なぜ多くの言語での大文字と小文字が区別?
-
20-08-2019 - |
質問
なぜ多くの言語での大文字と小文字が区別?
では単なる物質の遺産?C++では大文字と小文字は区別がC、Java大文字-小文字を区別でC++をうにはどうすればよいのですか。やはり、より実践的な理由です。
解決
のUnixます。
のUnixは大文字と小文字を区別した、とUnix上で使用するために開発されたので、多くのプログラミング言語では、大文字と小文字を区別した。
コンピュータは寛大ではありません - 大文字が小文字と同じものではありません、彼らは完全に異なっています。など、それは「寛容」であることをコンパイラやコンピュータを強制的に努力の価値として高価見られていなかったし、サイクル、RAMとを処理する際、バック、人々は物事が動作するように取得しようとしました。
Visual Basicののようなものが来るまでケースの鈍感さが本当に何か便利になっていませんでしたどのようにお知らせ沿って - 企業がプログラムに質量を得ることが彼らの一番下の行のために良いものだったことをコンセプトに投資を取得し始めたら(Windows上で複数のプログラムがあるかどうつまり、Microsoftはより多くのお金を作る)言語は親しみやすい、より寛容であることを始めました。
他のヒント
私は「その言語の著者(s)は、それが良いことな方法だと思ったので、」あなたはより良い答えを得るだろうとは思いません。個人的に、私は彼らが正しいと思います。私は、同じソースファイル内の任意の場所にこれらの行を見つけることが嫌い(と同じオブジェクト+メソッドを参照してください)...
と思いますSomeObject.SomeMethod();
...
SOMEOBJECT.SOMEMETHOD();
...
someObject.someMethod();
...
sOmEoBjEcT.sOmEmEtHoD();
私は誰もがこれを見て幸せになるとは思わない...
を検討する一つ興味深いのは、英語でも大文字と小文字が区別されるということです。 (私はこれが最も自然言語のための真である疑いがあるが、それはうまくすべてに当てはまるないかもしれません。)
との大きな違いは、(私は読書の町の近く、とにかく、住んでいる場所)あります
私は読書が好きです。
と
私は読書が好きでます。
多くの人がをしながら、同様に、が間違って大文字に行うには、あなたは通常、そのような書き込みが考えられているという意味ではありませんので、何を意味するかを理解することができます。の正しいの。それは私が当然の権利自分のすべてを、取得言っているのではないこの種のもの、に来るとき、私はこだわるんです。私は、プログラミング言語の大文字と小文字の区別の継承の一部だかどうかわからないが、私はそれがかもしれ疑います。
プログラミング言語のための大文字と小文字の区別の1つの明確な利点は、テキストは、文化ならびに鈍感になることです。それは十分に時折テキストエンコーディングは、ソースファイルに使用されるコンパイラに綴るする必要が悪いです - 指定せているの文化のそれはさらに悪化するだろうではあります:(
これは、開発者のための言語の構文仕様のための両方、実際には非常に実用的です:大文字/小文字の区別は、識別子の命名に表現の多くを追加します。
。言語構文の観点からは、(例えばJavaクラス名用)、小文字または大文字で開始する特定の識別子を強制することができます。それはきれいな構文を維持するのに役立ちます簡単に、ひいてはを解析なります。
ビューの開発者の観点から、これは理解することが、あなたのコードが明確かつ容易になり、便利なコーディング規則の膨大な数を可能にします。
私の推測では、感度が名前空間を拡大している場合です。素敵なトリックのような
MyClass myClass;
大文字と小文字を区別しないコンパイラでは不可能であろう。
ケース折りたたみは英語で(すべての文字<128用)のみに簡単です。ドイツのhref="http://en.wikipedia.org/wiki/%C3%9F" rel="noreferrer"> SZまたは「鋭いS」(SS) ISO 8859-1文字セットでの変異体。それだけで議論の程度十年後にはUnicodeの1を受信する (そして今、すべてのフォントは...更新する必要があります)。漢字やひらがな(日本のアルファベット)はさらに低いケースを知りません。
でも、ユニコードのこの時代に、この混乱を避けるために、とのUnicodeの識別子を折る場合を許可するように賢明ではありません。
バックの解析と実際に高価であり、それはケースを心配する必要はありませんでした場合、それはコンパイラに有利であったすべての夜を取るコンパイルます。
識別子が彼らのケースを経由してのみユニークだった存在になった後は、それが戻ってすることは非常に困難になりました。多くの開発者はそれを好きで、それを元に戻すに大きな願望があるように思えません。
ExpertSexChange
これは、競合他社のスタックオーバーフローの場になってきているのを読み応答となります。Hmm...と大文字小文字統一例は、意味のサイト名になりました。
これは良い理由を語って大文字と小文字が区別される。少曖昧!曖昧プログラマにとyucky.
大文字と小文字の区別は、命名規則を使用することにより、言語可読性が向上します。あなたが書くことができません。
Person person = new Person("Bill");
コンパイラはクラス名と変数名を区別することができないので、あなたの言語では、大文字と小文字を区別しませんならば。
また、人、人、人、人、人を持つ、すべて同等であるトークンは私に頭痛を与えるだろう。 :)
の資本形 i? I (U+0049) İ (U+0130)?
時価総額はロケールに依存します。
多くの(非プログラミング)言語(ローマ字を使用して、例えば、欧州)は大文字と小文字が区別されますので、これらの言語のネイティブスピーカーは、大文字/小文字の区別を使用することは自然なことです。
プログラミング言語はをすることを非常にアイデアは、は大文字と小文字を区別しないだろう5ビットの文字を使用する前、コンピュータテレタイプ機など初期の世代のハードウェアの制限(に起因する歴史的な成果物でありますコード)ます。
ケース・ブラインドの言語の主張人は区別することができなければなりません。
IAmNowHere
から
IAmNowhere
(のそれは冗談だの; - !)
このスレッドでは、反対の視点のために与えられた正確な理由(私もつもりはないよが、それは約何尋ねるために、彼らは、カエルののボックスとしてのダムとしてのだから。ウッドの木のためにそしてすべてのこと)。
ときFOOBAR = FooBarの= foobarに、あなたはあなたの規則を選択して取得、およびその他のコーダーは、彼らがあなたの好みやないのを共有するかどうかをの同じことを行うことができます。ノー混乱ます。
彼らはまた、別のキャップとはいえ、同じファイル内の同じ名前を持つすべての定数、関数と変数のを持っている天才のストロークを離れて取得することはできません。ここでも、ない混乱。
あなたは、変数のウェブサイトを呼び出して、彼らは彼らのウェブサイトを呼び出し、そしてそのシステムが混乱してしまいますか?どちらかではない簡単にキャッチ、あなたがスキャンしています。
ルックアップとしては、実際にそれをルックアップする前に、小文字に名前を変換するために、そのはるかに処理ですか?独自の時期尚早な最適化を行うと、選択した言語の開発者から、それを期待してポイントを逃すの全体の他のレベルの一つであるされます。
...と、まだ、これらすべての答えは、大文字と小文字の区別は混乱を減らすと言って。 のため息の
多くの人が誤って大文字と小文字を区別しないで信じることを、大文字と小文字を区別した言語であるCommon Lispは、もあります。あなたがリスナーに(car x)
を入力すると、それは、処理のため(CAR X)
に変わります。小文字の名前を持つシンボルを定義することが可能であるが、彼らは|lower-case-symbol|
のようなものでクォートする必要があります。したがって、すべてが同じに動作します(car x)
または(CAR X)
または(Car X)
に入力します。
(フランツLispはリスナーがケースを折るないであろうに、一点、彼らは「現代」の大文字と呼ばれるものを導入にあった、とCLのキーワードは小文字であることでしょう。私はそこに何が起こったのかを知って、それが十分に続くことはありません。)
の文字の大文字普遍的な概念ではありません。 Javaは、Unicodeを使用していますので、あなたは、大文字と小文字を区別しないのJavaを望んでいた場合、あなたのプログラムの意味は、それがでコンパイルされたものを、ロケールに応じて変更することができます。
ほとんどの言語は、それはまた、ロケールに依存するのですおそらくので、あなたが整数リテラルの途中でドットまたはカンマ(またはアポストロフィまたはスペース)を入れることはできません。
から .NET Framework開発者ガイド 大文字表記に、ケース感度ます:
総額のガイドラインが存在します のみに識別子を容易にするために 読みと認識しています。筐体にすることはできません 名前を回避する手段として使用 ライブラリ要素間の衝突。
すべてのプログラミングと仮定しないでください。 言語は大文字と小文字が区別されます。彼らです ではありません。名前はケースによって異なることができません 一人でます。
あなたはCAPSを持っていない場合はどのように大声で叫ぶん! AHHH!
あなたは表情豊かでなければなりません。しかし、正直なところでは、世界のすべての人々の、プログラミングロジックを扱う人は、最初の違いは、実際の違いであることを主張するだろう。
大文字と小文字の区別は本当にケースの一貫性を助けていません。
Foo.Bar
foo.Bar
fOO.bAR
容易エディタによって自動的に固定することができ、大文字と小文字を区別しない言語で。 それは法的かもしれとしてそれを固定大文字小文字を区別の言語では困難です。エディタが最初foo.BarとfOO.bARが存在する場合ckeck必要があり、また、あなたがむしろ(fooはFOOに異なっているとして)変数を宣言するのを忘れるよりも、間違った場合に入力したことを推測しています。
多くは総額のいくつかの形式は、例えば、同じものを参照することは悪いだろうと述べている:ます。
person
perSoN
PERSON
これらは、すべてのコード内の別のオブジェクトに言及場合は、本当に悪いだろうことです。あなたはすべての異なるものを参照する変数の人、人とPERSONを持っている場合は、問題を持っています。
私は大文字と小文字の区別をサポートしている見てきたすべての例が悪い、undescriptiveコードを書くための欲求に基づいています。例えば「MyDateに該当」引数対「日付」 - これらは両方ともの均等undescriptive のと悪い習慣を。たbirthDate、HIREDATE、invoiceDate、どんな:グッドプラクティスは、それが実際に何であるか、それに名前を付けることです。そして、彼らの権利念頭に置いて、誰のようなコードを記述するとよいでしょう。
Public Class Person
Public Shared ReadOnly PERSON As Person
End Class
Public Class Employee
Public person As Person = person.PERSON
End Class
驚いたことに、これはの敏感なVB.Netのコード内の完全に有効な場合です。大文字と小文字の区別は、あなたがさらに甚だしく良いプログラミングの練習に背くことを可能にするという考えは、それに対してではなく、そのための引数です。
多くの人がemployee_social_security_numberとしてemployeeSocailSecurityNumberが同じように読める見つけて、それが短いため。
私が持つと思う大文字と小文字を区別した言語が悪いコードを書くために人々を奨励しています。
Const SHOESIZE = 9
Class ShoeSize
ShoeSize.shoesize = SHOESIZE
call shoeSize(ShoeSize);
function shoeSize(SHOEsize)
{
int ShoeSIZE = 10
return ShoeSize
}
当たり前。あなたは、異なる目的のために「SHOESIZE」より良い変数名を考えることができませんでしたか?そこには、使用することができます億異なる単語がありますが、あなただけの代わりにSHOESIZEを使用して維持するために選ぶのか?
やきも加減にや)で使用のシングル文字("a"または"b"、"c")のためのすべてのクラス、変数、関数、およびます。
が なぜ うにしたい。
使用の名前があっても無視されるのでご注意, は:
function a(a)
{
int a = a.a;
return a
}
言語は大文字と小文字が区別され、別の理由があります。 IDは、ハッシュテーブルに格納されてもよいし、ハッシュ・テーブルは、ケースが異なるため、異なるハッシュを与える機能をハッシュに依存しています。そして、ハッシュ関数を介してそれらを実行する前に、すべて大文字またはすべて下にすべてのIDを変換すると便利ではないかもしれません。私は自分のコンパイラを書いていたとき、私はこの問題に出くわしました。これは、大文字と小文字を区別としての私の言語を宣言するために(lazier)はるかに簡単だった。
私はこのスレッド全体を読んだことがあります。私は、大文字と小文字の区別に値を発見したと報告したものは(定義によって大文字と小文字を区別しません)真の高レベル言語でプログラムしたことがないと信じていなければなりません。 K&R Cが中間レベルであることを認めます。などパスカル、デルファイ、ラザロ、ADA、プログラミングの後、1は非常に読みやすいコードを書くことと簡潔な大文字と小文字を区別する構造にこだわることなく、迅速に実行するために取得することは簡単であることを知ります。結局のところ、可読性が主題の最初と最後の言葉です。コードは、人間ではなく、コンピュータのために書かれています。大文字小文字を区別しないコードをデバッグする問題ありません。 一つは中間レベルの言語にまで移動したとき、一方が感度をケースには、No利点がないことを認めます。大文字と小文字の区別をデバッグ過ごした時間のかなりの数は、問題の原因となった、しかし、があります。特に互いに異なるコーダからモジュールにパッチを適用します。 また、回答者の大多数はケース非感受性が何を意味するか理解していないことが表示されます。文字のみ-zが影響を受けます。これらは、ASCII文字の連続的なサブセットです。マシンコードの3つのまたは4つのバイトは、文字のこの範囲の場合と、コンパイラは無関心にします。これは、下のバー、数字、または何か他のものは変更されません。他の言語と文字セットについてのポイントは、単純にこの議論には適用されません。コンパイラまたは遮断は、一時的に変換したり、ビーイングのASCIIまたはない基づいて、コンパイル時に解析のために文字を変換しないようにコード化されるだろう。
私はK&Rが作った間違いを繰り返して出てきたPythonのような新しい言語でショックを受けています。はい、彼らは、コンパイラ、ソース、およびオブジェクトコードの合計RAMは1000のバイトだった環境で、半ダースのバイトを救いました。それはそれからでした。今、メモリが問題ではありません。さて、ノー賢明な理由のために、Pythonでさえ予備ワードは大文字と小文字が区別されます!私は、変数や関数名として「印刷」の「のために」を使用する必要はないと思います。しかし、その可能性は、各識別子の正確なケースの上に遮断してcontenting過ごした時間の高価で保存されています。ひどい仕打ちだと思います。
私は大文字と小文字の区別のサポートでこれまでに読んだことがある最も近いものは、ハッシュのコメントです。しかし、細部に細心の注意を払って処理することができ、これらの稀なコーディングのイベントは、コーダは大文字と小文字を区別コードを記述するために使用しなければならない無意味な精査の価値があるとしていないようです。問題の2つの図。一つは、コードにトラップを設定し、悪いコーディングを奨励し、離れて大きな概念から流用される特別な注意が必要です。他には、何の下側を持っていない高レベルの言語で完璧に取り組んできました、そして柔軟性が、それは問題はありませんでしたことができます。それはVHSの別のケースは、BETAに勝ち、まだのように私には見えます。それはここにちょうど私の2セントの価値があります。
ラーニングので、ここでそれが行くの例では常に簡単です
C#(大文字と小文字を区別しないでVB.NETから敏感しかし、使用可能な場合):
CONSTANT_NAME
IInterfaceName // Uses I prefix in all case sensitive and insensitive languages
ClassName // Readable in both case sensitive and insensitive languages
_classMember // sometimes m_classMember or just classMember
DoSomething(someParam) // Method with action name, params can be _someParam
PropertyName // Same style in case sensitive and insensitive languages
localVariable // Never using prefix
JavaとJSは、C#に似たスタイルを使用していますが、メソッド/関数/イベントは、変数のdoSomething、のonEventのように宣言されています。
ObjectPascalと(Delphiおよびラザロ/ FPCは、ADAとVB.NETのように、大文字と小文字を区別している)
CConstantName // One can use Def or no prefix, not a standard
IInterfaceName
TClassName // Non-atomic types/classes have T prefix e.g. TStructRecordName
PSomePointer // Pointers have types, safer low level stuff
FClassFieldMember // F means Field member similar to m
DoSomething(Parameter) // Older code uses prefix A for parameters instead
PropertyName
LLocalVariable // Older code uses prefix for parameters not local vars
種類ごとにのみOneCaseと接頭辞を使用すると、すべての言語の意味があります。接頭辞なしで起動しても言語はケースに依存しているが、代わりに接頭辞を使用していないインタフェースのような新しい構造を持っています。
言語は大文字と小文字を区別であるかどうかだから、それは本当に重要ではありません。新しい概念は、単独のケースで表現するにはあまりにも混乱しており、接頭辞を使用して、必要な敏感な言語を小文字に追加されました。
大文字と小文字が区別言語は接頭辞を使用して開始して以来、は、それが理にかなって同じ識別子名someIdentifier SomeIdentifier SOME_IDENTIFIER、ISomeIdentifierだけ接頭辞を使用した場合の使用を停止する唯一の合理的なのです。
この問題を考えてみます。 あなたは簡単にこれらを区別するために使用することができるものの場合慣例何かと呼ばれるクラスのメンバー、メソッド/関数パラメータと呼ばれるものと何かと呼ばれるローカル変数を、持っていますか? それは簡単だけでどこでも最もConsistentCaseStyleを使用し、接頭辞を追加することはありませんか?
大文字小文字を区別しない言語のファンは、コードの品質を気に、彼らはただ一つのスタイルをしたいです。時には彼らは1つのライブラリは下手に書かれたとライブラリが何のスタイルや貧困層のコードを持っていないかもしれないが、厳格なスタイルを使用しているという事実を受け入れます。
どちらも大文字と小文字を区別し、小文字を区別しない言語は厳格な規律を必要とし、それはどこにでも一つだけのスタイルを持っているより多くの意味があります。我々は唯一のStrictCaseを使用する言語、どこにでも一つのスタイルとプレフィックスを持っていた場合、それは良いだろう。
貧弱なCコードの多くがあり、大文字と小文字の区別は、それが読みやすくはありません、あなたはそれについて何もすることはできません。大文字小文字を区別しない言語では、ライブラリを書き換えることなく、あなたのコード内の良いスタイルを強制できます。 まだ存在しませんStrictCase言語では、すべてのコードは、まともな品質を持っているでしょう:)
は、人々はほとんどがその大文字小文字の区別が重要であると私は同意する同意するように見えます。
しかし、あなたは私はIDEは、あなたが間違っている場合に入力してみましょうべきだと思いますので、正しい場合には、何かを入力する必要がある場合には、いらいらすることができますが、オートコンプリートショートカットをヒットした場合には、大文字小文字を区別しないマッチングを行う必要があります。これは、私たちに両方の長所を与えます。
は、典型的なコーディング標準では、人は、クラス、人、変数名、およびPERSON定数になります。これは、関連するが、わずかに異なる何かを意味する別の総額で同じ単語を使用すると便利です。
だから、あなたはあなたのビジネスで3人のスタッフを持っていた場合は、すべてと呼ばれるロバート、あなたはロバート、ロバート、ロバートでしょう、あなたとしてそれらを参照してくださいだろうか?そして、あなたは意味どちらを正確に知っている人に頼る?
電子メールシステムは、大文字と小文字を区別した場合はどうなりますか?この彼らに電子メールなどRobert@widgets.com、robert@widgets.comとしてアドレス、およびROBERT@widgets.comを与えます
個人データの不正違反の可能性が巨大になります。あなたが解雇されようとして不満を持つ従業員に、データベースのrootパスワードを送信した場合。
は言うまでもありませんベター・ボブ、ロビー、そしてロバートそれらを呼び出します。彼らの姓は、例えばだったらまだよくロバート・A、ロバート・Bとロバート・C、それらを呼び出すためにアーサー、銀行、およびクラーク
本当に - 地球上の人々は非常に警戒さに依存しているミスや混乱を誘う命名規則を、持っている理由?あなたのvolcabulary内の単語のように短いか?
そしてたぶん便利なトリック「MyClassのはMyClass」を言及した人のためとして - なぜ、なぜ、なぜ?あなたが意図的にそれが困難な使用方法は、クラスメソッドやインスタンスメソッドであるかどうかを一目で確認することにします。
プラスあなたは、クラスの特定のインスタンスについての詳細あなたのコードを読んで次の人に伝える機会を失っています。
例えば
カスタマーPreviousCustomer
カスタマーNewCustomer
カスタマーCorporateCustomer
あなたのインスタンス名は、理想的には、それが基づいています単なるクラス以上の同僚に伝える必要があります!
ワード分離が重要でない場合は、なぜ私たちは、単語と単語の間にスペースを入れていますか?したがって、私は、名前の単語間の下線は、可読性を高めるやると思います。また、適切な文字の大文字と小文字の読みするのが最も簡単です。すべての単語が口の中の言葉で伝えることができるならば最後に、それは確かにはるかに簡単です - 「企業アンダースコアカスタマー」ではなく「資本C小文字O R P O R A T Eアンダー資本C小文字のu S T O mの電子のR」! - 前者は「自分の頭の中で」話さすることができ、後者はできません - 私は本当に苦労 - 私は大文字と小文字の区別に満足している人たちが自分の脳にこれらの大文字と小文字を区別名を処理する方法のだろうか。だから私は、その場合の感度は全く参考になっていないと感じる - 。私の意見ではCOBOLからretrogadeのステップ
人が真剣にoverthinkいます。
場合には神経を作るのは簡単なことではありま保存と組み合わせに分離型および変数の名前空間これは:
の場合を宣言するクラスとして
TextureImage
'として利用しようとして'textureImage
のIDEではautocorrectます。これにより、活用することもできませんへのシフトキーませんが宣言を識別子または利用のアンダースコア.のようにJavaおよびその他複数の言語で完全に有効なタイプ"
MyClass myClass
".は、IDE、コンパイラは問題ないと区別することを利用型の使用を可変となります。
また、大文字小文字統一例を保証する'o
'と'O
'りますの異なるオブジェクト。共通の引数を含む:
"
sOmEoNe wIlL tYpE cOdE lIkE tHiS
"; => その人_never_を許可する参加プログラミングのチームであり、このようstrawmanの引数。もって管理し、大文字小文字統一例であり、解決の問題という意味でいうひとつ忘れてはいけないん夢中では大文字/小文字の組み合わせを採用しています。"できない"国際化"を大文字小文字統一例となります。";=> 95%以上のプログラミング言語で書かれた英語のための非常に良い理由です。ありません競合文字エンコーディングについて、その大半は、キーボードが地球の英語(一部または全体のunicode識別子のスから、dumbestうのはありがたいですよねちの21世紀でのunicode文字をfrikkin見えないsurragates、読書コードがくずを使用google翻訳して、そしてコードを書くのに十分なコピー-ペーストの識別子または文字。
"でも大文字と小文字が区別の言語により識別子!";=> ない文法的に必識別子を、大幅に悪化した。
利用しない他の大文字と小文字を区別の言語でも利点は大胆に明らかな考えてみればこのようなものです。
合理的な答えは、言語の設計者はそれを考えたのかもしれません 将来のことを考え理解することは、言語をより容易になります)。