̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ IT ニュース&コラム 2012/4/23 通巻567号 縮小版 ソフトウェアデザイン館 Sage Plaisir 21  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ >>> Windows 8 が正式名称に。 * The others Last week watched News  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ◇ Windows 8 が正式名称に、4つの製品エディションも発表。 http://cloud.watch.impress.co.jp/docs/news/20120417_526924.html … ARM版は、Windows RT。 いかにも WinRT しか使えない感じ。 ◇ 14万台のMacがいまだトロイの木馬 Flashback に感染。 http://japan.cnet.com/news/service/35016367/ … Apple メニュー(左上端)から、ソフトウェア・アップデートを選ぶ。 ◇ Windows 7&HDDを高速化するキャッシュ専用SSD、Crucial Adrenaline の実力を探る。 http://news.mynavi.jp/articles/2012/04/12/crucial_adrenaline/index.html … システム・ドライブにも使える。 ◇ Intelの次期プロセッサ Ivy Bridge は Retina ディスプレイ対応。 http://news.mynavi.jp/news/2012/04/13/004/index.html … Mac用。 ◇ ソニー独自の写真、動画連携とは? 担当者に聞く PlayMemories の狙い。 http://av.watch.impress.co.jp/docs/series/rt/20120413_526104.html … クラウド型のフォトストレージにコンテンツでの遊び方をプラス。 ◇ 売り上げゼロのInstagramを10億ドルで買収、Facebookの勝算。 http://cloud.watch.impress.co.jp/docs/column/infostand/20120416_526738.html … Google の YouTube のような、Facebook の Instagram。 ◇ AT&T、音声認識技術 Watson の一部APIを公開へ。 http://japan.cnet.com/news/service/35016418/ … 音声データを送るとテキストが返ってくる? ◇ ジョブズ氏は Android に激怒していた。伝記著者が証言。 http://japan.cnet.com/news/business/35015941/?tag=rightAttn … そりゃ怒るわな。 特にサムソン製は。 ◇ 次期JavaアプリケーションのUI構築を担う Java FX 2.0。 http://builder.japan.zdnet.com/java/35016425/4/ … 10年以上ぶりの新 UI へ。                      Snap Note 3 開発BLOG  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄  [ VBScript の Option Explicit 変数宣言不要論 ] VBScript のファイルの先頭に、Option Explicit を記述すると、変数の Dim 宣言 を必須にすることで、面倒だけど、いろいろな警告によって品質の高いプログラムを 低いコストで作ることができると考えられてきましたが、そうでもないようです。 変数の宣言が必要なプログラミング言語の場合、変数の宣言をし忘れて書き直すことが よくあり、コストになっています。 さらに、任意型の宣言は、意味がよく分からないため、 可読性を下げます。 逆に言えば、変数宣言が不要であれば、可読性を上げるのです。 このためか、新しいプログラミング言語 Python などは、ローカル変数の宣言を無くしています。 VBScript で、Option Explicit を使った場合、よく遭遇するのは、変数を宣言していない というエラーです。 このエラーを対処するには、デバッガーを使う形で最初からやり直して、 衝突している変数を知って、Dim 宣言を追加して、また最初からやり直す必要があります。 つまり、2回も再起動が必要になります。 これは結構なコストです。 もし、デバッガー が無ければ、対処は更に困難になります。 Option Explicit を使っている人は、このコストの大きさに気づいていません。 (私も気づくのに時間がかかりました) VBScript の Dim は、変数名の衝突を早期に検出すること以外に機能はありません。 プログラミング言語によっては変数の型を決めることがありますが、VBScript は、 変数にどの型の値でも入るため変数の型を決める機能はありません。 衝突を検出するだけの命令文は、プログラムが何かをする命令文ではありません。 これは問題です。 プログラムが何をしようとしているのかを理解しようとするときに、 実は何もしていないモノに遭遇しても、何をしようとしているのか懸命に探します。 この脳の状態で、実は何もしていない、ということに気づくのは大変なことです。 大きなコストになります。 また、何もしていないことを読まされることは不快です。 Dim 命令の説明でよくあるのが、使っている変数を挙げているとありますが、別に Dim 命令が無くても使っている変数は分かります。 変数を初期化している文で、 よく理解できます。 Dim はくどいのです。 変数宣言を不要とした場合、変数名が衝突していないことを裏付けることが、Dim 文を実行するときから、テストに合格するときまで遅れます。 これにより、衝突して いる問題を解決することが、少しだけ難しくなります。 どれだけ難しくなるかを、見てみましょう。 Sub MyTest()  name = "MyName"  name = "YourName"  Assert FuncA( name ) = "Taro" End Sub これは、name = "MyName" であることを期待しているテスト・スクリプトで、name が "YourName" に変わったためにテストに失敗しています。 この原因を追究するときは、 name の値をどこで代入しているかを調べることになります。 name を上方向に検索して、 name = "YourName" が見つかり、それを対処することになります。 実は、これは、変数が衝突したときよりも発生頻度が高い、一般的なミスによって name の値が違っているケースと同じ対処法です。 確かに Dim 文によって衝突を検出した 方が速く原因が特定できますが、検出しなくても一般的な対処法で済むわけです。 ローカル変数同士が衝突した場合、原因は、その関数の中だけに絞られます。 つまり、呼び出した先の関数に原因がある一般的なミスに比べると、原因がある範囲が 限定的なので、対処が比較的簡単です。 グローバル変数同士の衝突は、一般的なミスの対処と変わりません。 また、Option Explicit を使っても、VBS ファイルをモジュール別に分けていると、Dim を使っても衝突を 検出できません。 ローカル変数のつもりで使った変数が、実はグローバル変数だったとき、つまり、 グローバル変数がローカル変数に衝突した場合は、ローカル変数のつもりでデバッグを 行おうとするため、対処が困難でしょう。 しかし、グローバル変数の名前の先頭に "g_" を付けるコーディング・ルールなどを適用すれば、その問題は無くなります。 Python では、「global」 命令によって問題を回避しています。 変数名が衝突するミスは、Dim 文の記述を忘れるミスに比べると、かなり発生頻度が 低いです。 衝突する頻度が低い理由は、意味が異なる変数には、通常異なる名前を 付けるからです。 Dim 文の記述を忘れることが多い理由かは、Dim が何かをする 命令文ではないからです。 何かをさせるために記述しているときに、させることが全て 記述できたら、完成と思うからです。 以上から、発生頻度と修正コストを総合して考えると、Option Explicit をつけた方が コストが高くなるというわけです。 下記のホームページでは、Dim の必要性を説明していますが、必要の根拠となる機能 が無くても、すぐに別のエラーで知ることが出来るため、問題として挙げられていること が真の問題の解決を困難にすることはありません。 参考: 変数宣言を強制しないといけないのか。 http://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub04_200_030.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  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ News & Column are composed by T's-Neko 2012  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄