« リストモナド | トップページ | オートマトン »

2012年2月29日 (水)

ブログの内容は鵜呑みにしない方がいいですよ(笑)

どうして中途半端な知識しかもっていない人に限って、ドヤ顔で人にその知識 を教えたがるんだろう?

明らかに Ruby 初心者の人が、解説口調で Ruby のコードの説明をしてるブロ グを見つけたんですけど…説明が微妙に間違ってたり、ブログに書かれてるコー ドが妙に冗長だったり…。

 

例えばこんな感じ…。

 

1000回繰り返したかったら

1000.times do |i|
p i
end

これは1から1000までを単に書き出すプログラムになります。

 

以前このブログでも書きましたが、この場合、"i" には 0 〜 999 の値が入る ので実際は 0 から 999 が書き出されます。

プログラミングの経験がある人ならご存知でしょうが、「0 から始まるか、1 から始まるか」をはっきり認識しておかないと、変なバグに悩まされることが あります。

 

また、フィボナッチ数列を表示し続けるコードが提示してあるのですが、無駄 な処理を含んだ冗長なコードです。

 

フィボナッチの数列は前の2つの項さえ分かっていれば新しい項が生成できるので、 変数を3つ用意します。
そして変数に初期値を入れておきます。

a=1
b=2
c=0

aは第1項目、bは第2項目、cは第3項目です。
そしてloop文を制御するカウンターも必要です。

i=3

3項目から求めるのでカウンターは3からスタートです。
事前準備はこれでおk フィボナッチ数列だけをRubyで書くと

a=1
b=2
c=0
i=3
sum=2
loop do
  if i%3==0 then
    p c=a+b
  end
  if i%3==1 then
    p a=c+b
  end
  if i%3==2 then
    p b=c+a
  end
  i=i+1
end

こんな感じになります。

 

なぜか、数値を格納する変数が3個も準備され、さらに loop文を制御するカウンターまで…。

 

ネットで少し調べれば、このコードよりも効率的なコードはすぐに見つかると 思います。

私なら次のようにしますね。

a = 1
b = 1
loop do
  p a
  a, b = a + b, a
end

 

自分でも同じような間違いを過去に(もしかしたら現在も)犯してるのかな?
ブログはいろいろな人の目に留まるから、気をつけないと…。

もし私のブログの内容に間違いを見つけた人がいらっしゃったら、すぐに教え てください。

また、ブログを読む人は一つのブログの内容を鵜呑みにするのではなく、いく つかのブログを読み比べてみたほうがいいと思います。

なお、この記事は自戒のために書いたので、参考のために挙げたブログへのリ ンクやトラックバックは行なっていません。

HTML generated by org-mode 6.33x in emacs 23

« リストモナド | トップページ | オートマトン »

日記・コラム・つぶやき」カテゴリの記事

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/112020/54107774

この記事へのトラックバック一覧です: ブログの内容は鵜呑みにしない方がいいですよ(笑):

« リストモナド | トップページ | オートマトン »

2016年7月
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            
フォト

最近のトラックバック

無料ブログはココログ