2005/10/30

Javaですか?

Java で(正確には JSP 内で)正規表現を扱うのがこんなにもウザったいとわ。
まぁず java.util.regex ぱけじを明示的に Import せにゃならん。
java.util.* でわいかんのだそうな。
つぎに Pattern クラスの compile メソッドで
マッチパターンをつくってやり(はぁ?)
ほいで生成されたマッチパターンの matcher メソッドで
該当の変数からマッチング処理オブジェクトを作成し(ほぇ?)
そのオブジェクトの find やら group やらのメソッドを
呼び出してうにゃむにゃすると。(何すかそれ?)
オブジェクト内の文字列からマッチした文字列を取り出したいだけなのに。。。

Perl なら 次の文でやりたい処理が出来るぞ。

$target =~ /(regexp)/;
print $1."\n";

最近は顧客から「言語は Java で組めぃ!」なんて指定されるほど人気がある。
Java やその周辺って出始めの頃に比べてかなり成熟して来た技術だし、
流行だし、アーキテクチャ間の差がほとんど無いメリットはわかるけど、
生産性という面ではどうなのかねぇ。。。ウザったい制約多くね?
コードの再利用で生産性アップねぇ。。。再利用の妥当性検証工数含めるとトントンちゃう?

正しい設計をすれば保守性が良くなるのはどの言語も一緒なわけで。
Java が得意得意とする世界や Perl が得意とする世界もあるわけで。
開発サイドがその時々でベストなチョイスが出来るのが理想なわけで。
。。。なんて語れるほど組んでねーけど。

7 Comments:

Anonymous 匿名 said...

確かに。何を得意としているかは言語によって違いますね。javaは徹底したオブジェクト指向。正規表現もそうだがIO関係はもっとスゴい。Decoratorパターンのおかげでかなりめんどいことになってる。
しかし、全てはclassという単位を強制され、徹底したパーツ化で全体像を形作るjavaはclass設計やオブジェクトの設計がしっかりしていれば殆ど何の変更も必要なく他へ展開することができる。
(まさにjavaが標準で装備しているclass群のように)

結果的に作成するclass数は増えるがそれは後々無駄にはなりにくいものになる。

逆にperlは優れた言語であるが、オブジェクト指向という考えは後付けされた。perlでオブジェクト指向なモジュールを作成することはもちろん可能であるが、その場合はjavaよりはるかに面倒なコードを書くことになる。

単純なコードを書いていて、そのタイプ数の少なさを競うのであれば、perlやrubyは1・2を争う存在だろうが、逆に人やレベルにより難解さをコードに組み込むこととなり、言語表現の柔軟性が逆に保守性の低下へとつながることも少なくない。

javaは、何故そのようなアプローチ(実装)をする必要があるのかを考えつつやることが重要だ。なぜならオブジェクト指向言語としてのアプローチやアイデアがそこには詰まっていて、ちゃんと理由があるからだ。
それを理解するヒントがデザインパターンの理解であり、そのいい実装例がjava本体でもある。

日曜日, 10月 30, 2005 2:25:00 午後  
Blogger sempreff said...

そのままの姿で再利用が可能なのはビジネスロジックを呼び出す部分 (Framework) と ビジネスロジックから呼ばれる部分 (Utilities) であって、ビジネスロジック自体がそのまま再利用可能と誤解されることが多いのが困る。
そういう (自分に都合のいい) 「再利用性」という幻想はとっとと捨てて欲しい。

# Sun のマーケティング/プロパガンダとしては正しいと思うが。

で、Java で正規表現使ってナニをしたいですか?
1.4 以降なら String クラスが頑張ってくれるんじゃねぇの? matches と replace くらいならなんとかなるんじゃ?

# ウチのシステムは 1.3 ベースでコーディングしようぜ、っていうお約束なので、ときどき異様に困る。実行時の VM は 1.4.0 系なのに!

日曜日, 10月 30, 2005 4:15:00 午後  
Anonymous 匿名 said...

ビジネスロジックそのものは再利用することが困難(というかやる意味あるのか?)だが、それを補うclassがそろうと足りない部分は純粋にビジネスロジックだけが残る。(ほぼ理想的だが)

しかし、ビジネスロジックと一言で言っても再利用や拡張性を生かせる、また生かすことに意味のある部分はあって、他のシステムへの展開ではなく当該システムの生産性を伸ばす意味ではゼロではないと思う。もちろん妥当なクラス設計になっていなければ無理な話ではるが。。。

自分はjava(オブジェクト指向)が難しいのは、どこまで考えられたオブジェクト設計(class設計)ができるかが問題だと思っていて、この部分を間違えていると開発中にねじれた実装になっていく。。。しまいにはガチガチの再利用なんてとても不可能なロジックの塊が出来上がるのかとも思われる。。。

共通部分やUtilitiesはもちろんそのまま他システムでの利用も可能な単位で考えるので他所でもそのまま機能するだろうが、問題は他所への展開ではなく同じシステムの中で非常に良く分割され柔軟な多態性を持ったclass設計ができればなぁと思う。
(もちろんやって意味のある部分と無い部分があるとは思うが。)

月曜日, 10月 31, 2005 10:01:00 午前  
Blogger kazufuruk said...

正直に言いますと、
「世のほとんどが『Java is beautiful』だが、本当にそうなのか?」
「何故に Java?」
という問いに今更ながら明確な答えを出せない自分がいます。
その答えを見出せるほど良さを実感していないからなのはわかっているのですが、
その旨味がわからない状況の中、
「なぜそこまでしてやらなければ目的を達成できないの?」
という局面を何度か経験しているうちに、
「こっちでも良くない?」
と思ってしまうというのが現状です。

tam> javaは、何故そのようなアプローチ(実装)をする必要があるのかを考えつつやることが重要だ。
tam> それを理解するヒントがデザインパターンの理解であり、そのいい実装例がjava本体でもある。

そのアプローチを取る事でその先に「こんな良い事がある!」と理解し実感すれば意識も変わる?
つまりは単にやりたい事をやるためにどう書いてやれば良いのかがわからないので後向きなだけ?

sempreff> ビジネスロジック自体がそのまま再利用可能と誤解されることが多いのが困る。

Utility や MVC モデルで言う View や Controller の再利用が可能になる事でどれだけ生産性が向上するものなのかは実感していませんが、その様な実装にする事でシステムが多様な振舞をより楽に実装できるというのは理解できます。システムにその様な発展を望むならば、その時の Java は驚くべき爆発力を秘めていると言った所でしょうか。そのためにはそれ相応の設計を綿密に行わなければ旨みは味わえないのでしょう。今後どんな要求があるか予測を立て、それを見越しての設計が必要なわけですから、単純に考えても難しいですよね。。。

tam> 問題は他所への展開ではなく同じシステムの中で非常に良く分割され柔軟な多態性を持ったclass設計ができればなぁと思う。

その様な素性の良 class 群を使える局面でどんどん使っていかなければ、そして Java の良さを生かしきれる実装にしなければ、 Java の、オブジェクト指向の本当の旨みがわからないでしょう。うーん、ウチは出来ていないような。。。デザインパターンからじっくりやりたかったなぁ。。。(ぶつぶつ)

ちなみに自分が正規表現で苦しんでいた機能とは、クソミソに吐かれるログはそのままに、それとは別に通常ログとデバッグ用ログ(それも機能別)にファイルを分けて出力するという情けない機能です。orz

月曜日, 10月 31, 2005 9:19:00 午後  
Blogger sempreff said...

Java で正規表現を使っているもので速い奴は、見たことない。レスポンスを気にする局面なら正規表現なぞ使わぬようにするべきだと思う。

-- 気を付けろ、君は地雷に向かって歩いているか、自ら地雷を埋めさせられようとしているか、どちらかだ。--

月曜日, 10月 31, 2005 10:03:00 午後  
Anonymous 匿名 said...

>-- 気を付けろ、君は地雷に向かって歩いているか、自ら地雷を埋めさせられようとしているか、どちらかだ。--

ハハハっ!! 思わず付記だしそうになりました。:-)
混迷の世界へようこそ。。。。それが正しいのか正しくないのかはたぶん数年後の自分自身が答えを出すでしょう。。。と言っておきます。。。フフフ。。。
私自身,既に迷路の中の住人ですから。。。

月曜日, 10月 31, 2005 11:23:00 午後  
Blogger kazufuruk said...

sempreff> 気を付けろ、君は地雷に向かって歩いているか、自ら地雷を埋めさせられようとしているか、どちらかだ。

真夜中に呼び出されるのは自分と。何と不吉な。。。(笑)
運用上絶対必要な機能というわけではないので、無くす方向で行ってます。

tam> 私自身,既に迷路の中の住人ですから。。。

tam さんが迷う迷路なら、自分にとってはラビリンスですわぃ。抜けられねー。。。

水曜日, 11月 09, 2005 7:55:00 午後  

コメントを投稿

<< Home