K.Maebashi's BBS

ご自由に書き込んでください。雑談も可。
テスト書き込みの類はテスト用掲示板にどうぞ

[日付順表示] [日付順インデックス] [スレッド順インデックス]

新規投稿 | 開設者ホームページへ戻る | ヘルプ

[19] Javaについて
投稿者:kon
2007/02/20 02:13:25

こんにちは! 以前、C言語FAQの日本語訳の復刊を報告したkonです。 (忘れているでしょうね・・・) 前橋さんの本はすべて読ませていただいています。 私事ですが、次の仕事でJavaをやる事になりそうなので(私はしがない7年目のプログラマ です)Javaを勉強しています。具体的な仕事の内容が不明瞭なのでなんともいえないのです が、次のSTEPに進むために何をすべきか悩んでいます。現状のスキルは以下になります。 ・オブジェクト指向は知っています。(言語はC++で、業務は2年くらいやっいていました) ・Javaの文法はひととおり、おさえました。以下は勉強した本等です。 (1)Java言語プログラミングレッスン(上)(下) (2)増補改訂版Java言語で学ぶデザインパターン入門 (3)Java 謎+落とし穴 (4)Java House ML Topicsを見る(前橋さんの投稿もありますね) (5)APIリファレンスを見る (6)クラスライブラリのソースを読む (1)は簡単すぎたので、2回くらいしか読んでいません。(上は1回) (2)まわりで有名だったので購入しました。1回読んで、飽きてしまいました。 (3)は私のバイブルである"C言語ポインタ完全制覇"と並びおもしろかったです。 はじめは、斜め読みから繰り返し5回ほど読みました。 (4)~(6)は、気になるところ(file操作など)を読みました。 いまさら、簡単なプログラムをせこせこ作るのもなあと思ったりして、かといって仕事しな がらおぼえていくと後で、デスマにならないかと心配したりしています。つたない文章で申 し訳ありませんが、よきアドバイスをお願い致します。 それではまた。
[この投稿を含むスレッドを表示] [この投稿を削除]
[20] Re:Javaについて
投稿者:(ぱ)
2007/02/20 02:13:25

>以前、C言語FAQの日本語訳の復刊を報告したkonです。 どうもです。その節はありがとうございました。 >・Javaの文法はひととおり、おさえました。以下は勉強した本等です。 > (1)Java言語プログラミングレッスン(上)(下) 結城浩さんの本ですね。私は未読ですが、プログラミング自体初めての 人向けの本ですよね。 今「読者の声」を見てみたら、 http://www.hyuki.com/jb/jbvoice.html#i4 | また、if文で「または」を表現する場合も他のテキストが | if (n < 0 || n > 100) と書いているところをこの本は | if (n < 0 || 100 < n) と書いています。「どう書くのが読んだ時 | わかりやすいか?」ということと「100 < n という書き方もOK」 | ということがこの1行だけで身につきます。 「if (n < 0 || 100 < n) 」がわかりやすいかという点に異論はありますが それはさておき、「100 < n という書き方もOK」というところから 説明しなきゃいけないものかと… いやその確かに私も大昔BASICをおぼえた頃には この辺で悩んだような気もしますが(入門書を書いたり新人に教えるときには 気をつけなければいけませんね)。 C++バリバリの方からすれば、そりゃ「簡単すぎ」だろうと思います。 >(3)は私のバイブルである"C言語ポインタ完全制覇"と並びおもしろかったです。 ありがとうございます(_o_) >いまさら、簡単なプログラムをせこせこ作るのもなあと思ったりして、かといって仕事しな >がらおぼえていくと後で、デスマにならないかと心配したりしています。つたない文章で申 >し訳ありませんが、よきアドバイスをお願い致します。 アドバイスできるような立場にいるとは思えませんが… (^^; C++バリバリの方がJavaの文法面などでひっかかるとは思えませんので、 でっかいプログラムをガリガリ書いていけばよろしいのではないでしょうか。 win.drawLine(new Point(x1, y1), new Point(x2, y2)); のような書き方は、GCに慣れないうちはかなり抵抗があるかもしれませんけど。 ひとつ思うのは、言語というより時代的なものだと思うのですが、 オブジェクト指向の設計方針自身が変わってきているということです。 昔々、私がUNIX上でMotifを使ってGUIを構築していたとき、 いろいろなGUI部品を配置するための親となるコンポーネント(用語は Javaで統一)は、「Manager」というコンポーネントで、これに子として 他のGUIコンポーネントを含めました(Compositeパターン)。 んで、その中で部品を縦横に並べるRowColumnや、座標で並べる BulletinBoardは、Managerのサブクラスでした。 また、PushButtonはLabelのサブクラスでした。 Javaでは、いろいろなGUI部品を配置するための親となるコンポーネントは Panelといいますが、その中の部品の並べ方は、Panelを継承したクラスで 制御するのではなく、LayoutMangerというオブジェクトをPanelに対して 横から突っ込む形で制御しています。 また、ButtonはLabelのサブクラスではありません。 コードの再利用のために、既存クラスを継承してオーバーロードでちょっと いじって、というやり口が流行らなくなってきているのは確かだと思います。 まあSwingでもJButtonの下にBasicArrowButtonがぶらさがったりしては いるようですが。
[この投稿を含むスレッドを表示] [この投稿を削除]
[21] Re:Javaについて
投稿者:kon
2007/02/20 02:13:25

>アドバイスできるような立場にいるとは思えませんが… (^^; >C++バリバリの方がJavaの文法面などでひっかかるとは思えませんので、 >でっかいプログラムをガリガリ書いていけばよろしいのではないでしょうか。 親切なアドバイスありがとうございます。 私はGUIの仕事をしていないのでそのあたりのプログラムを作成するといい かもしれませんね。(汎用系や組み込み系(携帯電話)ばかりでしたので) 話がそれますが、C++の仕事をやっていて思ったのですがオブジェクト指向 で作成とうたいつつ、実装はがちがちのCでコーディングしている人が多い ように思います。例えば文字列の操作なんてプロパが用意した文字列のクラ スを使用せずに自前で作成するとか多々見られました。 (私が関わったプロジェクトだけ?) 一番驚いたのが、newを使わずmallocを普通に使用している人がいたのには _| ̄|○ ちなみに、プロパ(某有名メーカ)が用意したクラスは一応オブジェクト指向 にのっとり?まともなライブラリでしたが・・・
[この投稿を含むスレッドを表示] [この投稿を削除]
[22] Re:Javaについて
投稿者:(ぱ)
2007/02/20 02:13:25

>話がそれますが、C++の仕事をやっていて思ったのですがオブジェクト指向 >で作成とうたいつつ、実装はがちがちのCでコーディングしている人が多い >ように思います。 たとえば画面だけVC++で作って、裏のロジックはガチガチのC(っぽいコーディング) ということなら、それはひとつの選択肢としてありだと思うんですがね。 その場合、「オブジェクト指向で作成」とうたってはいけませんが。 # ていうかそういう経験だけで履歴書に「C++できます」と書くのは勘弁して欲しい… >例えば文字列の操作なんてプロパが用意した文字列のクラ >スを使用せずに自前で作成するとか多々見られました。 >(私が関わったプロジェクトだけ?) STLとかCStringとかは使えない状況だったんでしょうか。 >一番驚いたのが、newを使わずmallocを普通に使用している人がいたのには > _| ̄|○ C++だとキャストが必要で面倒なんじゃないかなあ、と思ったり。
[この投稿を含むスレッドを表示] [この投稿を削除]
[23] Re:Javaについて
投稿者:kon
2007/02/20 02:13:25

> >たとえば画面だけVC++で作って、裏のロジックはガチガチのC(っぽいコーディング) >ということなら、それはひとつの選択肢としてありだと思うんですがね。 >その場合、「オブジェクト指向で作成」とうたってはいけませんが。 > ># ていうかそういう経験だけで履歴書に「C++できます」と書くのは勘弁して欲しい… まさしく同じ経験があります! 上司から、外注さんの面接に付き合わされて履歴書を見たら「C++できます」の内容でし たので信用していました。ところがいざ一緒に仕事を始めたら・・・(@_@) 当然のごとく >STLとかCStringとかは使えない状況だったんでしょうか。 使えましたが、知らなかったみたいで・・・ (他に簡単な例では、インライン関数をしらないでcppに実装してたりとか・・・) コードレビューしなかった私のミスとして、おかしい個所を全部修正させられた苦い経験が あります。(外注さんはその時点で、プロジェクトから抜けてました) そういう人のために(私も含めて)、次回の本を作成するならぜひC++はどうでしょうか? でも技術評論社さんの標準プログラマーズシリーズには、C++の書籍はもうリリースされて ますから無理ですかね。(個人的にはPerlとかも希望しますが) 現場主義の書籍があまりに少ないので、ぜひまたリリースしてください。 それではまた
[この投稿を含むスレッドを表示] [この投稿を削除]
[24] Re:Javaについて
投稿者:(ぱ)
2007/02/20 02:13:25

>そういう人のために(私も含めて)、次回の本を作成するならぜひC++はどうでしょうか?  C++は、仕事でやったこともありますから通り一遍のことは知っているつもりですが、 正直、本にまとめる自信はないです。言語仕様が複雑すぎです。 >現場主義の書籍があまりに少ないので、ぜひまたリリースしてください。  現場主義の書籍が少ないというのは私もよく感じます。 「2000行の関数」とか見たことあるのかと… いや、見たことあっても自慢には なりませんが。  次の本は、まあそのうち、という状況です (^^;
[この投稿を含むスレッドを表示] [この投稿を削除]
[26] Re:長い関数
投稿者:れぷ
2007/02/20 02:13:25

>「2000行の関数」とか見たことあるのかと… いや、見たことあっても自慢には >なりませんが。 長い関数はVBだと良く出会いますね。 VBAの記録マクロはもっと酷いかも(^-^;) C言語だと私は1500行くらいですかね。 strncat()連続が多かったような。 # Pro*CとかSQL埋め込みものは除外。 藤原氏のサイトでは最長不倒関数が更新されてますけど、 幸いあういうのはお目に掛かったことがありません。 # 今日行ったら見れませんでした。 でも長い関数は酒の肴にもならないですよね。
[この投稿を含むスレッドを表示] [この投稿を削除]
[28] Re:長い関数
投稿者:(ぱ)
2007/02/20 02:13:25

>長い関数はVBだと良く出会いますね。 >VBAの記録マクロはもっと酷いかも(^-^;) VBはほとんどやったことないですが、やっぱりそうですか。 記録マクロが長くなるのはしょうがない気がしますが。 >C言語だと私は1500行くらいですかね。 >strncat()連続が多かったような。 ># Pro*CとかSQL埋め込みものは除外。 状況によっては、1000行以上の関数を書くこともあり得ると思います。 ていうか私も書いたことがあります。 巨大なswitch caseで、caseひとつあたりは数行しかなく、関数全体で使う ローカル変数も数個しかない、というものでした。こういうケースなら、 長くなってもいいんじゃないかと思っています。 関数が長くてなぜいけないのか、といえば、ものすごーく巨大なif文とかを 書くことになって流れがわからなくなる、というのもありますが、 それ以上に大きいのは、「ローカル変数が増える」ことだと思っています。 ローカル変数とはいえ、2000行の関数ともなればもうグローバル変数と 一緒ですから。
[この投稿を含むスレッドを表示] [この投稿を削除]
[31] Re:長い関数
投稿者:れぷ
2007/02/20 02:13:25

>VBはほとんどやったことないですが、やっぱりそうですか。 そうですね。コントロールのプロパティの設定などは仕方ないとしても 普通の実行コードがForm_Loadイベントプロシージャに延々と書かれたりしてます。 組み込み関数を使わずに自分で作ったりしてる人も多いです。 # しかもプロシージャ化せずにロジックごとコピペとか。 >記録マクロが長くなるのはしょうがない気がしますが。 これはそうですね。 たまにカーソル移動の誤操作がそのままだったりします。 あとは納品されたプログラムが記録マクロそのままだったりすると かなりメンテが面倒です。(;_;) >巨大なswitch caseで、caseひとつあたりは数行しかなく、関数全体で使う >ローカル変数も数個しかない、というものでした。こういうケースなら、 >長くなってもいいんじゃないかと思っています。 そうですね。WindowsプログラムならWinProc()とかですね。 あとディスパッチャみたいなものとかもある程度は仕方がないかもしれないですね。 >それ以上に大きいのは、「ローカル変数が増える」ことだと思っています。 確かに! ローカル変数がやたら多いと関数が500行ぐらいでも コードを追うのがかなり大変ですよね。 そう言えば違う変数なのに関数の最初から最後まで 同じ値を保持しているものがよくありますよね。 これってメンテした人がローカル変数を追いきれなかったので 自分が判る変数を宣言してプログラムを修正していたのかもしれない、と今思いました。
[この投稿を含むスレッドを表示] [この投稿を削除]
[32] Re:長い関数
投稿者:本多
2007/02/20 02:13:25

>>それ以上に大きいのは、「ローカル変数が増える」ことだと思っています。 >そう言えば違う変数なのに関数の最初から最後まで >同じ値を保持しているものがよくありますよね。 ローカル変数が増えるのも困りますが、 一つのローカル変数を別の意味で使いまわされたりするのも よく見かけます。 勘違いしやすくて困りますよね。 関数の上のほうではcntは○○○の個数が入っていたのに、 途中から、×××の個数の意味で使って、 最後はテンポラリ変数として使ってる...とか ループ変数のiとかjとかも、できる限り使いまわして欲しくないなぁ 止めて欲しいなぁって思ってます。 ループしてる変数に意味があることって多いと思うので person_noとかcar_noとかにして欲しいなぁって。
[この投稿を含むスレッドを表示] [この投稿を削除]
[34] Re:長い関数
投稿者:(ぱ)
2007/02/20 02:13:25

> ループ変数のiとかjとかも、できる限り使いまわして欲しくないなぁ > 止めて欲しいなぁって思ってます。 > > ループしてる変数に意味があることって多いと思うので > person_noとかcar_noとかにして欲しいなぁって。  ですね。二重以上のループになると強くそう思います。  ループカウンタにiを使う、という習慣も、そろそろ捨てる時期が 来ているのかも知れません。
[この投稿を含むスレッドを表示] [この投稿を削除]
[35] Re:長い関数
投稿者:(ぱ)
2007/02/20 02:13:25

>これってメンテした人がローカル変数を追いきれなかったので >自分が判る変数を宣言してプログラムを修正していたのかもしれない、と今思いました。  あー。  やったことあります(遠い目)。
[この投稿を含むスレッドを表示] [この投稿を削除]
[36] Re:長い関数
投稿者:れぷ
2007/02/20 02:13:25

ループしてる変数に意味があることって多いと思うので > person_noとかcar_noとかにして欲しいなぁって。 あ、これは最近思います。 あとからiとかjとか見ると単純なループ以外は訳判らなくなりますね。
[この投稿を含むスレッドを表示] [この投稿を削除]