̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ IT ニュース&コラム 2016/12/05 通巻727号 技術版 ソフトウェアデザイン館 Sage Plaisir 21  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄    よく使うコードの断片として登録するべきデバッグ用スニペット プログラミングにおいて、よく使うプログラム コードの断片をスニペットと 言います。 一部のテキスト エディターには、スニペットを簡単に呼び出す機能 が付いています。 最近では、HTML や CSS の記述もスニペットに登録する こともよくあるでしょう。 スニペットを初めて使うときは「便利だ!」と感じることでしょう。 なぜなら、 ほぼ出来上がったコードが一瞬で書かれることと、具体的にどのデータを指定 すべきかがサンプルとして列挙されているからです。 しかし、長い間使っていると登録したいスニペットが多くなってきて、目的の スニペットを選ぶことが面倒になってきます。 たとえ、1、2文字(の略語) をタイプするだけでも、忘れてしまうものです。 ツリー構造で整理したと しても、そのツリーをたどることは、略語をタイプすることより大変です。 むしろ、API 名などで検索した方が速いです。ではなぜ、スニペットは 多くなるのでしょうか。 その原因の1つは、プログラミングには DRY原則があるからです。 DRY とは、 Don't Repeat Yourself の略で、Andy Hunt 氏と Dave Thomas 氏が執筆した 「達人プログラマー―システム開発の職人から名匠への道」に書かれているの ですが、「知識のあらゆる部分はそのシステムにおいて単一で、曖昧さのない、 信頼できる表現でなくてはならない。」という原則です。 簡単に言えば、 データやコードなどは一元化して洗練させなさい、ということです。 誰でも 考えることですけど、実践することが難しいことです。 ただ、プログラミング言語の文法やライブラリが発展したことにより、同じ パターンのコードを何度も書く必要がなくなってきました。 たとえば、 ラムダ式は、小さな関数の定義とその関数の参照を => という謎の記号だけで 書くことができるようになり、スニペットに関数の定義のテンプレートを 登録するまでもなくなりました。 少し話がそれますが、プログラミング言語を学ぶ際、最も重要なことは、 => のような記号の一覧から、その記号の意味や例を検索できるようにして おくことです。 文法上の用語の一覧ではありません。 記号の一覧を作って おくことで、プログラミング言語の難しい仕様を使ってしまったために 他の人がコードを読めなくなるという問題の1つの原因の排除できます。 => という記号を使ってはならない、といったような新機能を否定するルールは、 最新技術を習得することを否定することになり、技術の低下を招きます。 そんな恥ずかしいルールを掲げていたり、最新技術は使えねぇと即非難する 技術者がいては、わが社は技術力があります、なんて恥ずかしくて言えないでしょう。 そうではなく、サンプルなどを付けて分かりやすくした説明書を用意しなければ 使ってはならない、その説明書は常にさらされて改良しなければならない、 というルールにして、技術者を育て合うべきです。 話を戻して、スニペットを張り付けるケースが減ったもう1つの要因は、 API の説明書にサンプルが付くことが結構あたりまえになったことです。 関数名やクラス名で検索してすぐに表示されるサンプルをコピペすれば、 半分完成したプログラム コードの断片ができるわけですから、スニペット を登録するまでもありません。 こうして私もスニペットを使わなくなったのですが、最近また使うようになりました。 それが、デバッグ用スニペットです。 printf デバッグなんて開発環境がしょぼかった古い時代の方法だ、現在は、 高度なデバッガーでも無料で手に入るので、デバッガーを使ったほうがいいに 決まっている、と思ったら大間違いです。 たとえば、大量のデータを扱う ループの中で、特定のデータを調べたいとなったら、デバッガーにブレーク 条件を設定することと、条件を満たしたら printf するコードを書くことの 間に、それほど手間の差はありません。 むしろ、条件付きブレークをどう 設定するのかを調べることのほうが難しかったり、一時的に条件付きブレークを コメントアウトすることができないデバッガーだったりします。 そこで私は、次のデバッグ用スニペット(C言語用)を、Snap Note のノートバー にあるボタンをクリックしたら開くファイルから、コピペできるようにしています。 スニペットの名前(略語)さえ覚える必要はありません。 もちろん、スニペットが書かれたパワポのショートカットでも構いません。 if ( _tcsstr( Name, _T("value") ) != NULL ) {int i=1;} //_TODO: コピペした直後に、目的の変数や値をコピーして、Name と value に ダブルクリック(選択)して貼り付けます。 value は、ファイル名やデータ値の 一部だけを張り付ければよいです。 そして、{int i=1;} の行にブレークポイント を張り、プログラムを再起動します。 こうすることで、大量のデータの中から 特定のデータのときにブレークして、関係する変数の値をいろいろ調べることが できます。 ただし、value に設定する値が分からないときは、事前に次のバッグ用 スニペットを使って、値を調べます。 printf( "111:%d=> variable = %d\n", __LINE__, variable ); //_TODO: コピペした直後に、variable(2か所)に調べたい変数名を張り付けて、 %d を必要なら変更し、プログラムを再起動します。 こうして printf 出力された 内容をテキストエディターに張り付けて、目的の値を検索します。 デバッグ用スニペットを初めて使うときは「便利だ!」と感じることでしょう。 まぁその感動もすぐに常識と化してしまいますが。 また、暗黙知であったデバッグ技術の一部が明文化されるので、他の技術者にも 技術を伝承しやすくなります。 参考: http://www.weblio.jp/content/スニペット https://www.infoq.com/jp/news/2012/05/DRY-code-duplication-coupling http://webnaut.jp/markup/628.html 注目ニュース 一覧 ◇ 金融庁で議論。イノベーションの要、銀行のAPI公開と中間的事業者の関係。 http://japan.zdnet.com/article/35092192/ … API化で多くのアプリから決済を簡単に。 ◇ MacBook Pro を2週間使ってみて。注目の新機能 Touch Bar はどこまで便利か。 http://japan.cnet.com/news/commentary/35092291/ … 結構使えそう。 ◇ テスラの完全自動運転車はどのように走るのか。車内から撮影した動画が公開。 http://japan.cnet.com/news/service/35092540/ http://japan.cnet.com/news/service/35092853/ … 安全第一だから不要なのにスピードを落とす場面もちらほら。この壁は高い。 ◇ グーグルDeepMind、AIの学習を高速化させる新手法を発表。動物の見る夢から着想。 http://japan.zdnet.com/article/35092476/ … AIは高速化が肝心。 報酬に関わるサンプルほど重みを高めた。 ◇ 家からリモコンが消えたなら--ソニー HUIS の設定から使用感まで。 http://japan.cnet.com/sp/cnet_antenna/35091823/ … 学習機能付きリモコンをスマートに。 ◇ Windows 10、デフォルトシェルをコマンドプロンプトからPowerShellへ変更。 http://news.mynavi.jp/news/2016/11/21/374/ http://stknohg.hatenablog.jp/entry/2016/11/19/155916 … エクスプローラーのファイル メニューから選べなくなる。 ◇ Windows 10スマホでPC向けx86アプリが動くようになる? http://www.itmedia.co.jp/pcuser/articles/1612/03/news012.html … ARMでインテルをエミュレーション。 ただし、ニーズはない。 ◇ Android狙うマルウェア Gooligan、100万超のGoogleアカウントに被害。 http://japan.cnet.com/news/service/35093009/ … ハッカーに広告費が持っていかれることは、広告主に悪い印象を与えないか。 ソフトウェアデザイン館 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