新規記事投稿 フォロー記事投稿 記事のキャンセル
From: Yasu.F <yasuf@big.or.jp>
Subject: Re: 不都合な配列の性格に阻まれて(回答します。)
Date: 1999/02/10 07:21:16
Reference: mesh.program/00623

丁寧な回答をありがとうございます。
フォローが遅くなってしまって申し訳ないです。

2月8日に、三葉工房の管理者さんは書きました。

>A.これは,MacParl上のテスト用で,適当にmartとかgghとかの名前を付けただけです。

ちょっとした(簡単な、短い)コードのテストでしたらこれでも問題は無い
でしょうけど、少し込み入ったことをしようとすると途中で何が何だか
わからなくなる可能性もありますので、

  - 適切な名前を考える手間
  - いい加減に付けた名前が何を意味しているのか考える手間
  - 上記のどちらのほうがコストが掛かるか考える手間:)

などを比べたうえでのバランス感覚でしょうね。

# いつでも適切な名前を考えろ、と言っているわけではないです
# わたしもone-liner(“一行野郎”、シェルのコマンドラインで、
# "perl -e" の引数として直接入力して実行するような単純なプログラム)を
# 書くときなどは、面倒くさいので変数には大抵いい加減な名前を付けます

>A.適当な称号を使っているので,自分か,若くは,よほど簡単なプログラムでなければ
>分からないと思います。

それだと、他人に見せるためのプログラムとしては不親切ですよね。
相手が知りたいのは、「あなたがどんな文字列をタイプしたか」ではなく、
「あなたがどんなコードを実行しようとしたのか」なのですから。

>A.そうですね。プログラムは,分かり易く書くべきと思います。だんだん,プログラミングに
>慣れるに従ってメチャクチャになりましたので。

たぶん逆だと思います。というより、逆でないと将来きっと困ることになります。

よい癖でも悪い癖でも、身に付けるのは簡単ですが、取り除くのは至難の
技です。同じ癖なら、よい癖のほうを最初から身に付けておいたほうが幸せに
なれるでしょう。

>># ちなみに、何故「17」ではなく「16」なのか理解してます?
>
>A.配列は,C Languageと同じく0から数えるから。17は,$arrycnt=@arryと言う
>形の配列の値の合計値を数えている。

# 「配列の値の合計値」って、どういう意味で使ってます?
# 「配列に含まれる要素の数」ではないですか?

そうではありません。
元の記事のプログラムを、目を凝らしてよぉ〜く読んでみてください。

# ヒント:
#  $foo = "one
#  two" .
#  "three";
#  $bar = "four";
#  print $foo,
#  $bar;
# は何を表示するか?

>A.上記の
>>同様に、$scalar = @array;をMacperlで実行してみました。

# まずご自分で考えてみて、それから実際に実行して、結果を比較して
# いただけると、もっとよかったのですが;)

>@arrayを$scalarへの1回目の代入は,@arrayの配列が記述されていますので,
>3が返ります。
>しかし,更に@arrayの入った$scalarから更に配列へ代入すれば,それは,単なる
>1要素に過ぎないとみなされますので,@arrayを$scalarへの2週目の代入で値は
>1が返ります。

だいたい合っていると思います。

# キーワード: 「スカラコンテキスト」「リスト(配列)コンテキスト」

>A.上記の質問は,黒幕的存在という記事で答えました。本来は
>foreach $keymatch(@keymatch){
(snip)

# おや、「プログラミングの書法」はどうなりましたか? ;)

>A.その様に次回から心がけます。(これだけ無作法な行為をして投稿する資格は
>あるはずないのですが。)

そんなことはありません。

ほんとうに嫌がられるのは、間違った内容を投稿することでも、分かりづらい
文章を投稿することでもありません。
それらを指摘されても改善しようとせず、同じような投稿を繰り返すことです。

「過つは人の常」。大事なのは、そのあとどうするか、です。

>1.YASU様は,perlを始めて何年になりますか。

最初にPerlに触れたのは、NEC PC-9801DAという古いマシンで動く、MS-DOSという
これまた今となっては古くさい(しかし何故かWindows98の根幹を成している:)
OSに移植された 日本語化Perl 4.036 というバージョンです。
これが、既に曖昧になってきている記憶を辿ると、1995年のことだったと
思います。

ですから途中のブランクを無視すれば、Perl歴は約4年ということになる
でしょうか。

>2.perlのプログラミングで一番つまづいた経験はなんですか。

そうですね… いちばん苦労したのは、Perlの「TMTOWTDI (There's More Than
One Way To Do It; それには何通りもの方法がある)」というスローガン
そのものを体に馴染ませること、でしょうか。

自由度が高いということは、裏を返せばそれだけ節操の無い書き方ができると
いうことでもあります。TMTOWTDIだからといって、「どれでも結局同じ
なんだから適当に選んどけばいいや」とやってしまうと(もちろんこれでも
いい局面もありますが)、あとで誰かが(あるいは自分自身が)プログラムを読む
ときに、作者がどういう意図を持ってそのコードを書いたのかが伝わりにくく
なってしまいます。

# ある意味では、「名前の付け方」と同じ問題がここにもある、とも言えます

例えばPerl5では、次の3つの文はほぼ同じ働きをしますが、それぞれの持つ
「意味合い」は少しずつ異なっています:

  foo("bar") or baz($zot, @qux);
  baz($zot, @qux) unless foo("bar");
  baz($zot, @qux) if not foo("bar");

「TMTOWTDI、じゃあこの局面ではどうするのがベストだろう?」そういった
自分なりのプログラミングスタイルを見出すまでの間、たくさんの「読み出し
不能な」プログラムが、ハードディスクの中に現れては消えていきました。

>3.回答者の方々は,ふだんは,どんな事をしているのですか。そして,

普段はhacking(と自分では思っている行為)をやってます:)
ほかに、とあるISP(いわゆるプロバイダ)のサーバのお守りをしていることも
あります。

>TAD様とかにあ様と石堂様とかはかお知り合いですか。

知り合いといえば知り合いです。もちろんお互いの顔や声も、ひとによっては
本名も全く知りませんが、立派な知り合いです。

―そして、三葉工房の管理者さんとも「知り合い」なのかも知れません(^^)