FC2ブログ
スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
Perlの配列の大きさはどうやって取得してますか?
Perlの配列の大きさなんですが、みなさんはどうやって取得されてるでしょうか?
僕は、初学のうちは $#c という感じで、 $# を使ってました。

しかしこれって、 #$ だったけ? あれ、 $# だったけっとなったりしてうっとうしい。
スカラーを得たい訳ですから、頭が$の$#が正解なわけですが、なんとも紛らわしい。

しかも、$#は、配列の最後のインデックスの値を返します。
配列のインデックスは0から始まりますから、配列の大きさより1少ないわけです。

あー、なんとも覚えないといけないことが多い。
そこで、次の法則を思い出しましょう。
配列はスカラーコンテテキストで評価されると、配列の大きさを返す。

次のソースを見てみてください。
use strict;

my @c = 1..3;
my $d = @c;

print $d     , "\n";
print $#c    , "\n";
print int @c , "\n";


結果:
3
2
3

そうそう、こうやって、スカラーで取得してしまえばいいんです!
ヤッター!

おっと、スカラー変数に配列の大きさを入れて、後で使おうという
次のようなソースはいけてません。

use strict;

my @c = 1..3;
my $d = @c;

# なんか処理

for(my $i=0; $i<$d; $i++){
 # 配列を処理
}


forは、配列分だけ勝ってに回ってくれます。
for(@c){
  #配列を処理
}

こうしましょう。どうしても、処理の都合上、
$i をインクリメントしていく必要があるならば、
for(my $i=0; $i<int @c; $i++){
 # 配列を処理
}

というように、毎回 int で確認しましょう。
え、なんで $d というように配列の大きさを持っちゃいけないんだですって?
それは、「配列の大きさという情報」が「配列そのもの」から分離されてしまったからです。これでは、プログラマはソースを読むときに、余計な変数をひとつ覚えねばなりませんし、配列の大きさが変わったときに、$dの値も更新されているか確認しないといけないし、 まさにどうでもよいことに注意をしなければなりません。
スポンサーサイト
コメントを投稿する
Name:
URL:
Comment:

秘密:管理者にだけ表示を許可する
トラックバック
この記事のトラックバックURL
この記事にトラックバックする(FC2ブログユーザー)
ブログ検索

プロフィール

ビンゴ中西
Perlが好きである。
プログラミング言語のほとんどは独学。独学の過程で多くのプログラム仲間にも色々教わりました。

FC2カウンター

カレンダー

08 | 2018/09 | 10
- - - - - - 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 - - - - - -

ブロとも申請フォーム

この人とブロともになる

| ホーム |
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。