設計書と静的型付け

void GraphicWizardsLair( void ); // 設計書コーディングとアジャイルとより。

「設計書コーディング」というキーワードと、naoya さんの「プログラミングは詳細に設計された設計書を実際の形に落とし込むための手段に過ぎないとか」と言ったフレーズに(つまり設計書の存在)、「静的型付け」がバインドされたようなニュアンスになっているところに(ありがちな話ではありますが)引っかかったりします。
両社には相関関係はない、というと御幣がありますが、静的型付けは設計書コーディングのためのものではないことは明らかです。
が、世間的には静的型付けについて、「設計の正しさの検証可能性を上げるためのもの」と認識されてしまっている恐れはあります。悲しいことに。
私的には、型を宣言するのは(いま思いつくまま書いてるので正確ではないと思いますが)、コンテキストを明文化し、設計をしやすくし、後で読みやすくするため、といったところです。

前者の意義も付属的についてきますし、それも重要な利点ですが、それが目的だとは思っていないです。サボって書いてもそこそこの可読性を確保できるのは便利だったりしますし、(interface により)応答可能性を宣言できるというのは(作成中/後の可読性両方の観点で)特に重要と思います(*)。

型を宣言しているからインスペクションが楽になって、利用者が実際に利用できる機能をすぐに一覧できるようになっています(eclipse など)。perl や ruby だと、できるけどちょっと面倒そう(動的にメソッドを付与とかしてるとほとんど不可能)。

Java で非設計書コーディングをすると、かなり楽だったりするんですが、みんなこのへんどう思ってるんでしょ?興味深いなぁ。

*:
Java が万全とは思いませんけどね。inner class ですら冗長で気軽にクロージャ的使い方がしにくいところとか。それに、「呼んでみなきゃ分からない」を「とりあえず呼んでみることができる」と考える非静的型の考え方もまったく否定する気はないです。自分にはあまり向かないけど^^;
私のプログラミング手法は、大雑把にいうと、「とりあえず呼ぶコードを書く」です。そうすると、(その時点でオブジェクトの必要性はもう定まってるのは前提)呼ばれる側を書かなきゃならないことが静的に分かるので、後で書かなきゃとか意識せずに思考を進めることができるんです。インターフェイス指向と呼んでますが、こういうインターフェイスに応じることができる役割が必要だな、というのをトップダウンで考えていく感じです。

トラックバック(0)

このブログ記事を参照しているブログ一覧: 設計書と静的型付け

このブログ記事に対するトラックバックURL: http://www.sk-jp.com/mt/mt-tb.cgi/346

コメント(7)

私はどちらかというと,仕様書は概略だけで,プロトタイプを作って様子を見た後,調整しながら作成していくタイプなんですが(だからいつも最初の仕様と作った後の仕様が違う(^^;),Javaの静的型付けがそういうスタイルにも結構合うんじゃないかと思っていました.
可読性も関係あるんですが,最終的にドキュメントをまとめるときも有効ですし,実装中も自分が何を書いているのか明示的に示してくれるというのも結構助かります.
ActionScriptでプログラムを書いていて困ったのは,作ったソースを眺めても何をやっているのかわかりにくくなってしまったことです.こなれていないのもあるんでしょうけどどの順番で何が有効なのかが非常にわかりにくく(例えばメソッドも定義されるまで無効),メンテナンスや実装がしにくい感じがしました.
静的型付けは確かに堅苦しいのですが,それはそれで便利ですね.
また動的言語の書きやすさはむしろ,コードを書かなくてもいいような仕組みや仕様(冗長でない記述)を用意しているからであって,それが動的言語だからなのかというと必ずしもそうじゃないと思ってます.

>また動的言語の書きやすさはむしろ,コードを書かなくてもいいような仕組みや仕様(冗長でない記述)を用意しているからであって,それが動的言語だからなのかというと必ずしもそうじゃないと思ってます.
あぁ、「静的型の有無」と「記法の簡便さ」は確かに微妙に違いますもんねぇ。とはいえ静的型を持つゆえこれ以上短い記法が使えない、というケースもあるにはありますが…。

C# はかなりいいと思うんですが、まだ短くもできるとも思うし。あれがあの段階以上になかなか進まないのはマーケティング的な部分も多いんでしょうねぇ…。

# foreach と using は(それらをクロージャで実現しなかった点においても)偉い、と思う。であるにもかかわらず、クロージャ自体は導入されず…。

>とはいえ静的型を持つゆえこれ以上短い記法が使えない、というケースもあるにはありますが…。
うん,確かに.特に型宣言に代表されますね.

># foreach と using は(それらをクロージャで実現しなかった点においても)偉い、と思う。であるにもかかわらず、クロージャ自体は導入されず…。
クロージャが導入されないのは,その概念がわかりにくいということと,効率の問題があるからじゃないでしょうか.
特にクロージャやブロックと呼ばれているものは粒度が小さいことが多く,生成に伴うコストやサイズの問題が生じるからかなと.
Javaのインナークラスでも似たような使い方をすると思いますけど,こういう傾向は似ているような気がします.特に匿名クラス.
JavaでGenericsやAutoboxingが導入されたのは,たぶんコストが小さいことがあげられるような気がします.

advise mishra recognizing prohibit leader tahoma donation maltamalta akshar esthetic call

noticeboards massively websites felony directorof isbn customize raymond dubrulle equipped opticians

homepagehttp masculine himmelwiese sensitive operation headteachers storm visual trials inspectors denial

rounds afford drms agrochemical eliminate janet disclosing fuel shivering foetal clockwork

コメントする

このブログ記事について

このページは、Shinが2005年5月20日 03:22に書いたブログ記事です。

ひとつ前のブログ記事は「ベンチャー企業のビジョンは従業員全員の「夢」であるか?」です。

次のブログ記事は「少しでも自分の考えていることを伝えるために、自分語りする」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。