[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Showing posts with label Perl. Show all posts
Showing posts with label Perl. Show all posts

2012-06-28

if (条件A || 条件B) の条件文が長くなったら、どこでコードを折り返すか?

先日、Twitter でタイトルの様な質問に出会った。この問いに簡単に答えたのだけど、140 字では全てを伝えきれないので、改めてブログのエントリーにする。

前置き

短い if 文をこう書くとする。

if (条件A || 条件B) 省略

if 文の中が長くなった時、読みづらい。

if (とっても長〜〜〜い条件A || とっても長〜〜〜い条件B) 省略

この時、どう書くのが良いか? 一例としてこんなのがある。

if (
    とっても長〜〜〜い条件A ||
    とっても長〜〜〜い条件B
) 省略

|| を条件式の後ろに置く書き方。

私見

ぼくは || を条件式の前に置く書き方を好む。

if (
    とっても長〜〜〜い条件A
    || とっても長〜〜〜い条件B
) 省略

インデントが少し崩れる。これはデメリットとして認める。

それよりも、「OR」である事が行頭を見るだけで分かるメリットを強調したい。「前置き」に例示した行末に置くやり方だと、行末まで目を動かさないと、条件式が || で繋がっていることを確認できない。

ぼくらは最初から if (条件A || 条件B) というコードを見ているので「OR」だと分かっているけれども、実際にコードを読む時はそれが「OR」なのか「AND」なのか分かっていない。行頭に置けば、初めて読むコードでも一目瞭然になる。

if (
    とっても長〜〜〜い条件A
    || とっても長〜〜〜い条件B
    || とっても長〜〜〜い条件C
    || とっても長〜〜〜い条件D
    || とっても長〜〜〜い条件E
) 省略

条件文が複雑になった時も、読みやすい。理解しやすい。

if (
    (
      とっても長〜〜〜い条件A
      || とっても長〜〜〜い条件B
    )
    &&
    (
      とっても長〜〜〜い条件C
      || とっても長〜〜〜い条件D
      || とっても長〜〜〜い条件E
    )
) 省略

分かりやすい、ということはバグが減るということ。コーディング一つ取っても、少し気を配るだけでバグを減らせる。

あとがき

本来、こういった長い条件文は、別関数にするのが定石。

ただ、プロファイルを見たらループの中の if 文の条件文がネックになってて、関数呼び出ししないコードにすることでプログラムの致命的な遅さが解決する... なんて泥臭いケースがある。マクロ (Lisp など) やインライン関数 (C99, C++ など) が使える言語なら幸せだけど、そういう言語を使っていない場合もある。

そういう場合に備えて、一つ頭の隅に入れておいてもらえれば。

なお、これはあくまでぼくのやり方にすぎない。他に良い方法があれば、是非、ブログの記事にして欲しい。

2012-05-29

社会人プログラマー向けのお勧め参考書記事が参考になる

という記事を読んだ。書かれたのは 2012-03-30。良記事なので、ブックマークを兼ねて紹介する。

タイトルは「新社会人 Web プログラマ向け」と書いてあるけれども、プログラマーだったら誰でも読む価値あり。大学生・高校生でも読める本は沢山ある。ウェブ・プログラマーじゃなくても、開発手法や VCS (Version Control System) の参考書は勉強になる。こういった参考書を読み漁って十分な知識を得た上級者には、他人に本を薦める時の手間を省いてくれる記事になる。

目次は以下の通り:

  1. プログラマとしての心得
  2. 開発手法
  3. WEB (追加)
  4. データベース
  5. VCS
  6. エディタ
    1. Emacs
    2. Vim
  7. CI/CD
  8. PHP
  9. JavaScript
  10. Ruby
  11. Python
  12. Perl
  13. “プロ”グラマ向け
  14. その他

各項目ごとに参考書が複数冊紹介されており、それぞれにコメントが付けられている。コメントは短いもので一行。たいてい 4 行。本を読んでみようか、興味を持つには十分な長さ。ぼくは全ての本を読んだわけじゃないけれども、良書が並んでいると思う。

2012-04-11

はてなが「はてな教科書」を公開 〜 ウェブアプリケーション作成の基本を解説

はてなが、ウェブアプリケーション作成の基本を学ぶための「はてな教科書」を github 上に公開した。ライセンスは「クリエイティブ・コモンズ 表示 - 非営利 - 継承 2.1」。

この教科書は、エンジニアの手によって執筆されており、サマー・インターンシップなどでも利用されているとのこと。現在の目次は次の通り:

  • Perl によるオブジェクト指向プログラミング
  • ORM によるデータベース操作 (DBIx::MoCo を使った開発)
  • MVC によるウェブアプリケーション開発 (Ridge を使った開発)
  • JavaScript によるイベントドリブン

はてなのサマー・インターンシップの様子はブログで公開している参加者も多い。彼らの様子を見ていると、非常に難易度は高そう。経験者でも、Perl, JavaScript の勉強にはもってこい? フレームワークへのとっかかりとしても良さそう。

2005-05-27

Amazon の画像をローカルに保存 |Amazon|ChangeLogメモ|Perl|wget|

山下さんが、「10年後のためにやっておいた方が良さそうなこと」にて Amazon アソシエイトが提供する広告用の画像をローカルに保存する方法を書いている。本来、 Amazon が提供する画像は、著作権の問題があるので、 Amazon への直リンクが推奨されている。だけど、十年も経った時にその画像へのリンクが残っている保証はないし、 ChangeLog メモのようにローカルで Blog を参照できるシステムでは困ってしまう。そこで、

もちろん現在の商品紹介でローカルに保存した画像を使うことはありません。 あくまで未来へ向けての保存用です。

ということで画像をダウンロードしておく。

Hack

この Hack には Perl と GNU wget を使う。対象は Amazon アソシエイトの画像を含む HTML ファイル。でも山下さんの Hack を見ると、 wget を画像の数だけ呼び出すようになっている。

  wget http://images-jp.amazon.com/images/P/4274065979.09.THUMBZZZ.jpg
  wget http://images-jp.amazon.com/images/P/B0007V1SSA.09.THUMBZZZ.jpg

wget-i オプションを使う方が、システムの負担が小さいと思う。というわけで、quick hack。

 % perl -F"<" -ane 'for(@F){$hash{$1}++
 if(m|(http://.+?/images/P/.+?.jpg)|)}
 END{for(keys%hash){print"$_\n"}}' *.html > a.txt

生成した a.txt を wget で処理する。既にある画像を対象から外すには、次のようにすればよいかな。

 % wget -N -i a.txt

2005-05-07

ama2bib: Amazon から Bib ファイルを作る |TeX|

Amazon から書籍を検索して、結果を bib ファイルとして出力する Perl スクリプト ama2bib を Thor 氏が公開した。同種のサービスに、ドイツの Amatex がある。

      ama2bib -j "奥村晴彦" 2>/dev/null | nkf -e >okumura.bib
    

上記のようにすれば、奥村晴彦氏の文献リストが okumura.bib に作成される。ama2bib には、この他にも ASIN/ISBN で検索するオプションなどもある。非常に便利なソフト。ただし、Amazon 側の制約で著者と訳者を区別できない (当然、監修者や編集者も) などの問題もある。