トップページ⇒tech
120コメント30KB

case-sensitive vs. case-insensitive論争

■ このスレッドは過去ログ倉庫に格納されています
0001ジャジメンNGNG
多いに語ってくれ

分岐元スレ「プログラミング言語 開発スレ( ´�D`)」
http://pc.2ch.net/test/read.cgi/tech/1020711295/
0002デフォルトの名無しさんNGNG
まずcase-sensitive、case-insensitiveそれぞれのメリットを述べよ
0003ジャジメンNGNG
いざスレ立てすると、誰も書きこまないという罠。
0004デフォルトの名無しさんNGNG
XML、C++、C#、Java、UNIXのファイル名(←?)。
時代の流れは(以下略
0005デフォルトの名無しさんNGNG
get_home 派の俺は時代遅れですか?
0006デフォルトの名無しさんNGNG
>>5
ふつーget_home。
GetHome/getHomeキショイ




と煽ったら、盛りあがるだろうか。
0007デフォルトの名無しさんNGNG
ci派の主張:
 ライブラリでどのような規則を使っていても
 GetHoge getHoge gethoge 利用者側で好きなスタイルを選べる
0008デフォルトの名無しさんNGNG
>>6
このスレは case-sensitive vs. case-insensitive だろ。
get_homeとGetHomeを争わせてどうするよ。
00097NGNG
俺の主張
 なんか曖昧で薄気味悪い
0010デフォルトの名無しさんNGNG
ちなみにget_homeの人って
case-sensitive、case-insensitiveどっち派なの?
case-sensitiveかな?やっぱり。
0011デフォルトの名無しさんNGNG
>>9
同意しておく
0012デフォルトの名無しさんNGNG
>>1が一瞬ジャージマンに見えたので逝ってきます。
0013デフォルトの名無しさんNGNG
むかーしOS-9というOSを使ってたんだけど(MacじゃないYO!) ファイル名は大
文字小文字を区別して記録するが、検索の時は区別しなかった。(ReadMeとい
ファイルは作れたが、同じディレクトリに他のREADMEやreadmeは作れなかった。)
WinのLFNもそうだね。

DOSで全部大文字にされたのも萎えたが、UnixでMakefileがあるのに気づかず
makefileを編集してて悩んだときもケ゛ソーリしたよ。
0014デフォルトの名無しさんNGNG
ドメイン名はcase-insensitiveですた
0015デフォルトの名無しさんNGNG
>>13
ファイルシステムについてはOS9のが良さげだな。
記録はcs, アクセスはciか。
0016デフォルトの名無しさんNGNG
>>14
メアド茂名〜
0017デフォルトの名無しさんNGNG
>>13
>DOSで全部大文字にされたのも萎えたが、UnixでMakefileがあるのに気づかず

そのへんはコンパイルするなら問題起きないんじゃない?
インタプリタ言語でcase-sensitiveだとよく引っかかるかもね。
0018デフォルトの名無しさんNGNG
フレームワークはcase-insensitiveであるべき、
case-insensitiveな言語(BASICとか)からも使用される可能性があるから。
言語はcase-sensitiveであるべき、
使用するフレームワークがcase-sensitiveな可能性があるから。
001913NGNG
>>17
うん。言語だとまた別だろうね。
ファイル名だと、だれが見ても同じcaseで見えるのが良いところ。
0020デフォルトの名無しさんNGNG
Netscape ⇒ case-sensitive
IE ⇒ case-insensitive
0021デフォルトの名無しさんNGNG
SQLの構文やフィールド名はcase-insensitiveだな。
0022デフォルトの名無しさんNGNG
>>18
良くわからんがCORBAとかDCOMとかの話?
0023デフォルトの名無しさんNGNG
>>20
×NETSCAPE
○Ie
○iE
○ie
ってこと?
0024デフォルトの名無しさんNGNG
今のところ、
書きこみはcase-sensitive だけど
読みこみ(検索)はcase-insensitiveが優れている、
でよろしいでしょうか。

自分で書いてて意味わからんが。
0025デフォルトの名無しさんNGNG
>>20
よく分からん
0026デフォルトの名無しさんNGNG
>>7
> ci派の主張:
>  ライブラリでどのような規則を使っていても
>  GetHoge getHoge gethoge 利用者側で好きなスタイルを選べる
ちがうっつーに。

「GetHoge getHoge gethogeを区別したいんかい。
ということは、同時に使いたいんかいと小一時間(略」
0027デフォルトの名無しさんNGNG
>>26
使いたい
フィールドのlineとプロパティのLine
0028デフォルトの名無しさんNGNG
>>23
ごめん、JavaScript の事

# 今のネスケがどうかは知らんが
0029デフォルトの名無しさんNGNG
>>28
え( ゜Д゜;)IEもcase区別しなかったっけ
0030デフォルトの名無しさんNGNG
>>17
>インタプリタ言語でcase-sensitiveだとよく引っかかるかもね
これスペルミスのレベルと同義な気も。
しかし徹夜デバッグとかでの混乱は減るかもしれん(w
0031デフォルトの名無しさんNGNG
>>26
じゃあ
「GetHoge getHoge gethogeは同時に定義できない。
ただしGetHogeと定義されたものをgethogeでアクセスすることもできない。」
でどうよ。

「二重定義チェックはci、アクセスはcs」
0032デフォルトの名無しさんNGNG
>>31
いや、それはダメすぎる
>>27をみれ。
0033デフォルトの名無しさんNGNG
>>31

gethogeを定義しようとすると「二重定義です」と怒るくせに
gethogeを参照しようとすると「そんな名前はありません」と怒るのか?

イジワルな処理系だな(w
0034デフォルトの名無しさんNGNG
>>27はわがままだと思う
(というか良くないスタイルだと思う。)
0035デフォルトの名無しさんNGNG
>>27エラーでいいじゃん、そんなの。
0036デフォルトの名無しさんNGNG
>>29
あれ? ALERT() と alert() 区別したぞ?
ごめん、IE3 の頃の偏った知識かも…
0037ジャジメンNGNG
やっぱスレ立てして良かった。
0038デフォルトの名無しさんNGNG
>>34
C#では推奨されているのれす・・・

でも結局好みかと。
m_lineやline_でいい人はcase-insensitiveでいいだろうし、
lineがいい人はcase-sensitiveがいい。
003931NGNG
>>33
gethogeを定義しようとすると
「すでにGetHogeが定義されています」
といえば良いじゃん。
0040デフォルトの名無しさんNGNG
UnixのファイルシステムやCがcsなのは、「小文字も使える」ことを
自慢したかっただけらしい。Ken Tompsonがどっかで自慢してた。

つまりCは「大文字しか使えないシステムでは使えない(非常に使い
にくい)仕様」にしたかっただけだろう。

少なくともファイルシステムに関していえば、迷惑な決定だったと
思う。
0041デフォルトの名無しさんNGNG
BOOLとbool
TRUE/FALSEとtrue/false

WSASelectやSQLConnectとかは勘弁して欲しいな。
wsa_select/sql_connectがいい。
0042デフォルトの名無しさんNGNG
top.htmlとTop.htmlが区別されるのは確かに不便
Win上で作業してUNIXにアップロードしたりするとさぁ大変
0043デフォルトの名無しさんNGNG
>>41
そんなことを言われましてもWinsockAPIで規定されちゃってる物は勝手にリネームできないっす
0044デフォルトの名無しさんNGNG
Cがcase-insensitiveだったらどうなってただろう
printfの書き方で大論争が起きてたりして
0045デフォルトの名無しさんNGNG
printf
Printf
printF
PrintF
4通りしか無いじゃねーか
0046デフォルトの名無しさんNGNG
ま、言語は>>31みたいな好みの人もいるが
ファイルシステムについてはWinのLFN風で問題ないよね。
0047デフォルトの名無しさんNGNG
Cがciだったら世の中はけっこう違ってただろうな。
当時の言語はAlgol、Pascal、Fortran、Lisp等、ほとんど全部
csで平和だったんだから(COBOLはしらん)。

C(C++, Java, C#, Perl, ...)あたりとリンクする必要がなけりゃ
csでも別に困らないね。
0048デフォルトの名無しさんNGNG
でも、ここで話をするのは言語の話なのであった
0049デフォルトの名無しさんNGNG
つまりCが諸悪の根源ってことか?
0050デフォルトの名無しさんNGNG
>>45
4通りもあれば十分じゃねぇか
てかCはprintfとかgetsとか、最後に1文字だけくっつけるの多いな。
GetS( str );
ならいいが
Gets( str );
とかされたらおまえそのS意味わかってるんかと小一時間(略
0051デフォルトの名無しさんNGNG
>>41
いや、「どうあるべきだったか」という話をすれば良いだろう。
0052デフォルトの名無しさんNGNG
>>50
だいたい初期のCは小文字しか使ってないくせに
なんでciにしたんだろ。やはり自慢したかった
だけなのか? K&Rとかにもcapitalizeした名前
なんて出てこねーじゃねーか。
0053デフォルトの名無しさんNGNG
>>52
たしかに。
なんでわざわざciにしといてstrcmp, strcpyなんだろ。
0054ジャジメンNGNG
そうそう、単語の最初の文字を大文字化する事を、
「キャピタライズ」と言う。

それはさておき、case-sensitiveとcase-insensitiveの問題と、
getHoge/GetHoge/gethoge/get_hogeを同列の問題として考えるのは
どうかと問いたい。
0055デフォルトの名無しさんNGNG
>>53
アクセントつけて
strIcmpとかダメだったのかな・・・
0056デフォルトの名無しさんNGNG
C の頃はマクロと明確に区別したかったから小文字 only にしたんじゃねーの?
0057デフォルトの名無しさんNGNG
もしかしてC言語の正式名称は小文字のcだったりする・・・?
0058デフォルトの名無しさんNGNG
>>56
プリプロセッサマクロは大文字、
その他下流工程は小文字
に分けちゃってもよかったかもな。
0059デフォルトの名無しさんNGNG
>>56
えー、でもK&Rの初版にはputcharやgetcharはマクロと堂々と
書いてあったと思うんだが。
0060_NGNG
定義する時はcs
検索する時は一回目cs→見つからなかったらscっていうのはどうだろう?
class A {
  void getHome();
  }
void main() {
  getHome(); # == A.getHome()
  GetHome(); # == A.getHome()
}
いい感じ。しかし
class A {
  void getHome();
  void GetHome();
  }
void main() {
  getHome() # == A.getHome()
  GetHome() # == A.GetHome()
  gethome() # == ???
}
うーん。駄目か。
0061デフォルトの名無しさんNGNG
このスレはCの関数がみんな小文字の謎に迫るスレになりました
0062デフォルトの名無しさんNGNG
>>61

単語をフルに2つ書くほど長い名前は贅沢すぎてつけられなかったから、
という説を唱えてみる。
0063デフォルトの名無しさんNGNG
>>61
分岐源スレの住人の立場としてはそれは微妙に困る
0064デフォルトの名無しさんNGNG
>>62
そういえば、16だか32文字制限だったよな昔は
0065デフォルトの名無しさんNGNG
タイトル見て糞スレかと思いきやなかなかマトモな話
case-sensitive が意味の分からない厨の進入を防いだか
0066デフォルトの名無しさんNGNG
しかしcsの根源のCがcsを活用していないなら、csはやっぱり
意味無かったんじゃないかという疑問がふつふつと。
0067デフォルトの名無しさんNGNG
ANSI 的に 32 文字だか 36 文字だったような (今は知らんが)。
昔は「短いことは良いことだ」的に分けわからん略語つけてたような。
今でも「区分」は kbn だが (藁
0068デフォルトの名無しさんNGNG

Cがもたらしたcsの呪縛をふりはらって1からやり直せるとした
ら、>>31の案が良いのではないかと主張してみる。
0069デフォルトの名無しさんNGNG
>>67
C90だと確か「外部名の最初の6文字は区別すること」が要求されてたような。
(6文字ってのは一部のOSのリンカの制限。)

C99だと「外部名の最初の31文字。ただしISO10646の\unnnnとか\Unnnnnnnnは、
1文字で6文字分〜10文字分と数える。」
「内部とマクロ名は63文字(\unnnnとかも1文字と数える)」
0070デフォルトの名無しさんNGNG
'_'を無視する仕様は、zshのオプションしか知らないが、
割と便利。
0071デフォルトの名無しさんNGNG
Emacs使ってると_で切った方が単語単位の移動が使えて便利なんだが。
0072デフォルトの名無しさんNGNG
漏れ的には、Smalltalkの「大文字ではじまる名前はグローバル」ってのが好きなんだが、
メリットは、あんまり無さそうだなぁ・・・
0073デフォルトの名無しさんNGNG
OCaml風?
0074デフォルトの名無しさんNGNG
>>70
昔なんかの言語で、数値中の '_' は無視するってのを見た記憶がかすかにある。
123_456_789 とか、0x0123_4567_89AB_CDEF とか書けていいじゃんて思った。
(0x は、便宜上ね。多分違う Prefix だったと思う。)

個人的には、二重定義や未定義のエラーチェックがちゃんとしてれば cs で良い
と思う。>>31 みたいな考え方もあると思うが、やっぱり違和感あるよ。
0075デフォルトの名無しさんNGNG
>>72
それは慣習で良いんじゃないの? Smalltalkもそうでしょ。
変数は大文字で始めなければいけないPrologとか
コンストラクタは大文字で始めなければいけないHaskellなんてのもあるけど。

個人的にはciの方が害が少なそうで良いと思う。
caseは人間が慣習を決めれば良い。
0076デフォルトの名無しさんNGNG
case-sensitive -> 大文字小文字区別する
case-insensitive -> 区別しない
0077デフォルトの名無しさんNGNG
>>76
うん。みんな知ってる。ときどきまちがえるけど。
0078デフォルトの名無しさんNGNG
>>8 これはどうですか?

・先頭が小文字だった場合大文字に
・アンダーラインの直後を大文字に
・小文字と大文字が並んでいたらアンダーラインを挿入
( 全部小文字で予約語が書かれていた場合、それは変換しない )

内部的にこういう変換をかけてくれたら内部でWord_Word形式となり
wordWord, word_word, WordWord などと書いてもいいことになり
命名規則でイライラすることが無くなる
0079デフォルトの名無しさんNGNG
>>78
名前を勝手にいじくるのはやっぱり良くないと思うよ

class Hoge
{
 int m_hoge;
 Hoge()
 {
  int mHoge = 10;
  m_Hoge = 20; // 恐ろしいことにローカル変数mHogeに代入してしまう
 }
}
0080デフォルトの名無しさんNGNG
m_についての話題もこのスレでいいですか?
0081デフォルトの名無しさんNGNG
どう考えてもすれ違い
0082デフォルトの名無しさんNGNG
>m_についての話題
これだけでどんな話題か想像できてしまうのが悲しいよ、オレは。
0083デフォルトの名無しさんNGNG
>>79
それ、同じ変数名を宣言できない様にすれば解決するよ。
開発スレで話題になってたけど。
0084デフォルトの名無しさんNGNG
たとえどんなにciが優れていたとしても、
無類の普及率を誇るc/c++ファミリ・及びそれと互換のAPIを持つOSの所為で
csに対応した方が使い勝手が良いんだよな。
0085デフォルトの名無しさんNGNG
>>84
内部的にcsで保存しておいて、
ciで新しく宣言したらエラー、
cs/ciでの参照は許可する。
DLLのAPI等はcsで呼び出す。
ってのはどうよ?
008685NGNG
ちょっとニュアンスが伝わりきれてない感じなので補足。
>DLLのAPI等はcsで呼び出す。
ciで呼び出そうとしたときは、自動で内部のcs形式に直して呼び出す。

Windowsのファイル名形式っぽいけど、
これがいまのところ一番良さそうだと思う。
0087デフォルトの名無しさんNGNG
>>83
クラスメンバと、ローカル変数で同じ名前が使えないってのは厳しいな・・・
Pointクラスのコンストラクタとか、仮引数の名前考えなきゃならんな・・・
0088デフォルトの名無しさんNGNG
>>87
x_とy_。
(と、ここで_の話題につながる。)
0089デフォルトの名無しさんNGNG
c/c++じゃ予約されてるから出来なかったけど、
前置_とかも使える(開発スレより)なら問題なさそう
_x _yとかね。
0090デフォルトの名無しさんNGNG
>>74 遅レス気味&スレ違い気味なのでsage。
Metaware の High C ていうコンパイラがそうでした。
あと現在のメジャーどころでは Perl もー。
0091デフォルトの名無しさんNGNG
結局、環境さえ許せばcase insensitiveが優れていると言うことで
ファイナルアンサー?
0092デフォルトの名無しさんNGNG
>>91
そういう言い方されるとムカツクので却下。
0093デフォルトの名無しさんNGNG
case-insensitiveはインテリセンスとの相性が悪くないですか?
0094デフォルトの名無しさんNGNG
私は、ci が嫌い。

勝手に変更されたり、見た目が違うのに同じと判断されるのは気持ち悪い。
Hoge と書くつもりで hoge とか HOGE と間違えて書いて、システム側に
「そんなもん宣言されてねーよ」と、言われたら、「ハイすみません」と素直に謝ります。

大文字と小文字をきちんと区別できないプログラマを、
これ以上増やして欲しくない、って気持ちもある。

一度、キッチキチに区別されて、コンパイラにいろいろ文句言われて、
「大文字と小文字は区別されることがあるのだ」という経験をつまないと、
ci だの cs だのという議論にさえ入ることさえ出来ないんじゃないかな。

ま、世の中に ci なものが存在するのは我慢するが、私は出来る限り
その波から遠ざかっていたいです。

ci にしたい特別な時かどうかは、私が自分で判断するのだ。
0095デフォルトの名無しさんNGNG
型付けの弱いスクリプトとかだとincaseのほうがいいな。
0096デフォルトの名無しさんNGNG
>>95
Line -> どっかで文字列として使用されている
↓
line -> 新しく数値として使用した
↓
問題なくコンパイル通る
↓
(゚д゚)マズ-
0097デフォルトの名無しさんNGNG
>>93 別にVBやDelphiの補完機能が変とは思わないし…
>>96 Line -> どっかで文字列… Line -> 新しく数値… でも同じだし…
0098デフォルトの名無しさんNGNG
XMLはcsにするべきだったのかなー?
HTMLはciなのに。
0099デフォルトの名無しさんNGNG
xmlはタグにASCII以外の文字も許しているからいろいろめんどくさいんでしょう
0100デフォルトの名無しさんNGNG
ciの場合はイとィも区別しないのか?
0101デフォルトの名無しさんNGNG
>>100
100おめ。

Javaやってる人どうなんですか?「イ」と「ィ」。

前にJavaで遊んだとき、変数名とか日本語でもOKなので、
「int 俺 = 101;」とかってやってて、「int 俺1 = 101;」はOKだけど
「int 1俺 = 101;」は駄目だといわれた。(コンパイラに)
全角の「1」も、ちゃんと数字として認識してた。。
0102デフォルトの名無しさんNGNG
>>101
ナニソレ
もしかして全部全角になおしても良い?
0103デフォルトの名無しさんNGNG
>>101
ほんとかよ。それはそれで問題があると思うが。
int abc=100;は、int abc=100;と等価なのか?
0104デフォルトの名無しさんNGNG
>>101
それは、数字として認識してるというより、
全角を認識できていないといえる。
0105デフォルトの名無しさんNGNG
0106デフォルトの名無しさんNGNG
http://www.geocities.co.jp/Milkyway-Orion/7540/index.html
0107名無しさん@カラアゲうまうまNGNG
>>104
Unicode的には全角英数字なんてものは本来存在しないから、問題じゃないのでは。
0108デフォルトの名無しさんNGNG
お 前 等 、 芋 虫 み た い な 体 の 癖 に や け に 細 か い な (笑
0109デフォルトの名無しさんNGNG
本来ってのがよく意味がわからん
0110名無しさん@カラアゲうまうまNGNG
半角カナや全角英数は規定されてなかったてことよ。
0111デフォルトの名無しさんNGNG
Java内部で使ってるUNICODE的には全角1も半角1も、
コードは違うけど同じ扱いしないとだめだったはず。
ば(1文字)=は゛(は+濁点の2文字)みたいなもんか。

あとこのスレ的には考えるべきなのは「イ」と「ィ」じゃなく
「い」と「イ」のcaseの扱いだろう。
0112デフォルトの名無しさんNGNG
Japa言語では、
識別子のフォント・ファミリーやポイントサイズ、フォント・スタイルも判別してるので、
MS明朝で書いた bar と
MS UI ゴシックで書いた bat は
別の変数ですが、何か?
0113デフォルトの名無しさんNGNG
>>112
barとbatはたいていの言語で別だわな…
0114デフォルトの名無しさんNGNG
FULLWIDTHとか思いっ切り文字名に付いてる文字があったような
気がしたのだが漏れの気の迷いだったのかな
0115デフォルトの名無しさんNGNG
>>113
別じゃないのは8ビット時代のBASICくらいかな
0116デフォルトの名無しさんNGNG
変数名はどうか知らないけど半角数字でInteger.parseInt("0")とやっても
全角数字でInteger.parseInt("0")とやってもintの0になるね
0117デフォルトの名無しさんNGNG
>>115
変数名を1文字しか認識しないのは卑しいポケコンだけです。
我が偉大な8001様は8文字までだってOKです。
0118デフォルトの名無しさんNGNG
>>117
2文字しか認識しない機種もあったような
記憶違いかな
0119デフォルトの名無しさんNGNG
何で、違う文字で書かれた変数を同じととらえるのか。
理解できん!a と A は同じなのか?違うだろうが、眼鏡屋呼んでこい!
といいつつPascal使い。
0120デフォルトの名無しさんNGNG
case-insensitive でも case-sensitiveに慣れてるから大文字小文字は
使い分けるね…。PascalでもisEnableとかgetHogeとか使ってしまうな。
■ このスレッドは過去ログ倉庫に格納されています