トップページ⇒tech
91コメント19KB

グローバル関数は悪者?

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
オブジェクト指向の隆盛に伴うカプセル化の流行の影響だろうか?
最近何故かよく見かけるようになった単語、「グローバル関数」。

これっていわゆる「グローバル変数」と同じように、言語が
その機能をサポートしてさえいれば、できるだけ削減するように
努めた方がいいものなの?
一見すると同じ「グローバル仲間」ということで悪者扱いされがちだが、
関数のスコープがグローバルである事によって発生する問題というのは、
関数の命名時に起こる名前の衝突ぐらいしか思いつかんのだが。。。

関数の量が多くなると管理ができなくなるというのは論外。
それは管理をする側が悪いだけ。

「グローバル変数」が多い為にバグが発生することはあり得るが、
「グローバル関数」が多い為にバグが発生するなどということはあり得ない。
0002デフォルトの名無しさんNGNG
こんなグローバル化社会の時代に・・・
0003デフォルトの名無しさんNGNG
グローバル関数が悪いって言ってるやつ見たこと無いよ
0004デフォルトの名無しさんNGNG
>>1
誰かそんなこといったか?
Mathクラスのstaticなsinメソッドと
Math名前空間のsinグローバル関数に何の違いがある?
言語上の制約による問題だけだろ。
0005デフォルトの名無しさんNGNG
>>4
>誰かそんなこといったか?
例)
http://bbs2.gamdev.org/test/read.cgi/gamedev/1054282821/145
http://pc2.2ch.net/test/read.cgi/tech/1064541405/369
他にも google などで検索すれば使用を避けるように
薦めている文が簡単に見つかる。
0006デフォルトの名無しさんNGNG
1もsageか・・・
0007デフォルトの名無しさんNGNG
>>6
謙虚な性格なので・・・
0008デフォルトの名無しさんNGNG
>グローバル関数・変数はなるべくnamespaceで包む

って書いてるけど?

namespaceで包んでないグローバル関数は悪だとオレも思う
0009デフォルトの名無しさんNGNG
>>5
上のURLは読んでないのでわざわざ見に行かないが、
下のURLはグローバル関数は使うなとは言ってないように見えるが。
0010デフォルトの名無しさんNGNG
>>8
そういうのは「ぐろーばるねーむすぺーすをおせんするのはよくない」といいます。
0011デフォルトの名無しさんNGNG
>>10
まったくその通りでございますが、なにか?
0012デフォルトの名無しさんNGNG
>>11
「namespaceで包んでないグローバル関数は悪」と主張するより、
「グローバルネームスペースを汚染する行為はよくない」と主張したほうがよいという話だ。
0013デフォルトの名無しさんNGNG
ハァそうですか。

オナジジャン
0014デフォルトの名無しさんNGNG
後者はクラスも変数も含むので全然違う。
0015デフォルトの名無しさんNGNG
>>12
きみにとっては同じなんだろうね。
0016デフォルトの名無しさんNGNG
マ板でやれや
0017デフォルトの名無しさんNGNG
馬鹿ばっかりだな(w
0018デフォルトの名無しさんNGNG
特に16がな(w
0019デフォルトの名無しさんNGNG
こういう会話を見ると、論理的思考能力って大切だなぁと実感しますな。
0020デフォルトの名無しさんNGNG
ネームスペースって本来がバカヨケの機能なんだから。
0021デフォルトの名無しさんNGNG
>>20
違います。
0022デフォルトの名無しさんNGNG
( ´_ゝ`)フーン
0023デフォルトの名無しさんNGNG
ネタスレはマ板で。
0024デフォルトの名無しさんNGNG
>>1
グローバル関数を使用禁止にした言語を使用していたものにとって
グローバル関数をゆるせる言語はとても奇異にみえるのだよ。
パターンのひとつ、デザインパターンくらいは知っておるな?
インスタンスメソッドとstaticメソッドとの違いはわかるな?
グローバル関数を許容するということはstaticメソッドを許容するようなものなのだぞ。
staticメソッドは重たい計算以外には極力使用することを避けるべきだ。
0025デフォルトの名無しさんNGNG
>>24
じゃあ標準ライブラリも使えないね。
0026デフォルトの名無しさんNGNG
>>25
馬鹿?
0027デフォルトの名無しさんNGNG
>>24
システムコール使った事無いみたいだね。
0028デフォルトの名無しさんNGNG
>>27
馬鹿?
0029デフォルトの名無しさんNGNG
最近のJavaやC#などの言語がグローバル関数を許してないのは何か思想的な理由があるわけじゃなくて、リファクタリングが型ベースで行われるからだよ。
0030デフォルトの名無しさんNGNG
>>29
馬鹿?
0031デフォルトの名無しさんNGNG
>>24
おまえ、インスタンスメソッドはインスタンスごとにコードを持ってると思ってるだろ。
0032デフォルトの名無しさんNGNG
>>20
そういうお前はおまいはソフトウェアの品質を下げる厨
0033デフォルトの名無しさんNGNG
>>24
アセンブラから勉強し直しなさい。
0034デフォルトの名無しさんNGNG
グローバル関数がそのスコープ内に
staticな変数もってるなら、
それは悪だと思う。
0035デフォルトの名無しさんNGNG
>>34
馬鹿?
0036デフォルトの名無しさんNGNG
>>32
そういう君は過剰サービスという言葉も知らない童貞。
0037デフォルトの名無しさんNGNG
34じゃないが
関数を抜けても値が保持され続ける静的変数という意味でのstaticな変数は
ロガーみたいなもんに使うのならまだしも
それによって振る舞いが変わるようだったら悪だろ。
0038デフォルトの名無しさんNGNG
>>37
だったらグローバルなOSの資源は使えないね。
0039デフォルトの名無しさんNGNG
sin(x)、sqrt(x)みたいなリエントラントな関数は全く無害だわさ。
オブジェクト指向以前に、
可能ならこういう副作用ゼロの関数を書くのは昔からのマナー。
0040デフォルトの名無しさんNGNG
名前考えるのめんどいんでネームスペースは使いたいです。
0041デフォルトの名無しさんNGNG
>>38
?
俺のWindowsやLinuxはちゃんと資源をカプセル化して各種取り合いに対応できるようになってるけど。
0042デフォルトの名無しさんNGNG
>>41
グローバルなOSの資源も、static変数と同じようなものなんだが。
0043デフォルトの名無しさんNGNG
fork出来ない時点でWindowsは資源のカプセルかが不十分
0044デフォルトの名無しさんNGNG
つれるといいね
0045デフォルトの名無しさんNGNG
>>43
Windowsでもforkできますよ?
0046デフォルトの名無しさんNGNG
つれてよかったね
0047デフォルトの名無しさんNGNG
>>42
アホがいます。
0048デフォルトの名無しさんNGNG
>>37
OpenGLは使えないね
0049デフォルトの名無しさんNGNG
>>47
ファイルスコープやモジュールスコープ、プロセススコープを超えるOSスコープのスーパー
ウルトラ外部変数があるぞ。リブートを超えるエクストラスーパーウルトラ外部変数もありだ。
0050デフォルトの名無しさんNGNG
って言うか、カーネルモード内では
メモリ保護機能も糞もない。
0051デフォルトの名無しさんNGNG
>>49
アホがいます
0052デフォルトの名無しさんNGNG
なんかgotoはだめだけど、俺はbreakとcontinueは使うよって話によく似てる。
0053デフォルトの名無しさんNGNG
>>39
副作用がないことと、リエントラントであることは別もんだよ。
0054デフォルトの名無しさんNGNG
>>53
もっと論理的思考能力を磨くか、意思伝達能力を磨きましょうね。
0055デフォルトの名無しさんNGNG
>>54
はぁ ?
俺の意見が正しいかどうかは別にしても、意志が「お前には」通じないと言うことか ?
わざわざ、アフォさ加減を世間に公表しなくてもいいと思うよ。
0056第三者NGNG
>>55
お前モナ。
0057デフォルトの名無しさんNGNG
>>54=>>56
0058さらに別の第三者NGNG
>>53,55
自分の恥ずかしさ加減に気づかないとは。
せっかく指摘してくれてるんだから、なぜそう言われたのか、ちょっとは考えたら?
0059デフォルトの名無しさんNGNG
>>54=>>56=>>58
具体的に指摘してみな。
0060デフォルトの名無しさんNGNG
>>59
最近お前みたいなガキが増えたな。
自分で考えろよ。
0061デフォルトの名無しさんNGNG
で、結局指摘できないのな。(ププッ
0062デフォルトの名無しさんNGNG
>>61
>>60
プッ
0063デフォルトの名無しさんNGNG
>>54=>>56=>>58=>>60=>>62
アフォなくせに粘着厨か...。
0064デフォルトの名無しさんNGNG
ここは人格攻撃によって成り立っているインターネットですね
0065デフォルトの名無しさんNGNG
結論


グローバル関数の使用はひかえめに
0066デフォルトの名無しさんNGNG
グローバルメソッドを利用するにしてもちゃんとnamespaceで括って
staticな変数を使わないようにすりゃいいんでしょ?
0067デフォルトの名無しさんNGNG
グローバルやstaticの使いどきってやつを話あったほうが有益だろう。
0068デフォルトの名無しさんNGNG
>>66
そこまでするならアクセサメソッド作って
シングルトンにしてしまえよ。
0069デフォルトの名無しさんNGNG
グローバル関数/変数が必要な場面に出会ったことがないので使った事ないです
0070デフォルトの名無しさんNGNG
個人でどうでもいいバッチプログラム書いているときは使うかもしれない
0071デフォルトの名無しさんNGNG
とんでもなく大きいループ回すときは、ループ変数がグローバルだと
もしかしたら微妙に速かったりするかも知れなかったりなんかしちゃったりして。
0072デフォルトの名無しさんNGNG
>>69
制御分野なら嫌になるほど経験できるよ。
0073デフォルトの名無しさんNGNG
namespace system {
#include <sys/unistd.h>
}
0074デフォルトの名無しさんNGNG
モジュールの外部にインターフェイスとして公開している関数を区別して、
処理の詳細を受け持つ関数に直接アクセスさせるなっていうだけの話でしょ。
0075デフォルトの名無しさんNGNG
俺の作ったソフトウェアの変数は
みんなシングルトンなので問題なし!
0076デフォルトの名無しさんNGNG
>>71
そこで register int ですよ
0077デフォルトの名無しさんNGNG
>>76
馬鹿?
0078デフォルトの名無しさんNGNG
>76
 アフォ。大きなループでそんなんしたら、レジスターが一個使えんようになる。
  言語能力が足りんのだ。言語能力と記憶力が発達していると
 全部グローバルで書いても、スマートな芸術的プログラムが書けるのだ。
  おまけに、俺だけに理解できて、誰にも理解できないプログラムだって書ける。
 
0079デフォルトの名無しさんNGNG
>>78
馬鹿?
0080デフォルトの名無しさんNGNG

宗教上の理由でしょうね。
カプセル抱えて自爆テロしかねないんで
ほっておくしかありません。
0081デフォルトの名無しさんNGNG
>>80
馬鹿?
0082デフォルトの名無しさんNGNG

オブジェクト指向の他に神なし。
オブジェクト指向は偉大なり。
0083デフォルトの名無しさんNGNG
>>82
馬鹿?
0084COBOL命NGNG
グローバル変数なしでジョブなんか書けないだろ。
0085デフォルトの名無しさんNGNG
・グローバル変数はとにかく悪だよ派
・名前空間で区切れば問題ないよ派
・グローバル変数はソース公開しても自分にしか理解できない
 最強のプログラムをかけるので最高だよ派
0086デフォルトの名無しさんNGNG
・スレタイなんて読まないよ派
0087デフォルトの名無しさんNGNG
>>82
オブジェークト。

じゃなかった。

オブイェークト。
0088デフォルトの名無しさんNGNG
・グローバル変数にi派
0089デフォルトの名無しさんNGNG
sizeof(int)=sizeof(ポインタ)派
0090デフォルトの名無しさんNGNG
>>1
関数名を AfxxxxにすればOK
0091デフォルトの名無しさんNGNG
Afo_na_kyujyu_ga_iru
■ このスレッドは過去ログ倉庫に格納されています