新規記事投稿
フォロー記事投稿
記事のキャンセル
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様とかにあ様と石堂様とかはかお知り合いですか。
知り合いといえば知り合いです。もちろんお互いの顔や声も、ひとによっては
本名も全く知りませんが、立派な知り合いです。
―そして、三葉工房の管理者さんとも「知り合い」なのかも知れません(^^)