IT ニュース&コラム 2018/ 5/21 通巻763号 技術版 ソフトウェアデザイン館 Sage Plaisir 21  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ■■ グローバルかローカルかを瞬時に分かるようにする - リーダブル コード(50) ■■ デバッグするとき、変数がローカル変数であるか、グローバル変数であるかを 識別することは、重要です。 なぜなら、ローカル変数の値が問題ないかどうかを 調べるときは、関数の中の範囲だけを調べればいいですが、グローバル変数の値が 問題ないかどうかを調べるときは、プロジェクト全体の範囲を調べなければ ならないからです。 範囲が違うと、調べるときに使うツールも違ってきます。 ローカル変数なら、 テキスト エディターのファイル内検索機能を使って、関数の中だけを変数名で 検索すればいいですが、グローバル変数なら、全文検索ツール(例:grep) を使って、多くのファイルの中を検索する必要があります。 ・ローカル スコープ: テキスト エディターのファイル内検索機能 ・グローバル スコープ: 全文検索ツール(例:grep) このことから、注目しようとしている変数が、ローカル変数であるか、 グローバル変数であるかを、瞬時に見分けられるようにしておくべきです。 もし、ローカル変数のつもりで関数の中を検索しても関数の外で変数の値が 変わってしまっているかもしれませんし、グローバル変数のつもりで多くの ファイルを検索しても、関係のない同じ名前の別の変数を読んでしまっているかも しれません。 間違えた検索ツールを使い続けていると、読むのが遅くなりますし、 デバッガーでは変な動きをしているように見えてしまうため、デバッグの作業が 長引いてしまいます。 つまり、ローカル変数であるかグローバル変数であるかに よって使うツールが違うので、ローカル変数であるかグローバル変数であるかを、 瞬時に見分けられるようにしておくべきなのです。 C/C++言語では、グローバル変数の先頭に g_ を付けるコーディング ルールが有名です。 先頭が g_ であるならグローバル変数であり、g_ でないならローカル変数である と瞬時に見分けられます。 local_variable LocalVariable localVariable g_GlobalVariable g_global_variable Java(言語)には、関数の外で定義するグローバル変数がないですが、グローバルな スコープを持つクラス変数があります。クラス変数はクラスの中で public static を付けて宣言した変数です。 クラス変数の先頭に g_ を付ける コーディング ルールは聞いたことがありませんが、そもそも必要ありません。 なぜなら、大文字から始まるクラス名+ピリオド+変数名は、クラス変数であり、 小文字から始まるオブジェクトの変数名+ピリオド+変数名は、インスタンス変数 (C言語のメンバー変数)であると瞬時に見分けられるからです。 ExampleClass.classVariable objectVariable.instanceVariable 関数名はどうでしょうか。 関数名はグローバル(グローバル スコープ)です。 どこからでも関数を呼び出すことができるからです。 C++言語には、1つの関数の 中だけにあるローカル関数もありますが、特殊なケースなので割愛します。 ファイル スコープを持つ関数や変数もあります。 関数の外で、static を付けて宣言する静的関数や静的変数のことです。 別のソースファイルから関数を呼び出したり変数を参照したりすることはできません。 これをファイル スコープといいます。 ただし、Java には、ファイル スコープはありません。 グローバル変数と異なり、ファイル スコープのグローバル変数の先頭には、 gs_ を付けるコーディング ルールを採用している人もいます。 ファイル スコープでも g_ を付ける人もいます。 g_ さえ付けないコーディング ルールを採用している人もいます。 見ただけではローカル変数であるかファイル スコープのグローバル変数であるかを 瞬時に見分けることができませんが、おそらく見分ける必要がないのでしょう。 なぜなら、ローカル変数を検索するときもファイル スコープのグローバル変数を 検索するときも、テキストエディターの検索機能を使うからです。 しかし、サブルーチンに分割するときは、見分けられるようにしておくほうが 素早く分割できます。 ですので、ローカル変数であるかファイル スコープの グローバル変数であるかを、見分けられるようにしておくべきです。 詳しくは 別の機会に説明します。 以上で説明したスコープの種類は、全部で3つになります。 ・ローカル スコープ(C言語の自動変数、Java のローカル変数) ・ファイル スコープ(C言語のグローバル静的変数、C言語の静的関数、Java にはない) ・グローバル スコープ(C言語のグローバル変数、C言語の関数、Java のクラス) ■■ 注目ニュース 一覧 ■■ ◇ だから人はネット詐欺に騙される。その背景にある、確証バイアスとは。 https://japan.cnet.com/article/35118948/ … 投資先企業が実在しても投資詐欺に会う。 ◇ トランプ大統領、ZTEの事業再開に向け習主席と協力。 https://japan.cnet.com/article/35119078/ … 実際に取引禁止することで、なめられなくなる。 ◇ AIがコードの開発を支援してくれる Visual Studio IntelliCode 発表。 https://www.publickey1.jp/blog/18/aivisual_studio_intellicodebuild_2018.html … はじめのうちは余計なお世話が多いだろうが、開発者の分野や好みを学習するだろう。 ◇ Twitter、行動シグナルによる荒らしツイート表示低下へ。健全性向上の一環で。 http://www.itmedia.co.jp/news/articles/1805/16/news058.html … ブロックされたことが多いだけでなく、攻撃的な人は自分もブロックやブロック返しをよく使う。 ◇ アンプラグドプログラミングとは何か?学校での実践方法は? http://techtarget.itmedia.co.jp/tt/news/1805/16/news01.html … 概念を全く場面が違うことで学べるわけがない。全体で目的がある手順書を作り、読むことが大事。 ◇ マイクロソフト、AIモデルをDockerコンテナでパッケージ、ラズパイ、ドローンなどへデプロイ可能に。 https://www.publickey1.jp/blog/18/azureaidockerwindowslinuxbuild_2018.html … いちいちクラウドに通信しなくても、IoTデバイスで学習したことを活用できる。 ◇ Google I-O、Microsoft Build 総まとめ。 https://internet.watch.impress.co.jp/docs/imreboot/news/1122053.html … まとめ。 ■■ ソフトウェアデザイン館 Sage Plaisir 21 ■■ ホームページ >>> http://www.sage-p.com/ メルマガ >>> http://www.mag2.com/m/0000083983.html ブログ >>> http://blog.livedoor.jp/sage_p/ ツイッター >>> http://twitter.com/Ts_Neko ダウンロード >>> http://www.sage-p.com/freesoft.htm サポート掲示板 >>> http://www.sage-p.com/kg_ban09/z6037C8.cgi 東日本大震災 >>> http://www.sage-p.com/saigai.html メール >>> ts-neko◇sage-p.com ←◇を@に変えてください 緊急メールは件名に「うどんメール」を付けてください。 このメルマガの登録・解除 - http://www.mag2.com/m/0000083983.htm