トップ «前の日記(2008-05-19) 最新 次の日記(2008-05-21)» 編集

日々の破片

著作一覧

2008-05-20

_ APIを考える

単にメソッドの引数についてだ。この話は、3ヶ月後くらいにインスタンス化される書籍(翻訳もの)について軽くレビューしていて思ったことだ。というか、その本にも出ている内容だけど、ネタバレということではないので、考えたうちに書いておく。

今、ファイルをコピーするメソッドを作ろうとしているとする。

じょーこーなら、copy(src, dst)あるいはcopy(dst, src)のいずれかになるだろう。

だったら、そんなメソッドは作る必要はない。require 'fileutils'すればよい。

そうではなく、こういうコピーをしたいのだ、とする。

copy src1, src2, src3, src4, src5, dst

あるいは

copy src, dst

メソッドオーバーロードがあれば(C#にしとくか)

copy(string[] srcs, string dst)

copy(string src, string dst)

で良い。と言いたいところだがちょっと違う。

この場合、最初のメソッドは

copy({src1, src2, src3, src4, src5}, dst)

と書かなくてはならず、しかし、それは「こういうコピーをしたいのだ」とは異なる。

つまりメソッドオーバーロードがある場合の1は

copy(params string[] files)

が正解だ。これなら

copy(src1, src2, src3, src4, src5, dst)

と書ける。もちろん、メソッド提供者はちょっといやな感じはする。みそーすもくそーすも一緒だからだ。配列の最後の要素がdstというのは、なんか配列のセマンティクスの破壊っぽい。型はstring配列でおかしくはないが、要素の意味が異なるものが混じるのって気持ち悪い(おれは。でもLispのように考えれば、あいつのリストって平気でリストの要素にいろんな意味があるよなぁ。(funname param)なんて普通だし。だから配列でなければそういったことができない言語を利用していれば、それはそれでしょうがないのかも)。で、それが望みのものだ。

ここで、配列の要素の意味を同じにすることを考えると

copy(string dst, params string[] srcs)

というのも考えられる。でもこれは「こういうコピーをしたいのだ」ではない。l

さらに考えれば、「こういうコピーをしたい」にはこんなのもありえる。

copy src

(dstはpwd)

これもcopy(string dst, params string[] src)で受けられるが、dstなのにsrcが空配列の場合にはsrcになってしまう。

でも、もちろん、C#では最初の「こういうコピーをしたいのだ」はできない。()が必要だからだ。

というわけでRubyで実装することを考える。

C#での思考実験から結局

def copy(*files)

とするしかないような気がしてくる。というかそれが良い。

でも実装はあまりきれいとは思えない。

if files.size == 0 then raise ArgumentError elsif files.size == 1 then dst = `pwd` else files = files.dup; dst = files.pop; end

書いてみたら2条件か。意外と悪くないか。

_ まだ言ってるのか

用例を見ると、匿名投票という言葉がある。これの別称は「無記名投票」だ。この用例からは、匿名には名前を隠すという意味とは別に、名前を明示しないという意味があることがわかる。anonymousにnamelessの意味が含まれると英語にダブルミーニングを求めるのがOKなら、日本語にも実際に存在する用例から求めればよいだけだ。

あとは語呂と語感の好みで選べばよい。

くだらん。

_ バットマン

MSDNには匿名関数と出ている。したがって、C#とかについて書く場合は匿名関数と書く(でも埋め込みSQLのとこでは無名パラメータだね)。JDKの日本語Javadocには匿名クラスと出ている。したがってJavaについて書く場合は匿名クラスと書く。

でもECMAScriptについては仕様の定訳がないみたいだし、界隈の人たちは無名関数と書いているから、ECMAScriptについて書く場合は無名関数と書く。

それでいいじゃん、ロビン。

_ 鮫的な粘土

綴りは無視。

バカの獲物にリンクがあった(青木さんが翻訳されている)クレイシャーキーの「ジン、テレビ、社会的余剰」を読む。

この人の書くものには、妙にシンパシーを覚える。

最初に意識したのはジョエルがまとめたやつだ。

BEST SOFTWARE WRITING(Joel Spolsky)

(fjの教祖様が鋭い視点から星3個にしている。要件を満たしていないけど実装が良いので3ってことか)

結局起きていることは、頭数×時間という限られた資源の奪い合い、まっかなトマトの海なのだ。

でたらめだけど分岐点と考えてみることができる。

かってみんなが狩をしていた。かってみんなが米を作っていた。かって戦争は全員参加で負ければ皆殺し。長いことかけて効率を追求して分業が当たり前となる。政治を考える人は政治をし、政治を考えない人は投票したり投票しなかったりする。お金を稼ぐ人とお金を使う人、音楽をやる人と聴く人。それは効率的であり、選択されたもののみを残せば良いのでリソース配分という意味でも正しい。音楽をやるためにみんなが教会に行き歌を歌い、音楽を手元で聴くために楽器演奏を習得して楽譜を買う(ベートーヴェンの時代のCDは楽譜だぜ)。それが分業が発達して楽器演奏を習得する必要がなくなり、その時間を別のことに振り向けられるようになる。あるものの消費者は別のものの生産者である。だからうまく効率的に回る。ほんの30年前にはコンピュータハードウェアに分業はなく(パーソナルシステムの話だ)作る人は使う人、ソフトウェアは20年前くらいまでは作る人は使う人、それがムーアの法則の速度で他の産業が数100年かけたところを、今では完全な分業体制だ。

メディアはどうだろうか? 大量配布がグーテンベルクによって始まったと考えるならば、テレビ(放送)によって分業体制は確立したように見える(クレイシャーキーがテレビを例にしているのは、現時点において正しいと思う)。

陰極まれば陽に転ず。

しかし、まっかな海の世界の話だ。この世界では意識しているかどうかと関係なく、自分の生産性を最大にしようと振る舞ったものが生き延びる。そこでみんながみんな、自分の取り分を最大にするために好き勝手を言う。「みんなの意見といっても、自分の気に入った意見で固まるだけじゃん。時間のムダだからテレビを観よう!、スポーツをしよう! だまって働け!」とかね。しかし、検索をかければ何かしら異見を目にできる可能性がある。それが重要なわけじゃん。赤い海だと思っていたら、時間を多層的に使う技術も見つかるかもよ。2層式DVDみたく2層式時間術とかね。

銃・病原菌・鉄〈上巻〉―1万3000年にわたる人類史の謎(ジャレド ダイアモンド)

ginとgunだけが似ているが、意識しているだろうなぁ。

_ 黒いプレゼン

もしかしたらおれの誤解かも知れないし、だいたい、そんなにいろんなパターンを見たわけでもない。

でもだ。

次の法則は言えるんじゃないかなぁ。理由は後述。

1. パワポの基本は白地

2. 高橋メソッドはツールを限定しないが、基本は白地

3. Keynoter(キーノーター)の基本は黒地

4. JavaScripterの基本も黒地

いや、3は本当は良くわからないんだけど、ビルゲイツのプレゼンって白地に黒い文字が浮いてる気がするけど、ジョブスのプレゼンって黒い壁の中に白く字(というよりもなんらかのグリフ)が浮いてるように思うんだけど。

4.は、brazilさんのプレゼンの印象が強いだけかも知れないけど。

だからなんだと思うかも知れないが、黒地に白文字ってのはいかしてるのだ(と、書いた瞬間に「語るに落ちたな」とこのページが目の前にあることに気づかれるとか思ったが、別にそれは意識してるわけじゃない。というか、textareaに打ち込んでるときは白地に黒だ)。

で、上の法則に則って、のりお本ってのは初めてRubyistあるいはレイラーが3や4の段階に歩を進めたってことですな(と書いたあとから角谷さんのプレゼンがもろ3だったことを思い出したり)。

というか、書かなければならないものの期限が迫っているので、何か打ち込まなければあならないという強迫観念が、見事にムダな方向にパワーを発揮しているだけということなのだが。

本日のツッコミ(全3件) [ツッコミを入れる]
_ きむら(K) (2008-05-20 09:46)

>まだ言ってるのか<br>すみません。そろそろ自重します○| ̄|_<br><br>>それでいいじゃん、ロビン。<br>まあそれはそれで一つのやり方とは思うんですが<br>元が一つの語が二つの訳語に分裂するのはどうか?<br>という気がしないでもないです。

_ arton (2008-05-20 10:28)

いや自重されたらつまらないので、ガンガン書いてください。そのほうがおもしろいし。(「くだらん」とは思ったけど、最後まで読んでいるってことは、おもしろいとも思っているわけだし)<br>>一つの語が二つの訳語に分裂するのはどうか?<br>そうやって多様性が生まれて、異文化衝突に発展する(と思えるじゃないですか。いろいろ眺めていると)なら、むしろそのほうがおもしろくて良いのではないかと思います。たかが訳語1つとっても、何かのはずみで2種類に分岐したせいで、ネタになるわけだし。(だから当然、木村さんのご意見は僕には筋が通っていると考えられるし、そのいっぽうで「またか」とも思うし、自分との考え方の違いがおもしろい)

_ きむら(K) (2008-05-20 14:52)

「くだらん」と「おもしろい」が並立するのが良くわかりませんが<br>#想像できないとか言う話ではなく<br>面白がっていただけるのであればこれからも。<br>とはいうもののそろそろ他の訳語に手を出そうとしてたりします。<br>#戦線をいたずらに拡大すると痛い目みることは明白ですが


2003|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|

ジェズイットを見習え