- ベストアンサー
プログラミング言語で大文字と小文字が区別される理由
多くのプログラミング言語では、アルファベットの大文字と小文字が区別されますが、これは何故なのでしょうか? 大文字小文字だけが異なる同名のメソッドや変数などを作る機会があるということなのでしょうか? それとも、こういうことを実装するのは面倒な作業だったりするのでしょうか?
- みんなの回答 (9)
- 専門家の回答
質問者が選んだベストアンサー
ちょっと気になったので調べてみました。なかなか面白いです。が、まとまった資料も無いのでこれが結構大変だったのですが(笑)。 まず、一つ目の問題としては、僕もそこまで爺さんでもないんで(笑)、「コンピュータの黎明期」は実体験してないんで、想像するしかない部分もあるんですが、要するに「現代の常識」に照らし合わせて考えればダメだ、と言う事は言えると思います。ANO.4のお方も言ってますが、ハードウェアの制限が過去半端無く大きかった、と言う事があります。メモリの問題なんかもありますが、それより大きいのが「表示」の問題のようです。 まず、言語なんですが、これは今まで挙がった言語の登場順は次のようになっています。 ・Fortran 1954年 ・Lisp 1958年 ・Pascal 1970年 ・C言語 1972年 UNIXの登場はPascalと同じ1970年なんですが、最初期のヴァージョンはアセンブリ言語で書かれていて、C言語の登場はそれより若干後になっています。UNIXはその後、C言語で書き直されているんですが、いずれにせよ、Pascalまでの「大文字小文字を区別しない」プログラミング言語は「UNIX登場以前に作られた」と言う事です。また、最初期のUNIXは開発元の米国AT&T(日本で言うNTTみたいな会社)以外では使われていなかったので、Pascalは登場時期は同じですが、当然UNIX上では開発されてないでしょう(Pascalはヨーロッパ生まれですが、何のコンピュータ上で開発されたかは見つけられませんでした)。 また、ここで注目すべき事は、当時は「パーソナルコンピュータ」なんてものは無かった、と言う事です。すべて大型コンピュータ(ミニコンも含む)で開発されてた、って事です。この辺で一般人の想像の範囲を軽く超えてくるんですね(笑)。 さて、その「コンピュータ」ですが、登場順に大体のメインどころを引っ張ってきます。 ・ENIAC 1946年 ・UNIVAC I 1950年 ・IBM 701 1953年 ・IBM 704 1954年 これらが黎明期の有名どころの「大型コンピュータ」なんですが、僕等が今使ってるようなモニタなんて無かった頃の製品ですね。どうやって使ってたんだか謎の部分が大きいんですが(笑)、基本、磁気テープやパンチカードによる入力を受け付け、紙を吐き出す、ようなインターフェースだったようです。今で言うと出力表示自体が「プリンタ経由」だったようです。 この「プリンタ」自体も今みたいな「インクジェット」なんて無かった頃なんで、どんなんだったんでしょうかね(笑)?ちなみに80年代でも「ドットインパクト方式」とか言われるプリンタ(細い棒が何本も入っていて、それを組み合わせて印字する)が主流で、非常に印字は汚かったモノでしたが、下手すれば「それ以上に汚かった」のではないでしょうか(それどころか、初期のコンピュータだと、出力もパンチカードだったんでしょう)?つまり、「解像度」の問題が大きくて「大文字/小文字」判別出来るような性能ではなかったのではないか、と思われます。今の感覚で言うと、「かろうじて読める」程度のモノだったのではないか、と。 ちなみにFortranとLispはIBM 704上で実装された言語です。当時は「大文字/小文字を区別したくても出来なかった」と思われます。 その後、UNIXなんかが始めて動いたヒット作のコンピュータDEC(後にCompaqに買収され、Compaqもヒューレッド・パッカードに買収される) PDPシリーズが登場します。 ・DEC PDP シリーズ登場 1959年 最初のCRTモニタ(テレビみたいなブラウン管を利用したモニタ)がいつ頃登場したのかはつきとめられなかったんですが、このDEC PDPの最初の機械にはかろうじて「ディスプレイ」と言うものが込みで販売されたようです。ただし、今僕等がテレビなんかで使ってるブラウン管とは違い、ベクタースキャン方式、のモニタだったようです。オシロスコープに近いモニタ、と言うか。まあ、そう言う貧弱なモニタだったようです。 さて、文字セットであるASCIIが制定されたのは1962年だったそうですが、問題は「制定出来て」も「表示が出来たのか?」と言うとこれはまた話が別だったんでしょう。どっちかと言うと「先見の明」で大文字/小文字の文字セットを決めた、と言うようなニュアンスが受け取られます。 と言うのも、DECが売り出したCRT利用のビデオ端末で、僕が調べた限り最初期の製品、VT05と言うのは1970年発表だったんですが、どうやら「大文字」しか表示出来なかったようなんです。解像度が無茶苦茶低かったようですね。解像度が低いと小文字を表示するより大文字表示する方がラクでしょう。 始めて大文字/小文字を問題なく表示出来たDECのビデオ端末はVT50と言う製品です ・VT 50 1975年 これがDECとしては始めてASCIIを完全に表示出来るような解像度を持ったモニタだったようですが、これはUNIX登場より後だったんですね。他に大文字/小文字問題無く表示出来るモニタが別のメーカから出てたのか、あるいは「表示できないけど、一応大文字/小文字を認識出来るOSにしよう」とUNIXを開発したのか。この辺は謎です(笑)。いずれにせよ、すごい時代だったんだな、って事「だけは」想像出来ます。 なお、端末としての最大の傑作、と言われているDECのVT100の登場はもうちょっと後で、それは1978年の事、となります。 まあ、大型コンピュータがこの状態だったんですから、パソコンなんてもっと凄かったのは想像に難くありません。世界初と言われるパソコンはAltair 8800と言われる「キット」だったようですが、 ・Altair 8800 1974年 これはキーボードもモニタも「何にも付いてない」マシンだったようです。一体どうやって使ってたんだか(笑)。まあ、外部接続して「何かに」出力してたんでしょうけれども、今の道路の信号機くらいの能力しか無かった、と言う話です。どんなやねん(笑)。ちなみにこれが「Intel製CPU搭載」の初のパソコンだったようです。 初の大ヒットパソコンはご存知Apple IIです。 ・Apple II 1978年 これが今のパソコンらしいパソコンの原型、と言えば原型なんですが、この機械もモニタの最高解像度は280×192くらいしか無かったようで、当然大文字/小文字の出力は難儀だったでしょうね。多分マトモに辛うじて表示出きるのは「大文字」だったんじゃないかな、とは思います。さすがにこの辺も「現物使ったことが無い」んで何とも言えませんが。 まあ、こう言う「すごい歴史」があるんで、現代みたいにアニメキャラをネットで見ながら「萌え~~」とか言える解像度を手にしたのは、結構最近なんだな、って事です。それ以前は「文字をマトモに表示する事さえ難しかった」って事ですね。
その他の回答 (8)
- Tacosan
- ベストアンサー率23% (3656/15482)
歴史いっちゃいますか~>#8. 「FORTRAN では区別したくてもできなかった」というのは (ある意味) 正解. そもそも 1文字 6ビットで「小文字が存在しない」わけだから.... ちなみに ASCII ができたのは 1967年だとか. なお, 最初期の出力デバイスは「パンチカード」, 「紙テープ」, 「テレタイプ」(わかりやすくいうと「電動タイプライタ」) くらいじゃないでしょうか.
お礼
ご回答ありがとうございます。 一度Wikipediaのパンチカードや、関係する記事を読んだことがありますが、当時は出力も大変だったようですね・・・。
- gon987
- ベストアンサー率16% (53/312)
個人的に思ったことはUNIXとその開発に作られたC言語。 その影響を大きく受けている言語は大文字・小文字の区別が される言語になっているパターンが多い気がしますね。 それに対して独自の言語として発展してきた言語やその派生は 大文字・小文字の区別をしてない事が多い気がしますね。
お礼
ご回答ありがとうございます。 C言語の仕様を受け継いでいるか否かによっても、そういう傾向があるのですね・・・。
- ralf124c
- ベストアンサー率52% (232/446)
環境に左右されはしますが選択の余地があるのなら、最終的には言語発明者の設計思想です。 理由は様々だと思います。 それぞれにメリット・デメリットがあって何を重視するかで仕様を決めているはずです。 大文字小文字が区別される場合について考えてみると ・同じ文字数なら変数の表現の幅が増える ・スペルが同じでも大文字と小文字で間違えた場合にデバッグが大変 ・構文解析に変換など余計な手間がかからない ・プログラマの打ちミス要素の一因となり得る などなど・・・ 言語仕様の論文など読んでみてはいかがでしょうか。 目から鱗の発見が結構あります。 例えば、BASIC言語の略称が「ビギナーズなんたら」という通説が流布してますが略称に関する記述が論文には一切ないのでBASICはBASICと、そういう意味での名称なのでしょうとか。
お礼
ご回答ありがとうございます。 細かく見てみると、色々一長一短ですね・・・。
- cametan_42
- ベストアンサー率62% (162/261)
多分、歴史的理由でしょう。 現代の多くのプログラミング言語は、その形式をC言語に借りてきてるんですが、そのC言語発生の地、UNIXが「大文字小文字を区別出来るOSだったから」だと思います。 例えば前出で例として出されたLispなんかは大文字、小文字を区別しないような実装が多いんですが、ルーツがUNIXではないから、と言うのは大きいと思いますよ。 また、僕自身はMS-DOSは使った事がないんですが、Microsoft のMS-DOSってもは元々大文字小文字を区別してなかったと思います。つまり、「誕生の地」(OS)によってその辺は随分と変わるのではないでしょうか? (もっともMS-DOS生まれのプログラミング言語、と言うのは思いつきませんが)
お礼
ご回答ありがとうございます。 確かにお手本にする言語にそういう規則があると、それが当たり前、みたいに考えてしまいますしね・・・。Unix発祥のころからの伝統みたいな感じですね。
人間的な理由だと思いますよ。 ちなみに、Delphi(オブジェクトパスカル)も大文字小文字は区別しません。(たしか 「Edit1.Text」も「EDIT1.TEXT」も「edit1.text」も「eDIt1.tExT」でも、OK。 http://www.wakhok.ac.jp/~tetsuo/programing/Delphi/text/chap03/pb0306.html ただ、それによって困ったこともないです。 もしかしたら、変数名の長さも、けちらざる終えないメモリー・HDD激貧時代のなごりなのかも?(思いっきり素人の想像で、根拠もないですが。
お礼
ご回答ありがとうございます。 やはり見易さの問題というのが大きいのかもしれませんね。
- hirusagari
- ベストアンサー率64% (20/31)
大文字と小文字を区別しないのは簡単ですが、 ソースコードに大文字と小文字が不規則に使われていたら とても読みにくそうですね。それを自動的にそろえるプログラムを 書くのもそう難しくはありませんが、どうせなら最初から区別してしまったほうが合理的に思えます。 日本語でも平仮名と片仮名を区別しないのは不自然ですしね。 とはいえ、絶対的な理由はないかとおもいます。 自分がC#で書くときにフィールドとプロパティを同名にすることがあります。 このとき、フィールドは先頭を小文字で、プロパティは先頭を大文字で以下のように書いています。 そうした機会はないわけではないようです。 string name; public string Name{ get{ return name; } }
お礼
ご回答ありがとうございます。 実際に混在させて書いてみたことはないので気付きませんでしたが、言われてみれば、大文字小文字が混在しているのは、読みにくそうですね・・・。
- Tacosan
- ベストアンサー率23% (3656/15482)
多分, 「だって大文字と小文字って見た目が違うから区別した方がいいでしょ」とか #1 で言われるように「文字コードが違うんだから区別した方が (ちょっとだけ) 処理が簡単になる」とか, 考え方によってはどうでもいい理由じゃないかなぁ? FORTRAN や Lisp一族は大文字と小文字を区別してないけど, それで特に困ったこともないと思うし. あ, ちなみに「大文字と小文字を同一視する」のはそんなに手間のかかる仕事じゃない (プログラムを読み込んだときに大文字か小文字に統一しておけばいいだけだから) です. とはいえ, 「言語を処理するうえで最も時間のかかる場所」で手間を掛けることになっちゃうんだけど.
お礼
ご回答ありがとうございます。結局は言語開発者の好み、というだけのことかもしれませんね。 それにしても、大文字小文字の変換って、時間がかかるものだったのですね・・・。
- trajaa
- ベストアンサー率22% (2662/11921)
プログラムしたモノを動作させるには、コンピューターに理解できる形式にしないとならないですよね。 また、大文字と小文字では、人間にとって同じ文字でも、コンピューターに取っては、別の文字です(具体的には文字に割り当てられた番号が違う) もし、大文字と小文字を同じ扱いにすると ABCもAbcもAbCもabcも・・・・・ 全部同じに扱わなければなりません。 コンピューターにしてみたらabcを表すだけでも何通りもの組み合わせがあり、その判断をするだけで疲れてしまいます。 そのような組み合わせの判断で頭を悩まさずに、本来の目的であるプログラムの処理の方に力を注いで貰う為に 大文字小文字は別!と規則づけたのです。 >大文字小文字だけが異なる同名のメソッドや変数などを作る機会がある 論理的には可能ですし、コンピューターに取っては無理がないですが 人間様に取っては誤りの元なので、そう言うやり方は一般的ではありません。 例えば、全部大文字なら定数とか、全部小文字は変数とか、文節の頭文字だけ大文字とか、チーム内でのルールを決めます。
お礼
ご回答ありがとうございます。 言われてみれば、コンパイル時の速度は落ちますね。インタプリタ式の言語とかだと結構パフォーマンスが落ちそうですね・・・。
お礼
ご回答ありがとうございます。 パフォーマンスの問題はしばしば耳にしますが、表示という問題があったのですね。表示できなければ、大文字小文字を区別する以前の問題ですよね・・・。 こんなにたくさん調べていただいて、恐縮です。大変勉強になりました。