もうだめぽ…
糞スレ
糞スレ
糞スレ
なんでUNIX-Cのプルグラマは
グローバル変数を使いたがるのだろ...
本人はすごいと思ってるのかな?
そんなんケースバイケースだろ
―――― 糸冬 了 ――――
グローバル変数を無くすのは無理なんでないかい?
よくわかってないのに
ださいこと・ものほどすごいとか言い張るヤシって
プログラマに多いよね。
マカーとかさ。
なんでみんな100個も200個も脳内で変数管理できますか?
僕には無理です。
脳内で管理する必要あんの?
10 :
仕様書無しさん:02/07/19 16:38
11 :
アフロナミヘイ:02/07/19 16:40
面倒なんでファイルポインタをポインタ配列にしてる漏れは駄目ポ?
以前、母がデジカメを買って嬉しそうに色々撮ってたけど、そのうちメモリが
いっぱいになったらしくてメカ音痴な母は「ねえ、これ写らなくなっちゃっ
たんだけど…」と遠慮気味に相談してきたけど、漏れは面倒くさかったから
「なんだよ、そんなの説明書読めばわかるよ! 忙しいからくだらないこと
で話しかけるなよな!」と罵倒してしまった。
その母が先日亡くなった。
遺品を整理してたら件のデジカメを見つけたので、なんとはなしに撮ったもの
を見てみた。
漏れの寝顔が写っていた。
涙が出た。
>>10 Doxygen にかけたら何故か dot.exe が不正終了するんですよ、何度も。
で、はかれた画像みて納得。
なんか芸術的な線がたくさん出てます。
そんな世界です。
>12
くそ、ネタだと分かっているのに。コピペだと分かっているのに。
泣ける話じゃねえか。
スマソ、誤爆でう
さっきの続きですけど、なんかね、地図みたいなんですよ。
目的地→たくさんの分岐点→目的地みたいな〜。
吉野家コピペの親不孝バージョンも泣ける。
そんな漏れは親不孝者ですた。
そんな事より
>>1よ、ちょいと聞いてくれよ。いまさら吉野家もなんけどさ。
昨日、母の葬式に出たんです。享年54歳。
そしたらなんか自分、涙が一滴もこぼれないんです。
で、よく見たら会ったこともないような親戚のおばさんですら泣いているんです。
もうね、アホかと。馬鹿かと。
俺な、親の死を目の前にして放心してんじゃねーよ、ボケが。
目の前に人が死んでるんだよ、母親が。
なんか親子連れとかもいるし。一家4人で葬式か。ほんとありがとう。
パパは息子さんに挨拶してくるから車で待ってなさい、とか言ってるの。いい親父だな。
俺な、親が死んでんだからもっと泣けと。
葬式ってのはな、もっと殺伐としてるべきなんだよ。
死に化粧をみた瞬間いつ涙があふれてきてもおかしくない、
泣くか叫ぶか、そんな雰囲気が普通なんじゃねーか。オレ、なんなんだよ。
で、やっと葬式が終わったかと思ったら、なんか次々と母のことが思い出されるんです。
そこでまたぶち切れですよ。
あのな、今さら思い出したところで意味ねーんだよ。ボケが。
得意げな顔して何が、今度の休みには帰るよ、だ。
俺は本当に休みに帰るつもりだったのかと問いたい。問い詰めたい。小1時間問い詰めたい。
俺、適当に親との距離をとりたかっただけちゃうんかと。
親不孝者の俺から言わせてもらえば今、若者の間での最新流行はやっぱり、
反抗期、これだね。
親ってのはいつまでも生きているもんだと思っている。これがガキの考え方。
親の期待をかなえたつもりで一人暮らし。そん代わりコミュニケーション少なくなる。これ。
で、「少しだけ仕送りいれといたから」 「ああ、無理すんなよ」。これ最期の会話。
今になって後悔ばかりが思い出される、諸刃の剣
まあお前ら若いもんは、ほんの少しでもいいから親孝行しなさいってこった。
最近、か?
24 :
仕様書無しさん:02/07/23 18:22
で、君たちはいまだにグローバル変数使ってるわけだが…。
納期過ぎてもまだコーディングしてるときは
グローバル変数使うようにしてます。
gotoもいっぱい使います。
新人研修なんかでは逆にグローバルのみで組ませて
スコープの大切さを知ってもらうのもアリかな。
グローバル変数撲滅委員会 = COBOL撲滅委員会ですね。
28 :
仕様書無しさん:02/07/23 20:22
今時のCOBOLはグローバルスコープばかりじゃないだろ。
どちらにしろCOBOLer に関係無いことだがな。
29 :
仕様書無しさん:02/07/23 20:56
何でわざわざ・・っていう変な作りとかあるよな。
ビイを撲滅知れ
グローバル変数使えなかったらシングルトンで作れないけどね
32 :
仕様書無しさん:02/07/24 20:00
>>31 あれはクラスというオブジェクトがグローバルなのであって、
変数がグローバルなワケではない。
>クラスというオブジェクトが
この表現微妙。
34 :
仕様書無しさん:02/09/22 01:57
オブジェクト、ねぇ
35 :
仕様書無しさん:02/09/22 02:35
組み込み系、特にカーネルやドライバは使わざるを得ないと思うんだけど。
>>35 割り込みが多数入ってくるようなプログラムでも
綺麗に作ればモジュールに閉じ込められる。
グローバル変数が必要な時の多くは設計の悪さが原因。
37 :
仕様書無しさん:02/10/03 22:45
撲滅age
38 :
仕様書無しさん:02/10/03 23:46
グローバル変数より
extern の数を減らせ
届かないからと何でも inculde するんじゃねー
と、前の馬鹿担当者に吠えてみる
じゃあDMA用のメモリはどこに置くんだよ
40 :
仕様書無しさん:02/10/03 23:54
>>36 あんたが言ってるのは割り込みで処理が完結する
ごく軽い処理でのみ有効。
通常は割り込みで変数に値を代入し、メインの処理で
その値に対して演算をしないと、ましなシステムは作れない。
あと信号処理でZ変換を行うような処理では前回値を保持する
グローバルな変数は絶対に必要。
(グローバルなスコープを持つ構造体も含む)
ファイル内staticで代用できるのも多いかと。
>>36 グローバル変数を減らすとグローバルな関数が増えたりする?
>41
>ファイル内staticで代用できるのも多いかと。
そだよねぇ...それともstatic変数もグローバル変数とか言うのかな?
>35
「モジュール=オブジェクト」的に組んでればいらないと思うけど。
洩れ組み込み系やってるけどグローバル変数なんてまず使わないし。
カーネルだってドライバだって同じ。
>39
staticに置くんだよ
>40
割り込みハンドラとそのデバイスで扱うデータ、そのデータへのアクセサを
1つのモジュール(つーかソースファイル)に入れればよかべ。
43 :
仕様書無しさん:02/10/07 23:16
>>42 論理的にはそうだけど、8〜16bitマイコンではそんなことも言ってられないさ。
たとえば簡単な例だと1msecの割り込みでタイマをインクリメントするとしよう。
その資源を各機能で使うためにはどーしてもグローバル変数でのアクセスになる。
メモリに余裕がないからオブジェクト組んでそのインスタンスを使用するなんて事できやしない。
オブジェクト指向っぽくやるとするなら固定長の静的記憶領域をあらかじめ用意してそれを割り当てるぐらいだな。
そうそう言っておくけど1つのファイルにモジュ−ルを詰め込むってのは現実的ではないな。
いくら組み込みって言ってもモジュールの再利用は考慮するし、
プロジェクト組んで何社かで機能分担して開発するしね。
あと組み込みの開発環境にとってはstatic変数は諸刃の剣。
まあ、実際やったことある人にしか解らんか。
ソースを一つのファイルに収める。
これでめでたくグローバル変数はなくなったのであった
>43
んもー。1つのソースにモジュールを詰め込むんじゃなくてソースファイル=モジュール=オブジェクトなんだってばよ。
言語にもよるけどCとかだとソースファイル単位でモジュールって言わねーか?
>そうもいってられない...
洩れ的感覚だとそうも言ってられないのは4bitsマイコンくらいというかアセンブラメインな時くらい。
8bits以上はそうやってるよ。実際に。
まぁstatic使うとコンパイラによってはインラインアセンブラが使いにくくなる時はあるけどな。
>例えば簡単な例だと1ms...
タイマモジュール作るけど何か?
例えばシングルタスクの場合...
ヘッダには開始時刻と終了時刻をメンバに持つ構造体を書いて...
TIMER_Start(TIMER* timer, time_t ticks)でその構造体に現在のtick値と終了時のtick値を格納。
TIMER_IsFinished(TIMER* timer)でその構造体と現在のtick値を比べて真偽を返す。
# 開始<終了なら外がtrue、終了<=開始なら間がtrueだ。
tickは適当な長さのフリーランタイマなら何でもOK。
確かに幾らかメモリ食うけど何発も使えるし何発使っても重くならないのが特徴だ。
こんな感じ。 ここ数年はマルチタスクモノしかやってないから使ってないけどな。
46 :
逝って良しの1 ◆MvRbZL6NeQ :02/10/08 00:55
関数より寿命の長い変数はオブジェクト指向あたりで導入されたんじゃなかったっけ?
グローバルダメって言ってるのは時代に付いて逝けないヤシ?
47 :
仕様書無しさん:02/10/08 00:58
GUID
Global Unique IDentifier
(世界で一つしかない識別子)
48 :
仕様書無しさん:02/10/08 01:09
>>46 グローバル変数とクラスのメンバ変数は違うべ。
逝って良しはちみだろ?
つか、グローバル変数なんて使わなくたって何も困んねーべ。
>>48 無理にグローバル変数使わないで苦労するよりは
使ったほうがよいときは使ったほうがいい。
>>49 同意。
>>43 > static変数は諸刃の剣。
どの辺が問題なのか教えてもらえるとありがたい。
51 :
仕様書無しさん:02/10/08 02:50
>>49 なんで苦労するんだ?
しょぼい設計しかできないアフォーですって告白か?
52 :
逝って良しの1 ◆MvRbZL6NeQ :02/10/08 02:51
マルチスレッドだと無いと困る
54 :
仕様書無しさん:02/10/08 03:00
あのさ、プログラム書かなければグローバル変数もなくなるよ!
>>46 関数の外に書くstaticな変数のスコープは関数より広いよ。
グローバル変数が問題なのはスコープがモジュールを越えちゃうから。
ソースファイルに出てないところで変更されるのってキモくね?
>>52 競合するような資源はほとんどの場合オブジェクトに符合するのでstaticで十分。
それでどうしようもない場合が存在しないとまでは言わないけど、まずそんな事はないよ。
56 :
仕様書無しさん:02/10/12 20:28
>>55 つまりあるデータがあってそれに対する手続きを1ファイルを割り当てる
感じになるのかな?externするのは必要な手続きだけ。
そうするとモジュール間の依存関係がはっきりするね。
staticなデータでもポインタで渡してしまえばもちろん外のモジュール
からでも操作可能なんだけど、必要なところはインターフェイスを
constポインタにしておけば、不正なアクセスされることもない。
逆に言えばstatic指定されていない関数の引数としてconstでない
ポインタが渡ってきたら、それは必ずそのモジュール内での操作が
入るということだよね?
プログラミング初心者として勉強になったよ。
いや、ちょっと違う。
>>42 ちみの考えは時間的制約の少ない上っ面を書く人間の考え。
>>56 そそそ。そんな感じ。
const使うとこまでキチキチにする事は少ないけどね。
いくつもモジュールを渡るようなデータには管理のためにコンテナ作ったりすることもある。
>59
そんなに関数呼び出しにかかる時間が惜しいなら関数使わないでマクロ使ったら?
ま、漏れも構造体アクセスだけの小さい処理ならマクロにしたりするけどさ。
ところで、時間的制約と上っ面って何の関係があるのさ。
そう言うからにはメインループとか作ってCPUに無駄飯食わしてたりしないよねぇ?
61 :
仕様書無しさん:02/10/19 23:26
良スレあげ
62 :
仕様書無しさん:02/10/19 23:40
いや、もう面倒くさいから作りたいように作らせてよ
結局メンテするの俺じゃないし・・・
自分のソフトなら保守性とか考えるけど
会社のソフトなんて時間単価でいくらなんてもんなんだから
キレイに作ろうが汚く作ろうが変わりなし
どんどん作ってさっさと帰るのがいい
悩んでいいコード書いて喜ぶのは会社
俺は苦労のわりに報われない
63 :
仕様書無しさん:02/10/20 00:03
結局のところこういうモラルハザードをなくさない限り無理ということでした。
物事は対処しない限り、どんどん悪くなるからなあ。
やれる範囲でベストを尽くすのがプロなんでしょ。
なんてカッコいいこといってもエラー処理のコードが
山盛り入ったままリリースしたりしているのでした。
エラー処理のコードを入れるのは当たり前だろ。
>>64 やれる範囲でベストを尽くす=やれる範囲外のことはしない=努力しない=モラルハザード
>>65 エラー処理の「きったねー」コードが山盛りの間違いでした
>>66 やれないことはやれないよ
>>67 やれるようになるように努力しろ。最初っから諦めんな。
69 :
仕様書無しさん:02/10/20 10:23
SymbianOS を使え! グローバル変数などという汚い仕様はないZO!
コーディングレベルではちゃんとする。
上流工程で、グローバル変数が前提だったら諦める。
上の人間と交渉するほど金を貰ってない。貰ってたら頑張る。
グローバル変数を撲滅する必要性を論証せよ
>>69 既存プログラムの移植で死ぬ罠
漏れは死にますた
>>62 そう言いたくなるのもわからんでもないけど、悩んで身に付いた技術力まで
会社のモノになるわけじゃないから、丸損ってわけでもないよ。
>>71 ソースファイルを越えるスコープを持つ変数の操作を全て把握するのは大変
なので、そんなことをしても割に合わないから。
こんなんで良いかな?
>>72 移植つらいよな、死にはしなかったが、エライ汚くなったぞ
76 :
仕様書無しさん:02/10/21 09:21
Linuxはグローバル変数結構沢山使ってるね
77 :
仕様書無しさん:02/10/21 12:45
>>74 ローカルで済むのにグローバル変数を使おうとする意図が解かりません。 再提出。
79 :
仕様書無しさん:02/10/23 06:52
Linuxのソースはデータ中心というよりも、
機能に対してファイル名がついている感じだから読みにくい
>>78 そんな、いつからいつまで、どれだけの量を使うのかがはっきり分からないものを使うな。
設計をしたときにどんな変数が必要かきちんと洗い出しをすれば
プログラムのメモリ使用量が完全に把握できるし
ローカルみたいに行き当たりばったりなもの使わなくてもいいだろ。
変数管理表も書かずに適当なもの作ってるんじゃないよ。
それよりgotoならまだしも、setjump(),longjump()を使いまくるヤシをどうにかしてくれ・・・
シェルスクリプトにすらグローバル変数は使わないです
酷く読みにくいと言われますがしったことではありません。
>80
なーんかコピペ臭がするが、とりあえずマヂレス。
マップファイルって知ってるか?
それに、関数ツリー作ればローカル変数でもメモリ消費量の把握はできるぞ。
それから、「いつからいつまで」の所を良く考えるんだな。
変数管理表みたいに人力で管理すればいいなんて考えるなよ。
費用とヒューマンエラー、それからバケツでウランのことも考えるんだな。
81の言うようにじいさんは用済みなんだよ。
>82 ホントかよ(愕
>84サン
メール欄を見ましょうね♪
>>84 マップファイルだと?そんな機械が勝手に作成するものなど信用できない。
バグがあったらどうするんだ。
関数ツリー?mainだけで十分だろ。
作っても1階層程度にしとかないと全体の把握がしづらいだろ。
深い階層の関数呼び出しなぞいちいち手繰ってられるか!
>>83もそうだが、他人のことも考えろ。
ヒューマンエラーなんてほざいてるやつはしっかりしたチェックを怠っていることのいいわけだ。
バケツでウランだって、目視はできるし危険も顧みず立派じゃないか。
あと、年よりは大事にしろ!
>85 おげ。
>86
ゲラゲラ。機械が勝手に作成するものが信用できなくてコンピュータ使うってか〜
あんまり馬鹿さ加減がキマってたんでコピペかマヂかと思っちまった。
ホント。いい仕事してるよ。と、見事に釣られたわけだ(うちゅ
88 :
仕様書無しさん:02/10/23 15:51
大域変数使ってたら
再入可能とか同時実行とか出来ないだろ
89 :
仕様書無しさん:02/10/24 00:23
歳入可能とか動じ実効とかするようなプログラムで
大域変数は使えないだろ
言いたいことが微妙に違った
○ 大域変数は使えないだろ
× 大域変数は使わないだろ
>>87 機械というよりは他人の作ったプログラムと言い換えたほうがいいか。
エクセルだって計算間違いするんだぞ。わけのわからんマクロとやらが
自動計算したって信用ならないからわざわざ電卓で検算するのは常識だ。
>>88 そもそもスレッドの数だって無制限じゃないだろ。まさかいくつ使うか分からないなんて言うまいな。
リエントラントな関数の内部で使う変数は必要な個数分だけあらかじめ用意してミューテックスで管理すればいい。
92 :
仕様書無しさん:02/10/24 01:32
>そもそもスレッドの数だって無制限じゃないだろ。まさかいくつ使うか分からないなんて言うまいな。
>リエントラントな関数の内部で使う変数は必要な個数分だけあらかじめ用意してミューテックスで管理すればいい。
微妙な的のはずし方にワロタ
ゴローバルマンセーマンセー
>42
staticなモジュールはマップされない環境もある。
あと、レジスタにタイマを設定するときはOSCの
1クロック単位にまでこだわって設定しているのだが
そのようなことは解っているのか?
結局グローバル変数とか関数はヘッダでローカルなものとグローバルな物を管理すればよい。
まあ普通のプロジェクトならあたり前だが。
94 :
仕様書無しさん:02/10/24 10:59
>>91 そうきたか〜。
>>93 わかっちょるよ〜。
>マップファイル
gccとか日立謹製H8コンパイラとかはstaticの情報出さないね。
でも合計は出るから問題なし。
>1クロック単位
アセンブラ使ってるのかな?まぁハードリアルタイムみたいにそういう応用
もあるだろうが。まさかコンパイラ使っててそういう事言ってないよねぇ。
73あたりに書いたが、グローバル変数使わないのは「割に合わないから」だ
よ。それが割に合うならそうすりゃよろし。でもそういう場面ってそう多く
はないから基本的には使わない方針。ってのが少なくとも漏れのスタンスな
の。おげ?
大体、同じ意味、同じ物を指すものが複数あるのがけしからん。
main(){
int x=3;int y=0;
y=func(x);
printf("%d,%d",x,y);
}
int func(int x){
x=x+10;
return x*5;
}
なんで結果がx=13にならないんだ、って勘違いするやつも大勢いるぞ。
>>96 "int" main()にシル!
x += 10; にシル!
98 :
仕様書無しさん:02/10/24 18:46
99 :
仕様書無しさん:02/10/24 21:31
ゴローバルマンセー殿
>そもそもスレッドの数だって無制限じゃないだろ。まさかいくつ使うか分からないなんて言うまいな。
>リエントラントな関数の内部で使う変数は必要な個数分だけあらかじめ用意してミューテックスで管理すればいい。
どのようなコーディングになるのでしょうか?
是非ソースコードをアップして頂きたくお願い申し上げます。
tmp=("0)=if (087) ×2
>>96 ぼくちん、Cのことはよくしらないけど、X=3でいいのでつか?
>>99 必死で考えたけど組みきれませんでした。ごめんなさい。
理屈はあってると思うんだけどなぁ・・・
>>102 あってますよ。
funcのxは呼ばれたときに新しく作成されて、関数が終わったら捨てられます。
わーい
もうゴローバルネタは終了?
106 :
仕様書無しさん:02/12/01 10:48
107 :
仕様書無しさん:02/12/06 12:14
なんでPerlerのあふぉは変数にスコープつけまんせんか?
それで速度が速くなるんですか?おまいらの糞CGIの手直しする身にも
なってください。
108 :
仕様書無しさん:02/12/06 12:16
ようはmyぐらいちゃんと使えということです。
これだからPerlがウンコだと言われるのです。
109 :
仕様書無しさん:02/12/06 23:21
ruuuuuuuuuuuuuuuuubbbbbbbbbbyyyyy!!!!!
110 :
仕様書無しさん:02/12/15 15:12
>>82 C++ なら例外機構があるからいいんだけどね。
(^^)
112 :
仕様書無しさん:03/02/16 08:01
Singletonパターンがグローバル変数になるという恐ろしさ。
113 :
仕様書無しさん:03/02/16 08:07
デザパタはウンコもまざってるよな。
シングルトン考えた奴って馬鹿じゃねーの。
こーゆーの使うから地獄がはじまる。
アホがいるな
115 :
仕様書無しさん:03/02/16 10:26
>>113は本当にアホな香具師だ。
名前空間という概念も知らないらしい。
Singletonはアクセス権を変更して使用することで非常に重宝される
手法だと言うことを知らないアホがいるな。
.NET FrameworkはSingletonの塊
118 :
仕様書無しさん:03/02/16 14:57
シングルトンをつかわなきゃいけない状況を作っちゃうプログラムが糞。
と、シングルトンを理解できない奴がわめいております(藁
シングルトン自体にはそんなに問題がないと思うな。
シングルトンをグローバル変数的に使用することは
良くないことだと思うけど。
>>115 まぁ、Javaだと名前空間なんてものは出てこないしな。
# パッケージ名の省略なんて、名前空間なんて大げさなものじゃないでしょ。
あと、「アクセス権を変更して使用することで非常に重宝される」
ってどうゆうこと?
>>122 名前空間が出てこない? 用語が異なるだけでだろ。
Javaは名前空間をpackageで管理してる。
Singletonパターン以外のデザインパターンでは
パターンに当てはまるクラス群の一部の特定のクラスをSingletonにすることで
利便性を図ることができる。ってことで
>>120と考え方はだいたい同じ。
package,namespace外からSingletonになっているクラスに直接
アクセスさせないようにして、Facadeなどからアクセスできるようにすること。
124 :
仕様書無しさん:03/02/16 19:52
利便性を図る?
はぁ?具体的に言えよ。
そんなものねーだろ?
これでつくっちまったら最後、こいつの呼び出しタイミングを制御できないだろ。
一体いつバグったのか何が悪かったのかもわからない。
なんの手続きもなしにいきなりstaticでかまされるんだから組んだ本人しか手のうちようがなくなるんだよ。
>>124 デザインパターンの本読んでください。
Singletonを使うべき状況というのがどういう状況なのか
理解してから発言してください
以上から導かれる結論は、
便利な道具も馬鹿なのび太の手にかかると凶器になるということです。
127 :
仕様書無しさん:03/02/16 21:12
>>126 その通り。
ポインタ演算とかC#のdelegate, プロパティ、boxing&unboxing変換、
unsafeはかなりの凶器だな。
128 :
仕様書無しさん:03/02/16 21:18
ただ一つのクラスをこういう形でアクセスさせるってのが謎だね。
プロジェクト内で打合せしておいて、
引数で渡した方がよっぽど安全な気がするけど。
なんでわざわざnewのところで取得させたりエラー出したりするんだろ?
ばーーーーーーーーーーーーーーーーーーーーーーーーか!
リクエストで変数渡すってか!!!!!!!!
>>128 オブジェクト指向の基礎の基礎から勉強し直して下さい。
「クラスとは何か」「インスタンスとは何か」そのレベルからな。
>>124 > これでつくっちまったら最後、こいつの呼び出しタイミングを制御できないだろ。
> 一体いつバグったのか何が悪かったのかもわからない。
> なんの手続きもなしにいきなりstaticでかまされるんだから組んだ本人しか手のうちようがなくなるんだよ。
い...意味が分からん。
呼び出しのタイミングを制御できない?何の話だ?
いきなりstaticでかまされる?何をだ?
組んだ本人しか手の下しようがない?ハァ?
あなた以外の人にも分かるように書きましょう。
SingletonパターンのSingletonクラスというものがどういうもので何のためにあるのか
理解できていない香具師がいるな。
インスタンスを複数個作らせないようにすることができる、
でわかるだろうか?
オブジェクトの等値判定の意味もわからない香具師だったりして
横槍失礼。
SingletonはGlobal変数の再来。
実際、その点で今だに論議されている。
そしてどんな時必要?Mutex? Semaphore? どっちもJavaでは表現できない。
(多VMプロセスはまたげない)じゃ、どんな時使う?
つーか、なんでもいいけど、Singletonパターンを適用する時は、
マルチスレッドを意識しなきゃにゃならんYO。
134 :
仕様書無しさん:03/02/17 01:42
>>133 ハァ? まだアフォがいるみたいだな。
Javaでマルチスレッド使えることも知らないアフォが。
JavaにMutex#synchronizeが存在するも知らないアフォが。
Semaphoreクラスくらい自分で作れや。
>つーか、なんでもいいけど、Singletonパターンを適用する時は、
>マルチスレッドを意識しなきゃにゃならんYO。
またこいつデマ流しているな。
Singletonにマルチスレッドを意識する必要はねーだろが。
>>134 その煽り口調はどうにかならんか。
>Javaでマルチスレッド使えることも知らないアフォが。
Mutex , Semaphore は、本来「プロセスをまたいで存在するモノ」です。スレッドじゃない。
>Singletonにマルチスレッドを意識する必要はねーだろが。
「Singletonパターンを適用する時は」と言ったのだ。Singletonそのものじゃない。
使う側だよ。
ていうか俺はアフォなので、そのMutexクラスがどのパッケージにあるのか知りません。
教えてもらえます?
>>134 は、Mutual Exclusion の意味を知らないAHO。
だいたいスレッドってなんだか知ってるのか。
137 :
仕様書無しさん:03/02/17 02:29
>>134 あんたもアフォ?
Singletonはマルチスレッドを意識する必要があるよん。
インスタンス生成時に行われる処理でマルチスレッドを意識して書かないと
コンストラクタが何回も走るよ。
2回コンストラクタが走るとやばい時とかどーすんの?
そういうのがバグの元
138 :
仕様書無しさん:03/02/17 02:35
Singletonクラスってなんのためにあるの?
インスタンスを一つにするだけ?
なんでこれを実装の段階でやらなきゃならないのかわからないんだけど。
すくなくとも私のまわりにはグローバル変数みたいに
使ってる人しかいないのでよくわかりません。
>>138 それは、君のまわりがアフォなだけだな。
基本的に、コンストラクタが一回しか走らないことが
保証されているのが重要なのだよ。
単なるグローバル変数で、その保証が出来るのかね?
140 :
仕様書無しさん:03/02/17 02:42
どうしてインスタンスを二つ作ることを防止することを
クラスの動作としていれなければならないのですか?
Singleton は、コンストラクタが2回走っても大丈夫なように作るでしょ
142 :
仕様書無しさん:03/02/17 02:44
>>138 例えば、設定ファイルの情報を保持するクラスConfigFileがあったとしよう。
サーブレットなんかのマルチスレッド環境で、設定ファイルから値を
取得するたびにConfigFileをコンストラクトするのは非常に無駄。
コンストラクトするたびに、設定ファイルのパースがやりなおされる。
そいうことがおきないためにもSingletonは重要よ。
143 :
仕様書無しさん:03/02/17 02:44
>>138 俺はWEBアプリの設定ファイル読み込みとかでよく使うが。
設定ファイルから設定を読み込んで値を返すクラスがあるとする。
最初にそのクラスにアクセスするときは
ファイルを読みに行くが、次からはそのクラスは
静的領域に読みに行くようにする。
設定ファイルがXMLとかで、何度も参照する必要があるときに
パフォーマンスの差がでるね。
こんな感じと理解していいの?
class Singleton {
// ↓ この辺(final)にスレッド意識のヨカーン
public final static Singleton singleObject = new Singleton();
private Singleton() { }
public void fooMethod() { /* 略 */ }
public synchronized void barMethod() { /* 略 */ }
}
で、使う側は
synchronized(class) {
Singleton.singleObject.fooMethod(); // ← 上の例のこのメソッドは同期化されて無いので、意識必要。
}
Singleton.singleObject.barMethod(); // ← こっちは意識されている。
145 :
仕様書無しさん:03/02/17 02:51
>>141 まあ、2回走っても問題のないような作りにはするけどね。
でも、たまにいるよ。2回走るとヤバイ処理を書く人が。
一回しか走らないことが保障されているつもりで
排他処理を行っていて、
結合テストで同時アクアセスなんかをやって
ほぼ再現ができないエラーに悩まされていたアフォがいたよ。
>>142>>143 そういった用途はこのスレ的には「グローバル変数でも出来ること」に
なるような気が…
コンストラクタが一回しか走らないことが必須な用途としては、
スレッドプールやDBコネクションプールなどのリソースプールが
考えられますな。
>>142-143 まさにその通りなんだけど、でもそういう処理って一度パースした後、Contextとかに保存しない?
Contextだとコンテナが完全に眠ってしまうまで、GCの対象にならなかった気が.....。
148 :
仕様書無しさん:03/02/17 02:55
設定ファイルの例ですが、なんでコンストラクタをなんども通るのですか?
>>135 >その煽り口調はどうにかならんか。
あんたの一貫性の無い曖昧な発言をどうにかすればどうにかしてやるよ。
>ていうか俺はアフォなので、そのMutexクラスがどのパッケージにあるのか知りません。
>教えてもらえます?
検索くらい自分でしろ。ないなら自分で作れ
>>136 シンクロくらいしっとるわい。プロセスとスレッドは違うとでも言いたいのか。
>>137 マルチスレッドを使うときに意識するんだろ。
マルチスレッドを全く使わないときは意識も何も関係ないだろ。
Singletonでコンストラクタもフィールドもprivate指定するのは常識だろ。
あんたの言ってるSingletonはアクセス権がすべてpublicになってるものか?
だから
>>133 のいっとることは相変わらず曖昧なんだよ。
Singletonやstatic非final変数をServlet/JSP内で使うアフォと一緒にするな。
150 :
仕様書無しさん:03/02/17 02:58
>>145 >まあ、2回走っても問題のないような作りにはするけどね。
2回走るの意味が違うような。
マルチスレッド環境だと、「Aスレッドがあるクラスの実体化を実行中」に、「Bスレッドが同じクラスの実体化を実行」する
事もありえるわけで.....。
で、要するに「それができちゃうのがマズい」んでは。
singletonはインスタンスの個数と寿命を管理するだけであって
スコープやスレッドセーフとは直接は関係ない。
普通のクラスと同じように考えればいいだけ。
お前らアホ。
>>144 > public class Singleton {
> private static Singleton singleton = new Singleton();
ここはprivateになおしとけよ。
> private Singleton() { }
public static Singleton getInstance(){
return singleton;
}
> }
> で、使う側は
Singleton s1 = Singleton.getInstance();
Singleton s2 = Singleton.getInstance();
if(s1 == s2){ System.out.println("これらは同じインスタンス")}
154 :
仕様書無しさん:03/02/17 03:03
152さん。
それだとこのパターンの存在自体危ういでつ
155 :
仕様書無しさん:03/02/17 03:04
>>149 俺はprivateとかpublicとかなんとも言ってないが。
つーか常識だろ。
まあデザパタを1から勉強するんだな。
>>149 >プロセスとスレッドは違うとでも言いたいのか。
違う。ドリルからやりなおし。
>>152は定義を字義通りにとらえるのみで、
その意味するところを考えることの出来ないアホ
>>150 結城浩のSingletonが漏れにとってのSingletonだと思っていたが問題山積み?
まー、実質Singletonで生成されたオブジェクトがグローバル変数に
近いというのは同意するんだが。グローバル変数も使い方しだいなわけで。
まったく使わないとかほざくのは、嘘つきか無知なだけだろ。
160 :
仕様書無しさん:03/02/17 03:07
>>153 もしマルチスレッド下でコンストラクタの実行に
時間がかかる場合は破綻するよ。
それに
public static Singleton getInstance(){
return singleton;}
nullかどうか見ないのかね?
>>155 構造体でSingleton作ってんのを見たことが無いのか?
>>156 違うこたわかっとる。日本語を間違えた。
プロセスとスレッドは違う、それだけを言いたいのか、と聞いているのだ。
164 :
仕様書無しさん:03/02/17 03:10
つーか、流れをみてると、このパターンを当てにするようなクラスの設計は駄目なんじゃないか?
165 :
仕様書無しさん:03/02/17 03:11
>>164 流れしか見てなくて、内容理解できない馬鹿ハケーン
>>160 Fieldで private static Singleton singleton = new Singleton();
ですでにnewしてるから見るひつようがないと思われ。
167 :
仕様書無しさん:03/02/17 03:11
>>151 走るというのはコンストラクタの事を言っているのだが。
コンストラクタに初期化のロジックを書かないかい?
>>166 こいつはJavaだからできる芸当? C++では駄目?
169 :
仕様書無しさん:03/02/17 03:12
170 :
仕様書無しさん:03/02/17 03:16
IBM方式でもやってみるか。
結城浩本だけではあてんならんな。
singletonの実装方法を3・4種類そらで言えないアフォは今すぐ出て行け。
>>1 グローバル変数をなくしたらCの標準関数の一部が使えなくなるが。
というか実装できなくなる。
public class Singleton {
private static Singleton singleton = new Singleton();
private Singleton() { }
public static Singleton getInstance() { return singleton; }
}
175 :
仕様書無しさん:03/02/17 03:20
結城浩信者いっぱいいるんだな。
確かに香具師の本はすばらしいが。
つーか、デザパタのスレになってきた予感
このスレ見たら、なんかSingletonを本当にグローバル変数の
代わりとしてしか使えないバカが多いんだなぁとびっくりした。
>>142-143なんて、まさに単なるグローバルじゃん。
177 :
仕様書無しさん:03/02/17 03:22
グローバルってなんだよ…
グローバル変数だよ…
180 :
仕様書無しさん:03/02/17 03:24
しかし、JAVAとかC++とかになると
デザインパターンを駆使してソースかけるから楽だよな。
最近ASPとかVBを仕事でやらされているが
VBは特にクソだ。
181 :
仕様書無しさん:03/02/17 03:24
>>172 いや、まずは自分がアフォじゃないこと証明してみ。ハッタリじゃなくて。
182 :
仕様書無しさん:03/02/17 03:27
>>176 グローバル変数っぽくないSingletonオブジェクトが想像できない。
データベース接続とかも、いってしまえばグローバル変数っぽいし。
具体的に教えてくれ。アフォでスマソ。
183 :
仕様書無しさん:03/02/17 03:27
>>176 単にアフォでも分るように一例として出しただけだが。
1インスタンスのみ生成ということの
重要性はあんたより知ってるよ。
>>175 結城浩本ではIBMのdwの
「リスト10. 静的フィールドを使用したSingleton実装」
に相当するみたいだ。かなりシンプルで
シンクロつかわないあれでも問題なさそうだがのう。
結城浩のマルチスレッド本もみなくては
グローバル変数もまともに扱えない低脳ばかりか
186 :
仕様書無しさん:03/02/17 03:31
そもそもsingletonがグローバル変数かどうかっていうのは
話が違うだろ。
singleton:1インスタンスの保障
グローバル変数:スコープの問題
>>162 俺は、「MutexやSemaphoreを、その意味する所の通りに実装するとしても、Javaの空間管理能力では
プロセスをまたげないから、実質正しく実装するのは無理だ」と言った。
(ま、FileやDB等の外部リソース使うとかの強引な方法はあるけど)
それに対して君が、「Javaでマルチスレッド使えることも知らない」と言ったから、
プロセスとスレッドは違うと言った。
また、「JavaにMutex#synchronizeが存在するも知らない」と言ったので、
そんなパッケージは知らない(調べないとわからないようなもの)と言った。
ま、話のフラフラしてたのは認めるよ。スマンね。
結局4例すら挙げられないアフォばっかだな。
189 :
仕様書無しさん:03/02/17 03:34
190 :
仕様書無しさん:03/02/17 03:35
>>188 そんなに4例を知りたいのか?
学校の宿題なら違うスレッドに行け
なんか、てにおは壊れてる上に、知らない内にこんなにスレ進んでたのね。
遅レス、スマン。
関係無いけど、実際、GoFでこのパターンの話が出た時って、こんな↑やりとり行われたんだろうか...。
Are you p-nuts?? とか。(w
193 :
仕様書無しさん:03/02/17 03:41
つーかインスタンス2つ作っちゃいけないならコンストラクタ2回目呼ぶようなプログラムがウンコ。
>>186 単なる文法上の定義と、実際上の用途の区別もつかんバカ発見。
singletonをグローバル変数の変わりに使うことは出来るだろうが。
そして、実際そのように使っている例が多いということだ。
195 :
仕様書無しさん:03/02/17 03:45
結論:デザパタは使えない
結論: 「豚に真珠」は真実だった
>>196 言い過ぎなんじゃなくて、>195がデザパタを理解できないアフォなだけです(藁
199 :
仕様書無しさん:03/02/17 03:48
>>193 だーかーらー、コンストラクタを2回呼ばないようにするのがsingleton。
>>194 わかってるよボケ。アフォでもわかるように書いただけだ。
あんたよりJavaは理解してるつもりだが。
200 :
仕様書無しさん:03/02/17 03:49
>>194 もそっと「グローバル変数の変わりに使う」という言葉を厳密に
表現してみ。「グローバル変数っぽい」とかそういうのじゃなくて。
201 :
仕様書無しさん:03/02/17 03:52
普通に作れないの?
202 :
仕様書無しさん:03/02/17 03:53
>>201 その前後の文脈を無視した突拍子もない質問はなんとかならないですか?
203 :
仕様書無しさん:03/02/17 03:55
そらお前、staticで作ればどっからでもいけるようになるやろ。
204 :
仕様書無しさん:03/02/17 03:57
ぷ
>>202 それを拾うあなたもどうにかしたい。そしてこんなレス書く俺もどうにかして欲しい。(w
206 :
仕様書無しさん:03/02/17 04:02
糞スレだからね
グローバル変数 .. 最初のスコープ上にある変数。なのでその下に連なるアパートメントな各空間内では、
みな一様にそれを参照できる。また、それら各空間の寿命が尽きても、階層的に最後まで生き残る存在。
...と、定義するとなると、本質的にSingletonとは異なってみたり。
って、ただJavaでstaticに表現されたソレは、クラスローダが死ぬまでたった一つだけ存在する訳で、
「寿命」っていう観点から見ると、グローバル変数のような使われ方も出来る、と。
ま、そんだけの話では。
だいたいJavaでグローバル変数って、どうやって作るの? よくわからん。
publicな(またstaticな)メンバ変数を持てば、グローバル変数なの?違うよね。
foo.bar.hoge.where.GlobalVars#variable
っていう変数がSingletonへの参照を保持しているとして、これって、
グローバルなの?
>>208 publicかつstaticなメンバ変数なら、グローバル変数みたいに
使えるんじゃない?
210 :
仕様書無しさん:03/02/17 05:00
で?まさに209のそれなんだが、できたところでどうするんだ?
211 :
通りすがり:03/02/17 07:23
昔オレが組んだ数万行のアセンブラプログラムには、
グローバル変数が数個しかなかった。
そのWin版を作った(らせた)。実装は100%まかせた。言語はC++。
グローバル変数が数百個になっていた。
基本的な素養のないやつにまかせるとこうなるという、悪い例でした。
>>210 それにfinalくっつけて定数扱いってのならあるけど、
まんまで使って有効な場面ってあるのかなー
だれかおせーて
少なくともこの使い方に明日はねぇだろ?
214 :
仕様書無しさん:03/02/17 07:55
灰は灰に。塵は塵に。
クラスが持つべきものはクラスに。
アーメン。
const char *AppName = "HOGEHOGE";
const char *AppVer = "ver1.0";
ってグローバルに書いてる漏れは逝ってよしですか?
216 :
仕様書無しさん:03/02/17 09:34
そういう書き方をしたconstなオブジェクトは、実質的に定数だ。
なので、逝かなくていいよ。
217 :
仕様書無しさん:03/02/17 09:46
一番タチが悪いのは、再代入によって意味がころころ変わるグローバル変数だよ。
>>216 ハァ?
いつでもどこでも
AppVer = "versailles";
とかできるだろ。
是非逝ってよし。
#include <cstdio>
const char *AppVer = "ver1.0";
main()
{
  std::puts( AppVer );
  AppVer = "versailles";
  std::puts( AppVer );
}
-----
ver1.0
versailles
const char *const AppName = "HOGEHOGE";
const char *const AppVer = "ver1.0";
でAppNameとAppVerが指すアドレスはconst_castでも使わない限り変わらない。
あほか
const char * と char * const の区別がついてない奴がいるな
224 :
仕様書無しさん:03/02/18 00:05
今朝まで熱いバトルが続いてたのに!
あげちゃお
次スレタイ決定「誰がコンストラクタを2度呼んだか?」
2chで夜更かし
↓
会社で居眠り
↓
仕事が終わらず残業
↓
深夜帰宅
↓
2chで(略
228 :
仕様書無しさん:03/02/18 00:23
仕事が終わらずって一日単位の仕事の終わりって何よ。
Javaのプロジェクトって1人日が基本って聞いたけど?
とにかくグローバルは子ね
(コーラス)
グローバル グローバル
グローバル グローバル
グローバル グローバル
グローバル グローバル
みんながみえるグローバル
どこでもかきかえグローバル
じょうほういっぱつグローバル
なんてべんりなグローバル
(コーラスくりかえし)
メモリせつやくグローバル
へんすういるならグローバル
みんなでつかおうグローバル
これであんしんグローバル
(コーラスくりかえし)
だからわたしはグローバル
せかいにはばたけグローバル
ぜんとようようグローバル
みらいはばらいろグローバル
(コーラスくりかえし)
(コーラスくりかえし)
グーロ〜〜バ〜〜〜......ルーーーーーーーーーーー!!!
(^^)
∧_∧
( ^^ )< ぬるぽ(^^)
━―━―━―━―━―━―━―━―━[JR山崎駅(^^)]━―━―━―━―━―━―━―━―━―
239 :
仕様書無しさん:03/06/04 13:54
他社低能PGの作ったソースの
グローバル変数に苦しめられています。
c言語できる人のほとんどが(.c)の先頭部分に
グローバル変数を定義し「俺はこれが楽でいいね」
などと、狂ったようなことを言う
関数はすべて xxx func(void) だし
平気で使ってるのを見るとCOBOLerも惨めだけど
c言語ができるっていっても、ほとんどがカスPGだね。
エラそうな顔して c言語ができます って言ってる奴の
ほとんどが カス なのかな。
お兄さんは悲しいぞ
241 :
仕様書無しさん:03/06/04 16:19
242 :
仕様書無しさん:03/06/04 17:22
最近のPGはグローバルを使えないヤシが多すぎる。
ローカル変数だけでは100Mを超える画像処理はできません。
(効率を無視すれば別ですが)
再帰やマルチスレッドも効率低下。
要は両方使えなければ 一人前のプログラマにはなれません。
>>242 FlyWe…
それ以前にポインタとか参照とか知ってますか?
245 :
仕様書無しさん:03/06/05 09:36
至高のグローバル変数
31歳で頭つるつるの人が書いたソースがこんな感じだった。
褒めてやってください
RECDATA stRecTbl[2000];
・・・
/*RDBMSからSELECT*/
・・・
if (nRecCnt > 2000) {
log("エラー発生")
exit(-1);
}
246 :
仕様書無しさん:03/06/05 10:10
>>242 > 最近のPGはグローバルを使えないヤシが多すぎる。
> ローカル変数だけでは100Mを超える画像処理はできません。
馬鹿じゃねえの? このクソジジイが。脳細胞がくさってるんじゃねえの?
一回芯で来いよ。何十年前の話をしてんだよこのファック野郎が。
フィールドもカプセル化もProxyパターンもFlyWeightパターンもオブジェクト指向も知らない
時代遅れのチンカスはこれだから(ry
俺が上司だったらこんなやつそくクビにするね。
> 要は両方使えなければ 一人前のプログラマにはなれません。
フィールドも知らない、グローバル変数がないと何もできないテメーみたいなクズは一生一人前にはなれねえぞ
現代社会に害をもたらす悪のゴミクズが。
>>242を晒し上げ
豪快に釣り上げられてるな(w
魚を釣るつもりでワニを釣ったオッサンを見た気分だ
>>246 オブジェクト指向しか知らない奴も一生一人前にはなれない
250 :
仕様書無しさん:03/06/05 11:21
>>242 ネタだとは思うけど
発想がCOBOLerっぽい。
251 :
仕様書無しさん:03/06/05 11:28
グローバル変数彼女
>>250 速度重視なんじゃねーの?
スレッドはよく使うけど、確かに全体としての
処理速度は1〜2割落ちるよな。
これも処理内容に依存するけど・・・
グローバル変数は適当に使えや。
> グローバル変数は適当に使えや。
この「適当」が分かんない馬鹿が「乱用」したり「撲滅」しようとする。
グローバル変数には毒がある。
毒を毒としてしか使えない奴は使わない方が賢明であろう。
254 :
仕様書無しさん:03/06/05 15:44
>>242については、グローバル変数の使用を禁止している言語ではどうする気じゃ
っていいたいな
>>242がどう答えてくれるか楽しみだ ワクワク
>>254 例えばグローバル変数を禁止している言語で
グローバル変数を使用したよりも意味不明なソースも書けるけど何か?
結局問題はグローバル変数ではなく、言語使用者の意識の問題
class Foo {
public static int hoge;
public static void main(String argv[]) {
Foo f1 = new Foo();
Foo f2 = new Foo();
f1.hoge = 100;
f2.hoge = 200;
System.out.println(f1.hoge); // 200と出力される
}
}
>>255 そういう話題はこのスレでさんざん行われてきた。
賢い香具師ならいまさらfinalでないstatic変数をそんなふう扱ったりはしない。
>>249 オブジェクト指向を知り使いこなしている奴は
効率の良いアルゴリズムもポインタの取り扱いも慣れているとは思うが。
>>256 じゃあ、撲滅すべきなのはグローバル変数ではなく
賢くない香具師を撲滅すべきということで終了かな?
>>257 オブジェクト指向「だけ」では効率の良いアルゴリズムは実装できません
何かオブジェクト指向を全知全能の神様かなにか勘違いしてませんか?
260 :
仕様書無しさん:03/06/05 17:20
いらん所でグローバル変数使うなってんだ アホ
で?なんでスキルの低い奴を撲滅せずに、グローバル変数に怒りの矛先が向くの?
そこら辺がよくわからない。
263 :
仕様書無しさん:03/06/05 18:02
グローバル変数なしに作れるか?
イベントドリブン型のチームプログラミングで...
そんなにグローバル変数が必要なのか?
いらないだろ。Singletonだけでお腹いっぱいだ。
>>259 まあ曲解しすぎだ考えすぎだあんた。だれがそんなことをいったんだ?
オブジェクト指向はアルゴリズム同様ただの道具だろ。
265 :
仕様書無しさん:03/06/05 19:38
>>263 だから いらん所でグローバル変数使うなってんだ ハゲ。
ちゃんと読め。
頭悪い証拠だぞ。
すくなくともC++グローバル変数は不要だ罠。
あのグローバル変数は使用禁止にしようね。
グローバル変数そっくりな扱いになってしまうstatic定数、
Singletonクラスはちゃんとpackage(namespace)化して管理しようね。
267 :
仕様書無しさん:03/06/10 09:30
あーまたプロジェクトリーダーが
グローバル変数を導入した
変更は全APに影響してバグも出てる。
もーこんな馬鹿プロジェクトから逃げたいよ ほんと。
269 :
仕様書無しさん:03/06/10 11:39
プログラム構造管理と
変数管理(名前管理・神性管理)
を混同してはいけないな。
C言語やPascal言語の普及はプログラム生産性
を大いに向上させたがその弊害の最たるものが
これらの混乱。
実はこれらの間の自由度のごく一部しか使わせない
ように制限したのがこれらの構造化言語
この制約は大開発時代には生産性に寄与したもの
のこれからは確実に足かせになるね。
特に変数管理で名前管理と神性管理の混同は
プログラム構造管理と変数管理の混同よりも
深刻な問題を孕んでいる。プログラム構造管理と
名前空間管理の混同は突発的爆発的なクラッシュ
を与える危険性があるものの、再構築を行うチャンス
でもあったりする。
変数管理の混同はもっと深刻でじわじわと
しかし確実にそのプロジェクトの継続性を破壊して
いく。
>>269 「神性管理」?
「変数管理で名前管理と神性管理の混同」は
「プログラム構造管理と変数管理の混同よりも深刻」で、
「プログラム構造管理と名前空間管理の混同」は
「突発的爆発的なクラッシュを与える危険性が」と「再構築を行うチャンス」がある。
「変数管理の混同」は
「確実にそのプロジェクトの継続性を破壊していく」
のか。
まるっきり意味不明なんですが。
>>269 お前も変数管理をきちんとしろ
「神性管理」は他人の辞書には定義されていない。
定義されていない変数を勝手に使うな。
グローバル変数よりもタチが悪い。
変数はあくまでも名前空間の要素と記憶クラスのペアで定義される
抽象オブジェクトに過ぎずそれが実在するか否かは無関係です。記憶クラスを
考慮するのが計算機科学が言語学と決定的に異なる点とされています。
このオブジェクトに抽象的なデータがリンクされ、そのバイナリ表現が
ある物理メモリ領域にマッピングされるわけです。
プログラム構造管理と変数管理技法は似ていて異なるものです。前者が
StaticーMechanicsの見識が必要であるのに対し、後者はDynamicーMechanics
の見識が必須であるという点では対照的であり同時に見かけと全然異なる
内実に驚かされます。
273 :
仕様書無しさん:03/06/11 17:13
すげえ
何言ってるのかさっぱりわからん。
なけなしの知識を頭の中でこねくり回すとそういう文章になるのか
俺は難しい言葉でごまかすやつは信用しない。
理解できててもそういう奴と仕事すると火吹くし
>>273 どこかのWebサイトを自動翻訳にかけただけのような気もするけど
グローバル変数ってなんだっけ
関数のそとに宣言かくとなるんだっけ
exturnとかやんないと違うページから使えないやつ?
C/C++ではグローバルとかスタティックとかはなるべく勘弁して欲しい
見にくいしソースを追えません 関数なんだから全部引数にして入出力をしっかりハッキリして欲しい
じゃなきゃそりゃ関数じゃなくてプロシージャかサブルーチンだ
>>276 グローバルやスタティックを使わず
・スレッドに引数を渡す方法
・singletonパターンを実現する方法
を教えてください。
>>277 > ・スレッドに引数を渡す方法
知りません。スレッド作るときにポインタを渡しとく。知らん。
そんなもん普通は使わん
> ・singletonパターンを実現する方法
singletonって何ですか。知らん。そんなもん普通は使わん
そういうのは除いて、ごくごくフツーのプログラムでは
勘弁して欲しい。ってことで勘弁してくれ。。。
そうか、スレッドを使うと普通じゃないのか・・・
そうだよな、うん、ANSI標準には無いもんな。
singletonも普通じゃない、か・・・
そうだよな、うん、プログラミング言語C第2版には書いてないもんな・・・
┐(´-`)┌ふぅ
しまった。。。某所で使った名前が残ってた(´Д`;)
スレッドぐらいで自慢してやんの (≧▽≦)ギャハハ!
グローバル変数使わないと書けないんだってさ (≧▽≦)ギャハハ!
あー腹いてぇ (≧▽≦)ギャハハ!
>>281 笑い所を間違えとるぞ。
staticなオブジェクトも使わず書いてみ。
経験年数の多いプロパーの人がが作ったソースちらっと眺めてたら
ほとんどの関数に引数がありません
static変数に対していろいろと処理しているのです
なんで引数渡しにしないのだろう。
ちなみに、DBから集計する単純な処理です
速いからだ
バカだからだ
286 :
仕様書無しさん:03/06/26 00:05
>>284 はネタだと思うけど
本気で言ってるのならタダのバカ。
一秒に何百回も呼ばれる関数じゃないよ
一日に10回ぐらいだよ
実際どれぐらい速くなるか調べたら良いさ。
調べ方、わかる? 知らないだろ。レベル低いな
287 :
仕様書無しさん:03/06/26 00:53
うざいな
グローバルな領域におかれた変数を使うより、
スコープが充分に限定された変数の方が
- レジスタに置きやすい
- スタックレジスタ(?)の近くに置きやすい
から、速度的に有利になりそうな気がする。
290 :
仕様書無しさん:03/07/06 09:04
手抜き、不勉強でグローバル変数を使ってる奴が多いな
手抜きで使うのと、
知らずに使うのでは
天と地の差があるが、
結果は一緒だったりして
ごめんなさいごめんなさい。
手抜きでグローバル変数を乱発したプログラムを作ってしまいました。
このプログラムを保守する人には決して僕への連絡先を教えないでください。
お願いします。
あと、これからはこんな事をたくさんするので、お許しください。
293 :
仕様書無しさん:03/07/06 11:49
294 :
仕様書無しさん:03/07/06 12:05
質問です。
libpq(PostgreSQLのライブラリ)使ってるんですけど、
mainで接続し、その接続を別の関数へ渡すためにPGconn*を全ての
データベースへアクセスする関数へ渡しまくっています。
これって実はグローバルで宣言すればかなりすっきりだと思うのですが、
どうでしょうか?
296 :
仕様書無しさん:03/07/06 12:18
攻撃開始
熊本人よ、いい加減にしとけよな。
299 :
仕様書無しさん:03/07/06 12:25
グローバル変数 static にしよう。
でその変数ごとに set と get 作ろう。
だめ?
301 :
仕様書無しさん:03/07/06 13:50
public class Grobal {
private static final String hoge = "FUCKYOU!";
public static String getHoge() { return hoge; }
public static void setHoge(String str) { hoge = str; }
}
//
>>300 だめ、だな。
302 :
仕様書無しさん:03/07/06 14:13
>>301 グローバルインスタンスホルダー?
staticでなければ生成される順番が保障されるだけ少しはましだよ。
かなり馬鹿だと思うけど。
グローバル変数ばかりを目の敵にして
グローバル関数を野放しにする理由が意味不明。
あーあ。言っちゃった。
305 :
仕様書無しさん:03/07/06 17:21
コードの最初にたくさん定数やら変数が定義されてるのはほんとに見る気なくす。
アセンブラで書くにしても、領域確保しといて、
変数はそこからのインクリメント指定で使うようにしたほうが読みやすい。
嫌なのは変数のスペルが間違ってるのに平気なやつね。
英語勉強しれって感じ。
他人の定義した間違ったスペルにあわせてコード組むのがすんごい嫌。
大体グローバル定義なんて、
どの関数で使ってる変数かわからないし、関数の目的がよみづらくなる。
グローバル関数に関してもお話がでてるようだけど、同じことだと思う。
それってWindowsのカプセル化を意識してれば自然となくなるでしょ。
カプセル化することで、クラスの意味も明確にできるし、読みやすくなるはず。
グローバルにするなら関数も変数もそれなりの意味を考えて欲しい。
固定データなんかはグローバル変数に代入しておかない?
ROMに取られるべき物と、RAMに取られるべき物。
>>294 DBオブジェクトとか普通1本のPGMで1つでしょ。
そんならグローバルでもいいや。とか俺も思うね。
309 :
仕様書無しさん:03/07/06 19:48
>>308 グローバル変数ってのは誰でもアクセスができちまうことが問題なんだよ。
個数は問題じゃない。
呼び出し側が無制限に呼び出すため関わらなくていいようなクラスまで
巻き添えをくってしまうときがある。
また、グローバル変数が巨大なクラスにまとめられていたりすると
後でソースをみたとき呼び出し側が最低限必要なものがわからない。
結果バグが増える。
引き数で必要なときに必要な分だけデータを渡せるような設計にするべきだ。
できなきゃそいつは三流PGということで。
グローバル変数より、
const のつかないポインタを無条件に渡している方が漏れは怖い。
グローバル変数の使っている個所は、最悪、検索すればよいが、
ポインタにされてしまうと、検索すら使えない。もうだめぽ。
311 :
仕様書無しさん:03/07/06 20:53
>>310 グローバル変数の問題に比べたら遥かに小さな問題だと思うけど。
ねえ、みんな
もっとグローバルに物事考えようよ
言語によるのでは?
315 :
仕様書無しさん:03/07/06 23:09
いくらマスターだからってさ、
片手間にテキトーに作ったのも判るけどさ、
編集対象のテーブルの全フィールド名を素のまま
グローバル変数できらなくったって・・・!!
316 :
仕様書無しさん:03/07/07 00:04
>>309 >>グローバル変数ってのは誰でもアクセスができちまうことが問題なんだよ。
まぁ俺も大部分ではそう思うけどさ。
DBオブジェクトに限り、問題では無く恩恵を受けることのほうが多いよ。
複数のインスタンスやらスキーマを扱うDBアプリなんて至極まれでしょう?
そういったアプリではグローバル変数も「あり」ではないかと。。
本当にグローバル変数が必要無いのであれば、そのうちJavaでも定義出来なく
なるはずでしょ。一概に駄目では無いと思うよ。(もちろん大部分では駄目だけどね)
318 :
仕様書無しさん:03/07/07 22:27
二日市人よ、いい加減にしろ。
319 :
仕様書無しさん:03/07/07 22:28
ほんとに関数の引数に const char*
ぐらい書けるやつは一人も居ないのが泣けてくるよ。
バーカ。死ねバカ派遣先
320 :
仕様書無しさん:03/07/07 22:30
よく考えたらC++のクラスのメンバ変数も、クラス内のグローバル変数だよな。
うっかりしてたよ。
321 :
名無し@沢村:03/07/07 22:33
グローバル変数って、撲滅委員会を発足しなければならないほど、使ってるやつ多いわけ?
グローバル変数使ってるやつって少ないような気がするが…?
このスレの意図がわからん?
322 :
名無し@沢村:03/07/07 22:39
>>319 はあ?関数の引数に const char* 書けるやつがいない?
ふつー書くだろ、そのくらい?意味がわからん…
代わりに何書いてるの?
const char * って使ったことないな・・・
324 :
名無し@沢村:03/07/07 22:48
>>323 はあ?const char * 使ったことない?
const char * はプログラムの機能向上よりも安全性を高める意味で使うんだよ。
一般的な業務用アプリでも使ったほうがいい場面には山のように出くわすぞ。
一体ふつーどんなプログラム書いてるのよ?
326 :
名無し@沢村:03/07/07 23:14
>>325 プログラミングのことをあまり知らないの?
>>326 馬鹿自己中に、自作ライブラリをとんでもない使いかたされた
挙句に「バグ!なんとかすれ!」と理不尽な要求をされたという
経験がないんじゃないの。幸せデスネエ。
>>326 そんなことはないけど。
char * だけでも動作するし、const に興味が無かった。
330 :
仕様書無しさん:03/07/08 00:26
キャストしちまえばそれまでの話だからねぇ。
ただVC使ってるとどっちが入力でどっちが出力なのかわかりやすい。
俺漏れも,仕事を始めるまでは const 使った事がなかった。
てか,意味が分からなかった。
そんな昔のコード読むとガクブルものだね。
漏れはconst使ってるかどうかを、相手の技量測る目安にしてる。
もっとも今まで出会ったPGの中で、使ってた香具師は1割にも満たないが。
入出力を判りやすくするという意味では
VBで言うところのByValとByRefみたいな感じになるのかな?
>>321 ここにカキコしてるような屋しはグローバル変数なんぞ殆ど使わないレベルなのだろう。
というか、本当にいるんだよ。勉強しねぇ屋詩が。
ヤシらときたら各ソースファイルにそれぞれプロトタイプとかextern変数宣言を書くんだ。
おりゃーそれ見たとき顎がはずれるかと思っただよ。
>>334 新人の頃それを見て真似してたよ。
今は必要な時変数や関数フレンド化している。
・・・っていうかグローバル変数ってほとんど受け渡しに使ってるわけだし、グローバル関数は使いまわしだろ?
フレンドにすればスッキリできて問題解決じゃねーか?
漏れへんな事いってる?
336 :
仕様書無しさん:03/07/08 13:49
関数内で参照するだけなら
○○○ * より
const ○○○ * を使ったほうが
関数内で変更されることはない、と見ただけで分かる
あと、間違って関数内で変更しようとしても
コンパイルエラーがでたりする。 分かりやすい、安全、安い、かっこイイ。
337 :
仕様書無しさん:
引数の型のことです