ぐろーばりぜーしょん。

ねに
記事: 4
登録日時: 11年前

ぐろーばりぜーしょん。

投稿記事 by ねに » 11年前

グローバル変数に頼りたくなる今日この頃。
別に頼ってもいいんじゃないか。
どうなの。
だってすげー便利。

だってグローバルをやめようとすると、
ものすごく無駄に、いや無駄じゃないのか、だがしかし無駄か、
とにかくなんかこう上手くいえないけど増えすぎてこれはもう意味が良くわからない。

知識も能力も足りてないからスマートなやり方がわからない。
そしてソレをどこで学ぶべきなのかがわからない。
そふとうぇあでざいんとか買えばいいのか。

そういえば日経ソフトウェアのオマケのC言語が一週間弱くらいで
わかる本みたいなの読めばいいのか。
もう先月号の話だ。遅かった。

教則本みたいなのは過去にちょこちょこ買ってて
それらのどこかに書いてあるのかもしれない。

改めて確認したらゲーム製作の本ばっかりで、
C++の基本みたいな本が一冊しかなかった。
それでか(?)


自機の位置とか得点とか効果音のフラグとかいろんなとこで
使うんだからもうグローバルでいいじゃん。
とか思ってたのだけどそういう構成がまちがってるのかもしれない。

グローバルいくない!と、
いろんな関数に自機の位置渡し放題で作ってたけど
これを考え直すのはとても大変なのでわないか。

効果音用のフラグをグローバったらすごい簡単に実装?出来た。
各地で指定のフラグに1いれるだけじゃん!便利!
みたいな?
これをぐろーばらなかったらどんどん各関数に引数が増えてく。
引数?戻り値?とにかく増えそう。

そもそも複数のクラスで共有する変数っていうのが間違いなのか??
いやいやいや共有するでしょ。しないの?するよねぇ。

って考えてるとやはり根本的な知識が足りない。
知らないことが何なのか知らないので、
どういう感じなにをぐぐっていいのかわからん。
うーむ・・・・。

うーむ教授かわいい。超かわいい。
今期で一番かわいい。
二番目はましろたんか。
たんぽぽちゃんも気になる。

という感じで久しぶりに挑戦してた。
とりあえず自弾発射音と敵が死んだ音はつけてみた。

が、ぐろーばってる問題のせいで
このままではダメチームと、
このままでもいいんじゃねチームが派閥争いをしている。

このままでもいいんじゃねチーム優勢。

あと画面遷移でも悩み始めたけどこれはまだはやいか。
とりあえずぐろーばるなこれをもう少し考える。考えない。わからない。

ゲームオーバーに画面というか、シーンを移動させちゃうと
今の作り方では全部リセットされてしまう問題がありそう。

必要なモノ、少なくともこんてぬーした場合は現在進んでる
ステージ数くらいは保持しておきたい。
ハイスコアも保持しておきたいのかもしれない。
・・・グローバル変数として・・・えへ。

もうぐろーばるさんを敵視するのはやめようか。
なかよくしたい。婿入りでも良い。
グローバル一族として猛威を振るいたい。
そして治療薬が普及した際には一緒に駆逐されたい。
好きな駆逐艦は時雨です。かわいい。五月雨はもっとかわいい。

あとパズドラ面白い。年末からはまった。
紅面ドロップしなくて千代女さんが進化できない。


もう何を書き残したいのかわからなくなってきたから
とりあえず必要そうな音まとめる。


効果音的な
・ショット音。
・敵をやっつけた音。
・自分がダメージを負った音。

・敵にダメージが当たったときの音。
・なんかダメージ与えられてない音。
・なにかアイテム取った音。

・ボスが死んだ音・・・・。

・スタートボタン押したときの音 //他のと兼用?
・セレクトボタン押したときの音 //他のと兼用?

・こんてぬーするかどうか悩む時のカウント音???
・ロゴが出たときの音
//・敵が弾うった音


短い音楽?フレーズ?
・ゲームがスタートしたときの
・死んだときの・・・。

長い奴
・ゲーム中BGM
・げーむオーバー中の。
・ゲームクリアの時の。//他と兼用かも。
・スタート画面の?いらない?
・ボスのときの音??


書き終ってから自分の過去の投稿が目に入った。
音も書き出してた。びっくりした。

でも去年のことだからしかたないね。
忘れるね。忘年会のせいだね。

ISLe
記事: 2650
登録日時: 14年前

Re: ぐろーばりぜーしょん。

投稿記事 by ISLe » 11年前

グローバる設計とグローバらない設計の考え方は180度違うのでサンプルプログラムをいくら発展させても永遠に辿り着けないのです。
10年クラスの企業プログラマでも構造化とかオブジェクト指向とかなんとなく使ってるけどいまいち理解できてないというひとがたくさんいるみたいです。
そういうひとは内側に拡張するという考え方が刷り込まれているので、外側に拡張するんだよといろんな説明の仕方を試しているのですが決め手に欠けます。
最後に編集したユーザー ISLe on 2014年2月27日(木) 00:48 [ 編集 3 回目 ]

アバター
せんちゃ
記事: 50
登録日時: 14年前

Re: ぐろーばりぜーしょん。

投稿記事 by せんちゃ » 11年前

私の通ってた専門学校の先生はプログラミングだと二人いて、
一人はアーケードゲームからスタートした生粋のゲーム屋さん
もう一人は生粋のシステム屋さんです。

ゲーム屋さんな先生はわりとグローバル変数はじゃんじゃん使おうぜ、っていうタイプでしたが
システム屋さんな先生はできる限りグローバル変数はないほうが良いと教えてました。

グローバルのデメリットは一ヶ所変えると影響があちこちに波及してしまう点ですが、逆にいえばそれをどうにか簡単に解決できるようにすることができないんじゃこの仕事できないよ。
って教えられました。

最初はじゃんじゃん使えば良いと思います。
後で問題が出ますがその問題点を押さえておけるかどうかが最重要項目です

ISLe
記事: 2650
登録日時: 14年前

Re: ぐろーばりぜーしょん。

投稿記事 by ISLe » 11年前

ちょうど質問掲示板にそんな話題を書き込んだばかりです。
グローバル変数は最終的に精神論でしか解決できないものです。
いくらテストして問題なくても最終製品に組み込まれた瞬間にバグが出るなんてことが起こり得ます。

わたしはゲーム業界入ったころには既にグローバル変数を一切使わないスタイルでした。
そのおかげか分かりませんが、10数年間一度もデスマーチを経験していません。
最後に編集したユーザー ISLe on 2014年2月27日(木) 01:22 [ 編集 1 回目 ]

アバター
へにっくす
記事: 634
登録日時: 13年前

Re: ぐろーばりぜーしょん。

投稿記事 by へにっくす » 11年前

私はどちらかというと、どっちでもえーやん、ってスタイルですが
なんでもグローバルにはしないですね。
例えばC言語で、関数外に変数を作っても、ファイルの中だけにしか使わないのならstaticつけるしね。
他のファイルでも使用する、全部にわたって使う変数であればヘッダーにextern宣言するしね。
適用範囲ってのが自分で見てすぐわかればいいんじゃないのかな。
とくに一人で開発してる場合はね。

ただし複数の人で開発している場合、グローバル変数をだれかれ好き勝手に作られると、
変数名が重なったりとかして思わぬバグを発生させることになります。
なのであなたがもし学生でプログラマーの仕事にこれから就こうと考えているのなら、
何でもかんでもグローバルにすればいいじゃん、という思考は改めてほしいかなと思いますね。
(今までの投稿からして学生さんかなとあたりをつけて発言しています
プロフィールに年齢は秘密とあるので、、、秘密のあっこちゃんかよ ^^;)
最後に編集したユーザー へにっくす on 2014年2月27日(木) 05:27 [ 編集 1 回目 ]

アバター
usao
記事: 1889
登録日時: 12年前

Re: ぐろーばりぜーしょん。

投稿記事 by usao » 11年前

「今回のソフトはこれから三日間で怒涛の勢いで自分一人で書いて完成させ,
 以降,このコードは一切日の目をみることはないのだ! 絶対にな!!」
みたいな場合ならまぁ 便利さ(強力さ) > 危険性 という状況にもなり得る…か?

関数がその関数の外にある(引数で受けてない)変数を直接読み書きすることになると
関数のINとOUTが何なのかがさっぱり把握できなくなるので,
そういうのを書いてしまったとしたら,自分だったら三日後にはそのコードの把握が困難になってそう
(書いた直後しか完全把握してない→見返したときにクエスチョンマーク発生).
しかも「そういうスタイル」の関数が一個でもあると,
他の関数群も(これらについても記憶が薄れているから)そういうことになってるんじゃないの?という不安が払拭できなくなる.
だから 普段からスタイルとして そういうやり方はしない! ということに決めておくことは重要だと思っている.

仮に,ファイル内のconstでないstatic変数(※)が必要 なんて事態になったら
そのファイルにはものすごい勢いでコメント書いとくと思う.

(※)「ファイル内のstatic変数」って,まともには何て表現すればいいのだろうか.
オフトピック
Cの"仮定義"の話はちゃんと知ってなかったなぁ…
Cで組込ソフト みたいな話なんて自分にはもはやまず来ないけど,こういうのは覚えておかないと.
最後に編集したユーザー usao on 2014年2月27日(木) 09:39 [ 編集 1 回目 ]

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前

Re: ぐろーばりぜーしょん。

投稿記事 by softya(ソフト屋) » 11年前

やはり痛い目に会わないとグローバル変数の怖さはわからないと思います。
大きなプログラム、ライブラリの多用、他の人と共同作業などなどが気づく切っ掛けになるでしょうね。
ハマるとしたら謎のバグの発生の原因がグローバル変数に有ったと言うのはよく有る話です。
あと、作ってから時間が経ったあとでメンテする時に恐ろしさを思い知るかもしれません。
オフトピック
変数の見える範囲を限定することが、後々どれだけ自分を楽にしているか経験していない人には分からんとです。

YuO
記事: 947
登録日時: 14年前

Re: ぐろーばりぜーしょん。

投稿記事 by YuO » 11年前

「ぐろーばりぜーしょん」と見て,Globalization,つまりはInternationalization (I18N) + Localization (L10N) あたりの話かと思いました……。
オフトピック
I18Nはまだ簡単だけれども,L10Nはとても面倒。
翻訳するだけがL10Nじゃないんだよと,名前>名字の順で入れるソフト/サイトに言いたい……。
故意のグローバル変数は……PHPでサイトを作った場合に,DBコネクションを最初に作って繋げっぱなしの場合などに使う程度ですね。

CODE:

$db = new PDO(...);
みたいなのをdb.phpとかに書いておくことはあります。

Webサイトのような,ステートレス環境ならばまだ制御可能ですが,アプリケーションのようなステートフル環境では制御できないですね。
同じ名前を別の目的で使うことはよくありますので。
なので,使わないですが使うとしてもせめて名前空間を切らないと制御しきれなくなるか,変数/関数名が非常に長くなるか,です。
# 名前空間分を変数名や関数名に組み込むから。

ISLe
記事: 2650
登録日時: 14年前

Re: ぐろーばりぜーしょん。

投稿記事 by ISLe » 11年前

usao さんが書きました:(※)「ファイル内のstatic変数」って,まともには何て表現すればいいのだろうか.
内部結合の外部変数、ですかね。
内部結合でファイルスコープを持つ変数、とか。

ねに
記事: 4
登録日時: 11年前

Re: ぐろーばりぜーしょん。

投稿記事 by ねに » 11年前

コメントありがとうございます。
自動ログインが解除されてしまってパスワード失念。
登録したメアドもわからずで手間取ってしまいつつも復活。
遠かった。。。。

突き詰めると、グローバルんなら自己責任でね。
しかし乱用するならば、今後苦労する可能性が高いぞ。と。

ぐろーばりたい言い訳はいくらでもできるのですがw
しかし問題はそこというよりも、はてさてどうしたらグローバらずに組めるのか。
という部分だったりもします。

単純にロジック?というか、組み方というか、偏見というか、何か目に見えないものが私をグローバルに走らせる。
じゃなくて、単純に組み方がよくわからないのです。
ちがうなぁ。構成が間違ってるからおかしくなるのか。
たぶん上手にクラスが作れてない。っていうところがすべてな気がする。
気がするだけでなんていうか、やっぱりうーん。

そもそもいろんなクラスで参照にしたい値が存在してることが間違いなのか。
むしろその値を参照する機能を固まりにしてクラスにするべきなのか・・・?

自機クラス、自機弾と敵クラスと敵弾クラスに分けて作ってるけど、
自機弾も敵も敵弾も自機クラスに含まれてる座標が欲しい。
ということは
自機弾も敵も敵弾も同じクラスにしたらよいのか?
違う気がする。
これは素直に引数に自機座標を渡してあげたらよい気もする。
いやしかし。

何かが間違っている気がする。
この辺がもやもやもやもやもやもやもやもや。
いつかこの謎は独学で解けるのだろうか。
なにかよい書籍はないでしょうかね。

結論としては問題私は趣味グラマーであり一人で遊んでるだけっちゃー遊んでるだけなので
ぐろばっても他者に迷惑はかけない。
が、作りたいのはゲームなので、ごちゃごちゃしててバグを潰しにくくなる
という点でぐろばるのは必要最低限でやっていけたらなぁ。という感じですわ!

とりあえずぐろばったのを使うときは、グローバルダヨ!コメントを添えて使おう。
出来れば使いたくないのよ。
ほんとだよ。

ISLe
記事: 2650
登録日時: 14年前

Re: ぐろーばりぜーしょん。

投稿記事 by ISLe » 11年前

ねに さんが書きました:自機クラス、自機弾と敵クラスと敵弾クラスに分けて作ってるけど、
自機弾も敵も敵弾も自機クラスに含まれてる座標が欲しい。
ということは
自機弾も敵も敵弾も同じクラスにしたらよいのか?
違う気がする。
これは素直に引数に自機座標を渡してあげたらよい気もする。
いやしかし。
自機弾が欲しいのは発射地点の座標であって、自機の座標ではないですよね。
敵や敵弾が欲しいのは目標地点の座標であって、自機の座標ではないですよね。

例えば敵や敵弾を作っていて、マウスをちょちょいと動かしてカーソルを目標にちゃんと動くか確認できたら便利だと思いませんか。
最後に編集したユーザー ISLe on 2014年3月02日(日) 16:39 [ 編集 1 回目 ]