K.Maebashi's BBS

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

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

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

[254] Re:書き方覚えて後から理解
投稿者:norge
2007/02/20 02:13:25

>いざインスタンスを作るときには、やっぱり「なんでこんなことしなきゃ >いかんの?」という疑問を持つはずで、それには答えなきゃいかんと思うんですがねえ。 とりあえずそうしときなさい、いずれ分かるから ってことじゃダメっすかね 実際オレがそうだったし それでも分からんやつは才能がないと諦めた方がいいんじゃないの
[この投稿を含むスレッドを表示] [この投稿を削除]
[253] 書き方覚えて後から理解
投稿者:(ぱ)
2007/02/20 02:13:25

 件名付けました。 >ここで言っても仕方ない事かもしれないけど、理解するのはあとだと思う >あーだこーだ説明されるよりまず、こう書けばクラスが作れるっていう書き方が重要 >書き方覚えてあとから理解した方がいい >Cの#include<stdio.h>がいい例じゃないすかね  いや、私はまったく同意するんですが(実際、体当たり学習~では、#include <stdio.h> について、そういうことを書いてるし)。  唐突にこう言われても何がなんだかわからないんですが、いったい何を おっしゃりたいんでしょうか? 「疑り深い~」に対する反論なのかなあ。 ただ、これについて言えば、CプログラマにJava教えるとき、 なんでもstaticメソッドで書かせればすぐ理解できると思うけど、 いざインスタンスを作るときには、やっぱり「なんでこんなことしなきゃ いかんの?」という疑問を持つはずで、それには答えなきゃいかんと思うんですがねえ。
[この投稿を含むスレッドを表示] [この投稿を削除]
[252] 無題
投稿者:norge
2007/02/20 02:13:25

ここで言っても仕方ない事かもしれないけど、理解するのはあとだと思う あーだこーだ説明されるよりまず、こう書けばクラスが作れるっていう書き方が重要 書き方覚えてあとから理解した方がいい Cの#include<stdio.h>がいい例じゃないすかね
[この投稿を含むスレッドを表示] [この投稿を削除]
[251] Re:ビルドという行為について
投稿者:(ぱ)
2007/02/20 02:13:25

>お陰様で風邪も良くなりまして、また勉強に励んでおります。  ええと、ご無理されませんように。 >そんな中で、J2EE は一定の成果を上げることができた、と。  EJBなんか本当に必要なのか? という声はなくもないですが。  ただ、EJBを使おうが使うまいが、Webアプリケーションでは、何らかの「型」を決めて アプリケーションを開発する傾向はあります。Strutsなどは「型」を提供してくれますし、 たいていプロジェクトごとにさらに細かい型を決めます。  実際、それで生産性は上がりますし、品質もある程度均一化できると思うのですが、 考えてみれば、「どこ見ても同じようなパターンで書いてある」というのは、 「同じことを複数の箇所に書いてはいけない原則」に反するのではないかと 思うこともあります。  アスペクト指向ってのはそのへんをどうにかしようという発想なのだと思うのですが、 私はちゃんと追えてません。 >で、ツールの制限の話なのですが、実は私、色々な所で悪口を聞く COBOL を嫌いになれません。 >COBOL の持つ記述上の制約は、「誰でも、それなりに実用に耐えうるソースを書ける」と信じられていた時代な >らではのものだからです。  すみません、私はCOBOLはやったことないです(入門書をみた程度)。 「誰が書いても似たようなコードになる」という話はよく聞きますけれど。  一時期、TeXに凝っていた頃、「マクロでどうにでも化ける言語ってすごいじゃん」と 思ってしまったことがありますが、読むほうからするとむしろたまったもんじゃ ないんですよね。C++は、演算子のオーバロードで結構いかようにも化けますが、 おかげで、読む方は、そのクラスの仕様がわからなければ手が出せない。 たとえば文字列のクラスがあったとして、それが実体として扱われるのか参照として 扱われるのかはC++の文法からだけではわからないわけです。 # STLのstringの話をしているわけではないですからね。念のため。  その点、Javaなら参照しかないので迷いようがない。こういうのは結構重要かなあ、 とも思ったりしてます。  ちなみに、そういう発想にはおそらく真っ向から反するのがこちら。 「簡潔さは力なり」 http://www.shiro.dreamhost.com/scheme/trans/power-j.html
[この投稿を含むスレッドを表示] [この投稿を削除]
[250] Re:ビルドという行為について
投稿者:けろ助
2007/02/20 02:13:25

お世話になっております、けろ助でございます。 お陰様で風邪も良くなりまして、また勉強に励んでおります。 > あのディレクトリ構成は実際「Web アプリに限定したからこそ」だと思います。 > ていうか私はあれを最初に見たとき、こんなことをフレームワークで決めて欲しくない、 > と思いました。が、ユーザとしては無限の自由度を欲しがりますが、それがかえって > 混乱を招くこともあるわけで、あれはあれでよいのかもしれません。 つたない考えなのですが、これって「『今対象としている問題の領域』をどこに限定し、いかにモデル化する か」というテーマに帰着していくんだと思うんですね。 オブジェクト指向設計の用語では「ドメイン」と呼ぶそうですが。 ドメインの決定とモデル化を上手く行うことが、結局のところ良い設計となる…ということになるのでしょう。 「アルゴリズムとデータ構造」といった、割と枯れたテーマなら、ノウハウや経験則の蓄積も豊富で体系的にま とめられた書籍を気軽に入手して勉強できる程の環境にあると思いますが、上に挙げたテーマは「まだこなれて ないジャンル」であるだけにまだ模索状態なような気がします。 そんな中で、J2EE は一定の成果を上げることができた、と。 今のところ、私はそんな解釈をしています。 > Cが、もし最初から、インデントがいわゆる「K&Rスタイル」になっていないものを > コンパイラのレベルで文法エラーで弾いていたら、スタイルにまつわる宗教戦争は > 発生しなかったわけで。 > # でも、そういうことをツールの設計者がガチガチに決めてしまうと、なんか > # 普及しなさそう、という気もします。 ええ。そういう意味なら、C 言語は、上手いことユーザーのニーズに (今も) マッチした言語ですね。 制限と自由のさじ加減が非常にバランスが良い言語だと思ってます (除:宣言構文)。 「C 言語ポインタ完全制覇」を最初に読んだ時は「殴るんなら James Gosling より Dennis Ritchie だろ」と 思っていた私ですが、Java を本格的に書き始めた今では考えが全く逆ですから (汗)。 で、ツールの制限の話なのですが、実は私、色々な所で悪口を聞く COBOL を嫌いになれません。 COBOL の持つ記述上の制約は、「誰でも、それなりに実用に耐えうるソースを書ける」と信じられていた時代な らではのものだからです。 # 実は私、前の会社でホスト系言語 (COBOL、PLI/I、JCL …等々) の解析プログラムをメンテしてました。 # COBOL はソース記述開始位置等に非常な制約がある言語です。 # また、今では「変態言語」の名は Perl が欲しいままにしていますが、私ならその称号を PL/I に与えたい。 話それました。すみません。 要は、「『作者の設定した自由と制約』が時代やユーザーのニーズとどれだけマッチしているか」、が一番重要 な事項になのだろう、と思った、ということです。 流行る言語なり、ツールなりは、時代に見出されただけであって、後々まで残る方法論とはまた別なのだ、って 事なんです。 前向きに考えるなら「今からでもソフトウェア工学の根本的進歩を目の当たりにできる」と思えるでしょうし、 後ろ向きに考えるなら「なんだ、ソフトウェア工学ってこの程度なのか…」と思える混沌とした時代なのかな…。
[この投稿を含むスレッドを表示] [この投稿を削除]
[249] Re:ビルドという行為について
投稿者:(ぱ)
2007/02/20 02:13:25

>またぞろ風邪がぶり返してきそうです… (鼻水と咳が止まらない…) 何でだろ。 無理されないように。ゆっくり休んでください。 >そうですねぇ…、J2EE は、役割 (ロール) を含め、かなりきっちりとした規定があるようですが、「Web アプ >リに限定したからこそ」という印象が、私にはあるのです。 あのディレクトリ構成は実際「Web アプリに限定したからこそ」だと思います。 ていうか私はあれを最初に見たとき、こんなことをフレームワークで決めて欲しくない、 と思いました。が、ユーザとしては無限の自由度を欲しがりますが、それがかえって 混乱を招くこともあるわけで、あれはあれでよいのかもしれません。 Cが、もし最初から、インデントがいわゆる「K&Rスタイル」になっていないものを コンパイラのレベルで文法エラーで弾いていたら、スタイルにまつわる宗教戦争は 発生しなかったわけで。 # でも、そういうことをツールの設計者がガチガチに決めてしまうと、なんか # 普及しなさそう、という気もします。 > 名前しか知りませんが、Mavenてそーゆーのには役に立たないんでしょーか? これは私も知りませんでした(Jakartaもなんか多すぎ)。勉強しておきます。
[この投稿を含むスレッドを表示] [この投稿を削除]
[248] Re:ビルドという行為について
投稿者:けろ助
2007/02/20 02:13:25

前橋さん、iWA さん、早速のレスありがとうございます。 またぞろ風邪がぶり返してきそうです… (鼻水と咳が止まらない…) 何でだろ。 前橋さん> ディレクトリ階層ということなら、JavaによるWebアプリケーションなら、 前橋さん> J2EEによる規定がありますよね。 前橋さん> その他のアプリケーションだと、confとかetcとかdocとか、よく使うディレクトリ名は 前橋さん> ありますが… きっちり規定されたルールというと… どうでしょうか。 そうですねぇ…、J2EE は、役割 (ロール) を含め、かなりきっちりとした規定があるようですが、「Web アプ リに限定したからこそ」という印象が、私にはあるのです。 J2EE はやたら敷居が高いので本をパラパラと読んだだけでの感想ですが…。 前橋さん> プロパティファイルは読みにくいので、今ならXMLの方がよく使われている気がします。 なるほど。Properties クラスの名前空間は階層的ではないですし、そちらが主流なのは良く解ります。 質問の件に限らず、ずっと思っていたことがありまして、今回改めてそれを確認した思いがします。 それは、「言語にせよ、ツールにせよ、その設計思想を体得しないことには充分に力を引き出せない」というこ とです。 言語やツールの成長を初期から追いかけるか、時間と労力を割いて慣れ親しむかしないといけないのでしょうね。 個人的には、作者にその辺りの説明責任があると思うのですが…。 私の場合、C + Make という環境でいたのですが、同じ UNIX 発祥とはいえ、Java + Ant では考え方が随分違う のでかなり面食らいました。 Win + VB から移行するよりは楽なのでしょうけど。 iWA さん> 名前しか知りませんが、Mavenてそーゆーのには役に立たないんでしょーか? さっそく調べてみました。プロジェクト管理ツールだそうですね。 [Jakarta Project のページ] http://www.ingrid.org/jajakarta/turbine/jp/turbine/maven/index.html [Maven を取り上げているサイト・1] http://www.02.246.ne.jp/~torutk/index.html [Maven を取り上げているサイト・2] http://www-6.ibm.com/jp/developerworks/java/030613/j_j-maven.html Eclipse にすら挫折した (手を出すには時期尚早だと感じた) 私ですので、今すぐ Maven を活用できる訳では ないのですが、Maven が持つ「プロジェクトの標準ディレクトリ構成」はかなり参考になりました。 自分でグジグジ環境をいじってたらこのレベルに辿りつくのに半年じゃ効かんですわ…。 レスを下さった皆様、どうもありがとうございました。 Java に関しては完全に独学 (周りに使える人がいない…) で、暗中模索の状態が続いていたのですが、何だか 少し光が差してきたような気がします。
[この投稿を含むスレッドを表示] [この投稿を削除]
[247] Re:ビルドという行為について
投稿者:iWA
2007/02/20 02:13:25

名前しか知りませんが、Mavenてそーゆーのには役に立たないんでしょーか?
[この投稿を含むスレッドを表示] [この投稿を削除]
[246] Re:ビルドという行為について
投稿者:(ぱ)
2007/02/20 02:13:25

>レスが大変遅れまして申し訳ありません (雑事に追われた挙句風邪で4日間も寝込んでて…日頃の行い?)。 おや。お大事に。 >これが、「『とりあえず動けばいいや』的な作りでも何とかなる場合も多い」という意味でしたら同意です。 >だからこそ、Java を使用したアプリケーションの構築には、デザインパターンのように一定のセオリーや経験 >則の蓄積があるはずだ、と思っていたのです。 ディレクトリ階層ということなら、JavaによるWebアプリケーションなら、 J2EEによる規定がありますよね。 その他のアプリケーションだと、confとかetcとかdocとか、よく使うディレクトリ名は ありますが… きっちり規定されたルールというと… どうでしょうか。 Cに関しては、GNUプロジェクトには規約がありますが、configureを前提にされると 辛い、ていうか嫌。 http://www.sra.co.jp/wingnut/standards-j_toc.html#Managing%20Releases >が、Java には、Java 実行環境内からのみ参照できる環境変数もどきの「プロパティ」というものがありますか >ら、設定ファイルの値はプログラム内から読み込むというのが普通 (らしい) です。 プロパティファイルは読みにくいので、今ならXMLの方がよく使われている 気がします。
[この投稿を含むスレッドを表示] [この投稿を削除]
[245] Re:ビルドという行為について
投稿者:けろ助
2007/02/20 02:13:25

前橋さん、本多さん、レスありがとうございます。 レスが大変遅れまして申し訳ありません (雑事に追われた挙句風邪で4日間も寝込んでて…日頃の行い?)。 こちらでお二人にまとめてレスしようと思います。 前橋さん> いやあ、このあたりは、最近はかなり「若い奴にお任せ」してる部分が大きいので、 前橋さん> 私がこの方面に詳しいかというとそんなことはないと思います (^^; ガーン。そうなのですか…。 前橋さん> 詳しくないなりに思うところを書きますが、こういうのはアプリケーションと 前橋さん> 環境により千差万別なわけですが、実はプログラマが仕事で書くプログラムの 前橋さん> 95%は特定顧客からの受注アプリケーションだという現実があって(※1)、 前橋さん> その場合、特に相手がUNIXワークステーションだったりすると環境はかなり 前橋さん> 限定できますから、「ディレクトリまるごとtarで固めてインストール先で展開。 前橋さん> パスは全て絶対指定」みたいなやり方でもなんとかなっちゃう、という面はあると 前橋さん> 思います。 前橋さん> Windows環境ではさすがにそういうのは避けるべきかと思いますが(PCはきっと 前橋さん> 他のことにも使うので)、業務用の特注アプリケーションだと、Cドライブにしか 前橋さん> インストールできなくてもさほど問題にはならなかったりします。 これが、「『とりあえず動けばいいや』的な作りでも何とかなる場合も多い」という意味でしたら同意です。 例えば、実行モジュールと設定ファイルが同一ディレクトリに置く、なんてことはマトモなアプリケーションで ならやってはいけないことだと思いますが、動かそうと思えば動くわけですし…。 前橋さん> 一般に配布するのでどこでも動くようにしたい、と考え出すと、途端に難しく 前橋さん> なりますよね。Cの場合、かつては#ifdef __SOLARIS__ とか書いてましたが 前橋さん> これはひどいということでautoconfみたいなのが出てきましたけどconfig.hに 前橋さん> 頼ってたらテストが大変(というか不可能)という状況には変わりなく、 前橋さん> 結局は、(Javaが本質的にそうであるように)最初からどこでも動くように書くのが 前橋さん> 正しいのでしょう。 私もそう思います。 だからこそ、Java を使用したアプリケーションの構築には、デザインパターンのように一定のセオリーや経験 則の蓄積があるはずだ、と思っていたのです。 が、お話を聞く限りそういう類のものは無いようですね…。 本多さん> Javaはよくわかりませんが、私はX関係とかで一般に公開されている 本多さん> かなり熟練されている人たちが作ったと思われるプログラムの 本多さん> ディレクトリ構造とかを真似してみたりしてます。 こういうノウハウは、まだ誰もドキュメントとして体系的にまとめてはいないのでしょうね。 X 関係ですか…へっぽこな私には厳しそうだ…。 …と、ここまで考えて、「アプリケーションの構成法を一般的な形に体系化するのは実は無理があるのではない か」と思えるようになってきました。 設定ファイルの読み込み方ひとつ取っても、C だと設定ファイルに記述された値を環境変数に代入し、シェル上 でコマンドに引数として渡すのが普通 (らしい) です。 が、Java には、Java 実行環境内からのみ参照できる環境変数もどきの「プロパティ」というものがありますか ら、設定ファイルの値はプログラム内から読み込むというのが普通 (らしい) です。 パスの指定にしても、C ならカレントディレクトリからの相対指定が可能なのに、Java は基底ディレクトリか らの相対指定しかできませんし…。 Make と Ant では、もう基本にある考え方そのものが違うという気がします。 でもなぁ…せめて個別のビルドツールについて、その設計思想を解説した本やサイトくらいあっても良さそうな ものだとやっぱり思うのですよ。
[この投稿を含むスレッドを表示] [この投稿を削除]
[244] Re:「センス・オブ・プログラミング」からの引用について
投稿者:tasaeda
2007/02/20 02:13:25

tasaedaです。ご返信ありがとうございます。 >正直、私としてはあまりこういう質問が来ることは想定していなかったのですが、 私もちょっと筋違いかなとは思ったのですが、引用については様々な本や記事で話題に なっていますし、少しでも自信がなければ(私自身経験不足ですから)しっかり確認を とっておいた方が良いだろうと思いまして。 >ということで、数ページ程度の引用でしたらまったく問題ありません。 なるほど、承知しました。一つの基準として覚えておきます。もっとも数ページも引用 してしまっては、私程度の筆力では間違いなく「主従の関係」が逆転してしまいそうです。 >もし必要でしたら、該当部分の電子ファイルをお送りしますが、どうしましょうか? それは大変助かります。本の文章をネットで掲載するには、自分でキーボードを叩か ねばなりませんしね。(私は遅筆なものですから) ではご厚意に甘えてメールを出させていただきますので、いつでも結構ですからご返信 いただければ幸甚です。 過分なご配慮、ありがとうございました。
[この投稿を含むスレッドを表示] [この投稿を削除]
[243] Re:「センス・オブ・プログラミング」からの引用について
投稿者:(ぱ)
2007/02/20 02:13:25

>前橋様、皆様、初めまして。tasaedaと申します。 はじめまして。 >そういうわけですので、差し支えなければ前橋さんからの引用に関しての注意点や >不都合とお考えになることについて、お教えいただけたらと存じます。 状況は了解いたしました。 正直、私としてはあまりこういう質問が来ることは想定していなかったのですが、 私自身の都合からすれば、その引用を読んで「もう本は買わなくてもいいや」と 思う人さえ出て来なければ差し支えないわけです(おそらく出版社さんとしても)。 具体的には「1章まるごと」とかの転載をされなければ問題ないと思います。 1ページ程度であれば全然問題ないです。 また、引用部分を読んで、「こんなクソ本買うのやめた」と思う人がいたとしても、 それは仕方がないと思います(立ち読みでも発生し得る話ですし)。 本来、この本を読んでメリットを受ける人が(仮にいるとして)、その引用部分を読んで、 目的を達成してしまうと、私としては(経済的に)嬉しくないわけですけど、 1ページやそこらはもともと立ち読みできる範囲内ですから。 ということで、数ページ程度の引用でしたらまったく問題ありません。 引用した上でボロクソにけなそうがかまいません(再反論はするかもしれませんけどね) ので、ご自由にしてください。 もし必要でしたら、該当部分の電子ファイルをお送りしますが、どうしましょうか? もっとも私の手元にあるのは編集さんの手が入る前の、著者校正もしていないものだけ ですから、漢字の使い方が違っていたり誤植があったりしますけれど。 必要でしたら、そう言っていただければ、1/10中にはメールで送れると思います。
[この投稿を含むスレッドを表示] [この投稿を削除]
[242] 「センス・オブ・プログラミング」からの引用について
投稿者:tasaeda
2007/02/20 02:13:25

前橋様、皆様、初めまして。tasaedaと申します。 プログラミングに関する話題ではないのですが、掲題に関する質問がございますので 投稿させていただきます。 私のホームページでは雑文のようなものを書いているのですが、近日中の日記に前橋 さんの「センス・オブ・プログラミング」から一部を引用させていただこうと考えて おります。 具体的には、今のところP.10の24行目からP.11の15行目くらいまでを想定しています。 ただ読み始めて間がないので、他に感銘を受けた箇所を見つけた時は、もう少し増える かもしれません。 引用の理由ですが、プログラミングに関することでは全くございません。最近「抽象」 についての駄文を書いているとき、偶然手元にある貴著を拝読し、「これは自分の 考えにピッタリだ!」と思いましたので、早速日記に書こうと思いました。 ただ、引用部分が少々長くなりそう(あるいは増えそう)だな、と感じましたので、 これは前もって著者様に確認しておいた方がよいと判断し、この度お伺いを立てた 次第です。 そういうわけですので、差し支えなければ前橋さんからの引用に関しての注意点や 不都合とお考えになることについて、お教えいただけたらと存じます。 無論、文化庁の言う「引用における注意事項」は当然守りますが、それ以外に留意 して欲しいことがございましたら、ということです。 以上、宜しくお願いいたします。 追記:前橋さんの本には「C言語 ポインタ完全制覇」以降全てお世話になっており ます。もう何年もたちますが「最後は本人次第だなぁ」と痛感しております(苦笑)
[この投稿を含むスレッドを表示] [この投稿を削除]
[241] Re:int32_tについて
投稿者:(ぱ)
2007/02/20 02:13:25

ISO C99はすっかり頭から抜け落ちていたので、今調べなおしました (^^; >int32_t を生で使うのがアレなのは賛成ですが、 >typedef int32_t CustomerID; のようにして >int ではなく CustomerID を使うってのは OK >なんですよね? 私の主張は「低レベルな概念をわざわざアプリケーションにばらなくな」 ということなので、CustomerIDを使うのであれば問題ないと思います。 ただ、ISO C99を前提にするのなら、CustomerIDなら、int_least32_tの 方が移植性が高そうには思います。 が、「どの環境でも同じようにバグって欲しい」とか、 「バイトオーダーがある程度限定されてもよいから生データでやりとりしたい」 とかの状況も当然あるとは思います。移植性という点ではどちらもなんとも 中途半端だと思いますが、全面否定はできません。 >int32_t の定義されてない古い処理系上で、 >上の CustomerID のような typedef を行うために、 >アプリケーションで「typedef int int32_t;」するのも >OK なんですよね? 上のような意図なので、これもOKですね。 いつもながら軽率な表現ですみません(ご指摘ありがとうございます(_o_)) 意図としてはそのあたりだとご理解くださいませ。
[この投稿を含むスレッドを表示] [この投稿を削除]
[240] Re:int32_tについて
投稿者:kit
2007/02/20 02:13:25

一応、念のため確認です。 int32_t を生で使うのがアレなのは賛成ですが、 typedef int32_t CustomerID; のようにして int ではなく CustomerID を使うってのは OK なんですよね? あと、int32_t は既に C言語標準に含まれているので、 基本的にはアプリケーションで定義する必要はないわけ ですが、int32_t の定義されてない古い処理系上で、 上の CustomerID のような typedef を行うために、 アプリケーションで「typedef int int32_t;」するのも OK なんですよね?
[この投稿を含むスレッドを表示] [この投稿を削除]
[239] Re:int32_tについて
投稿者:本多
2007/02/20 02:13:25

>> 私は特殊なソフトウエアを作ってる場合が多いので、あれですけど、 >> 色々な環境からハードウエアを直に叩く様なアプリケーションを >> 作っていて、そういう時整数型のビット数とかは非常に重要になっていたりしますが。 >もちろんそういう低レベルな階層を意識しなければならないケースでは、 >ビット数を意識する必要があると思います。それでもできるだけ階層化して、 >下の方に押し込めたいところですが。 私の感覚が特殊な状況にあったようですね。 私の作るアプリケーションが いわゆるICデバイスを生で扱うためのもので、 最上位...つまりユーザインターフェイスにまでビット数やら 各ビットの01情報が見えないといけないという「超特殊」なモノ... 私が特殊な環境のプログラムばかり作っているってことを忘れてました(^^;) しかも、私の環境がWindows⇔UNIXという移植性は(あまり)考える必要がないので バイトオーダと言うことも考えから抜け落ちてました。 そうですねぇ。一般の例えばワープロとかで、使うintが何bitか なんて概念が残ってる必要はないですよねぇ。
[この投稿を含むスレッドを表示] [この投稿を削除]
[238] int32_tについて
投稿者:(ぱ)
2007/02/20 02:13:25

件名を変えました。 >># そういう意味で、typedef int int32_t; みたいなのは、少なくともアプリケーション >># プログラムとしては、方向性が間違ってると思う。 … > 一般のアプリではビット数なんか気にしないで作らんとあかんって言うことでしょうか? まあ、簡単に言ってしまえばそういうことです。 > でも、ファイルフォーマットとかでやっぱりビット数って重要になりそうですが。 ファイルにデータを吐き出したいのなら結局バイト列まで面倒を見なければ いけないでしょう。int32_tを、32bitだからってそのままファイルに吐いてたら、 バイトオーダーの問題さえ解決できません。まあ、バイトオーダー(とか負の数の 表現方法とか)が同じ環境に限り移植性が高い、というだけでもメリットは もちろんあるので、全面的に否定はしませんが。 コンピュータの世界では、実に色々な概念が階層的に構成されていて、 ハードに近い「低レベルな」概念を、より抽象的な概念で隠す、という層の 積み重ねになっています。が、typedef int int32_t; は、より低レベルな階層を 剥き出しにする方向の定義になっている。これじゃあ向きが反対です。 その意味で、私は、Javaな人が、「Javaでは、Cなんかと違い、intとかの データ型のサイズがきちんと規定されているから良い」という主張が理解できません。 「intは最低限いくつからいくつまでの数を表現できる」という規定があれば (本来は)十分じゃないでしょうか。実際、Cの規格ではそれは保証していますし。 # intが3万ちょっとであふれるのは嫌だ、ということなら、「俺のプログラムは # intが32ビット以上の環境だけを対象とする」と言ってもよいでしょう。 2147483647に1足すと-2147483648になる、なんてことを仕様で保証しても、 「どの環境でも同じようにバグる」ことが保証できるだけでしょう。 現実問題としては「どの環境でも同じようにバグる」と助かるのは確かですが、 そういう意味で利便を図るなら、実行時エラーにする(できる)ほうが 筋が通ってますよね(C#のように)。 > 私は特殊なソフトウエアを作ってる場合が多いので、あれですけど、 > 色々な環境からハードウエアを直に叩く様なアプリケーションを > 作っていて、そういう時整数型のビット数とかは非常に重要になっていたりしますが。 もちろんそういう低レベルな階層を意識しなければならないケースでは、 ビット数を意識する必要があると思います。それでもできるだけ階層化して、 下の方に押し込めたいところですが。
[この投稿を含むスレッドを表示] [この投稿を削除]
[237] Re:ビルドという行為について
投稿者:本多
2007/02/20 02:13:25

あけまして おめでとうございます。 少し趣旨の異なる質問ですが ># そういう意味で、typedef int int32_t; みたいなのは、少なくともアプリケーション ># プログラムとしては、方向性が間違ってると思う。 この方向性が間違っていると言うのは, どういうことを意味してるのでしょう? int32_tみたいな型を利用するのは、けっこう便利だと思うのですが。 一般のアプリではビット数なんか気にしないで作らんとあかんって言うことでしょうか? でも、ファイルフォーマットとかでやっぱりビット数って重要になりそうですが。 私は特殊なソフトウエアを作ってる場合が多いので、あれですけど、 色々な環境からハードウエアを直に叩く様なアプリケーションを 作っていて、そういう時整数型のビット数とかは非常に重要になっていたりしますが。 >>ビルドについて詳細に取り上げている書籍、もしくはサイトをご存知の方、ご教授願います。 >これは私も知りたいです。詳しい方、よろしくお願いいたします。 Javaはよくわかりませんが、私はX関係とかで一般に公開されている かなり熟練されている人たちが作ったと思われるプログラムの ディレクトリ構造とかを真似してみたりしてます。 まぁ、新規に作り始めることが少ないので、 既にある環境で何も考えずに やってることがほとんどですが。 なんつうか、頭を使わない私なのでした。
[この投稿を含むスレッドを表示] [この投稿を削除]
[236] Re:ビルドという行為について
投稿者:(ぱ)
2007/02/20 02:13:25

>皆様初めまして、HN「けろ助」と申します。 はじめまして。 >ビルドを効率的、柔軟に行えるようにするには、makefile (make)、build.xml (ant) の記述ノウハウはもちろ >んのこと、ディレクトリ構成等も慎重に考えて設計しなくてはならないように思います。 いやあ、このあたりは、最近はかなり「若い奴にお任せ」してる部分が大きいので、 私がこの方面に詳しいかというとそんなことはないと思います (^^; 詳しくないなりに思うところを書きますが、こういうのはアプリケーションと 環境により千差万別なわけですが、実はプログラマが仕事で書くプログラムの 95%は特定顧客からの受注アプリケーションだという現実があって(※1)、 その場合、特に相手がUNIXワークステーションだったりすると環境はかなり 限定できますから、「ディレクトリまるごとtarで固めてインストール先で展開。 パスは全て絶対指定」みたいなやり方でもなんとかなっちゃう、という面はあると 思います。 Windows環境ではさすがにそういうのは避けるべきかと思いますが(PCはきっと 他のことにも使うので)、業務用の特注アプリケーションだと、Cドライブにしか インストールできなくてもさほど問題にはならなかったりします。 一般に配布するのでどこでも動くようにしたい、と考え出すと、途端に難しく なりますよね。Cの場合、かつては#ifdef __SOLARIS__ とか書いてましたが これはひどいということでautoconfみたいなのが出てきましたけどconfig.hに 頼ってたらテストが大変(というか不可能)という状況には変わりなく、 結局は、(Javaが本質的にそうであるように)最初からどこでも動くように書くのが 正しいのでしょう。 # そういう意味で、typedef int int32_t; みたいなのは、少なくともアプリケーション # プログラムとしては、方向性が間違ってると思う。 Javaではそういうところは改善されているはずが、Webアプリ構築のために アプリケーションサーバを導入すると移植性なんかどっか行っちゃったりしますし、 JDKのバージョンに泣かされることもあります。 「Tigerはいつになったら仕事で使えるんだろう?」 「あと数年は無理じゃないですかねえ」 という会話を、まさに今日、同僚としてました。 >ビルドについて詳細に取り上げている書籍、もしくはサイトをご存知の方、ご教授願います。 これは私も知りたいです。詳しい方、よろしくお願いいたします。 ※1「魔法のおなべ」より http://cruel.org/freeware/magicpot.html
[この投稿を含むスレッドを表示] [この投稿を削除]
[235] ビルドという行為について
投稿者:けろ助
2007/02/20 02:13:25

皆様初めまして、HN「けろ助」と申します。 職業プログラマ歴3年と9ヶ月のまだまだへっぽこです。 前橋さんのファン歴(?)は「Java 謎+落とし穴」発刊以来ですから丸3年くらいでしょうか。 で、いきなりですが質問なのです。 本格的なアプリケーションを作る場合、「ソースを書いてコンパイルする」だけではなく、「リリース用のファ イルセット (実行モジュールや設定ファイル等の集合) を作成する」という作業も必要になってくると思います。 そして世間一般ではこの作業を「ビルド」と言い習わしているようです (正確な定義は良く認識できていません。 コンパイル~リリース用ファイルセット作成までの、一連の作業を「ビルド」と言っている場合もあれば、個別 の作業行為を「ビルド」と言っている場合もあるからです)。 ビルドを効率的、柔軟に行えるようにするには、makefile (make)、build.xml (ant) の記述ノウハウはもちろ んのこと、ディレクトリ構成等も慎重に考えて設計しなくてはならないように思います。 プログラマにとってデータ構造やアルゴリズムと同程度に重要な話題に思えるのですが、参考になる書籍やサイ トが見つからずに困っております。 ビルドツールの使い方そのものについては充分な情報が得られるのですが…。 ビルドについて詳細に取り上げている書籍、もしくはサイトをご存知の方、ご教授願います。 特に Java+ant に向いた情報を必要としています。 「自分は大抵こんな構成で作ってる」「このオープンソースの設計が参考になる」「そんなものはプログラマの 基本教養じゃ。この青二才め」等、何でも構いません。 よろしくお願いします。 個人的には、前橋さんに「本格的なアプリケーションの構築技法」の本を出していただきたいな…と思っていた りするのですが。
[この投稿を含むスレッドを表示] [この投稿を削除]
[234] Re:インタプリタとコンパイラ
投稿者:(ぱ)
2007/02/20 02:13:25

Perlに詳しいわけではありませんが、故あって最近Perlのソースを眺めたりも してるので、ちょっと調べてみました。 >perlの場合、関数の引数は全て配列(@_)として扱われます。なので、この場合は、 >一つ目の%sには$_[0]が、二つ目の%sには$_[1]が、三つ目の%sには$_[2]が入ります。 Perlで記述された関数についてはその通りでしょうが、今回のケースのsprintfは Perl組み込みの関数ですから、Cで書かれた実装部分に引数の数が渡っているかどうかが 問題では? で、5.8.6のソースから探したところ、どうもsv.cのPerl_sv_vcatpvfnが sprintfの実装のように見えます(1000行近い巨大関数。sprintfじゃあ しょうがないですが)。 void Perl_sv_vcatpvfn(pTHX_ SV *sv, const char *pat, STRLEN patlen, va_list *args, SV **svargs, I32 svmax, bool *maybe_tainted) doop.cのPerl_do_printf()から追跡すると、このsvmaxが、引数の数のように見えます。 printfかましてminiperlを再構築し、確認しましたが、実際に引数の数が渡って きているようです。 が、この関数の中でsvmaxをどう使っているか見てみると、 if (svix < svmax) { というように「svmaxを超えてないか?」というチェックは何箇所かでしてますが、 上記の箇所でもelse節はなかったりするので、そのために何も起きないんじゃ ないでしょうか。
[この投稿を含むスレッドを表示] [この投稿を削除]
[233] あけましておめでとうございます
投稿者:(ぱ)
2007/02/20 02:13:25

あけましておめでとうございます。今年もよろしくお願いいたします。 しばらくごぶさたしてましてすみません。 この年末は、風邪ひいて寝込むわ、紅茶ひっくり返して太ももをやけどするわで、 ただでさえ短い正月休みの前半は寝ている間に終わってしまいました。 Webページの更新を含め、やりたいことはいろいろあったはずなので、 3が日の間にぼちぼち進めるつもりです   …無理かも。断酒も明けたし。 なお、正月バージョンの壁紙は、 「へなちょこ愚連隊」 http://www6.wind.ne.jp/hena/index.html からお借りしました。
[この投稿を含むスレッドを表示] [この投稿を削除]
[232] Re:インタプリタとコンパイラ
投稿者:iwa
2007/02/20 02:13:25

>Perlのようなインタプリタ型の言語は、なぜエラーにならないのでしょうか? インタプリタだから、ではなくて、perlの言語仕様的な問題です。 perlの場合、関数の引数は全て配列(@_)として扱われます。なので、この場合は、 一つ目の%sには$_[0]が、二つ目の%sには$_[1]が、三つ目の%sには$_[2]が入ります。 このとき、Cあたりだと配列長を超えたらそのままバッファオーバーラン、Javaだと 例外が投げられますが、perlの場合は読むときはundefが返り、書くときは自動で 配列長が拡大されます。 今回の場合は、$_[2]を読もうとして返ってきたundefが文字列化されて空文字列 扱いになったわけです。
[この投稿を含むスレッドを表示] [この投稿を削除]
[231] Re:C言語ポインタ完全制覇についての質問
投稿者:れぷ
2007/02/20 02:13:25

>>externで「外部にあるよ!」と宣言してるにも関わらず、 >「プログラマの意図」はそうなのかもしれませんが、言語規格書の主張は違います。 >3.5-6 で、こういう宣言を行うと hoge() は内部結合のままだと書かれています。 ふむふむ。C++だとそう記述があるのですね。 ありがとうございます。
[この投稿を含むスレッドを表示] [この投稿を削除]
[230] Re:インタプリタとコンパイラ
投稿者:kon
2007/02/20 02:13:25

御指摘ありがとうございます。 >sprintf は「可変個引数」な関数です。 >固定な引数=必ず必要な引数、が無いとエラーになりますが、 >可変個数部分=有るか無いかは状況次第、が過不足していてもエラー検出することはできません。 >原理的に不可能。 申し訳ありません。すっかり忘れていました。 (前橋さんの本などで、話題になっていたのに・・・) printf系の関数は実引数が不足しているときの動作は未定義でしたね。 >C/C++ では上記コードのエラー検出はされません。 確認せずに記述してしまいました。(VC++でも検出しませんでした) 大変お騒がせ致しました。 (件名のインタプリタとコンパイラとは一切関係ありませんでした (;_;) )
[この投稿を含むスレッドを表示] [この投稿を削除]
[229] Re:インタプリタとコンパイラ
投稿者:774RR
2007/02/20 02:13:25

>my $string = sprintf("%s %s %s\n", $day, $message); perl はぜんぜん知りませんが、この sprintf が C の sprintf と同じ機能と仮定して: C/C++ では上記コードのエラー検出はされません。 sprintf は「可変個引数」な関数です。 固定な引数=必ず必要な引数、が無いとエラーになりますが、 可変個数部分=有るか無いかは状況次第、が過不足していてもエラー検出することはできません。 原理的に不可能。 # GNU CC では printf 系関数のフォーマット引数が文字列リテラルな場合に限り、 # 個数や形の不一致を検出してくれますが、一般的には無理。
[この投稿を含むスレッドを表示] [この投稿を削除]
[228] Re:C言語ポインタ完全制覇についての質問
投稿者:774RR
2007/02/20 02:13:25

とりあえず以下 C++ の話に限定 (ISO/IEC 14882:1998) 。 # C 規格書はウチに帰r) >externで「外部にあるよ!」と宣言してるにも関わらず、 「プログラマの意図」はそうなのかもしれませんが、言語規格書の主張は違います。 3.5-6 で、こういう宣言を行うと hoge() は内部結合のままだと書かれています。
[この投稿を含むスレッドを表示] [この投稿を削除]
[227] インタプリタとコンパイラ
投稿者:kon
2007/02/20 02:13:25

いつも楽しく拝見しています。 久しぶりに投稿します。konです。 質問なんですが、 共通機能でログを作成する機能をPerlで作成する事になりました。 その際、ログファイルに情報を1行ずつ書くのですが 必ず最後にスペースが入って改行される現象がありました。 原因は my $string = sprintf("%s %s %s\n", $day, $message); 上記のコードで、2番目の%sの後のスペースが表示されて、3番目の%sが引数のエラー にならない事が分かりました。 Cなどのコンパイラ型の言語なら、コンパイルエラーになりますが Perlのようなインタプリタ型の言語は、なぜエラーにならないのでしょうか? (strictはいれてますが、ワーニングにもなりません) Perlのマスターが言うには、”Perlはアバウトだからね”と意味不明(論理的でない?) 回答が返ってきました。私も、あまりPerlをやっていないのでとても 気持ちが悪いです。
[この投稿を含むスレッドを表示] [この投稿を削除]
[226] Re:C言語ポインタ完全制覇についての質問
投稿者:れぷ
2007/02/20 02:13:25

>は、「コンパイラさん、宣言はブロックスコープを越えないで…」というような、私の嘆きの意味合いです。 なるほど、そうでしたか。 私は「ブロックスコープを超えるのはなんで?」と読めたのでその理由を書き足したのです(^-^;) # とりあえず解決!?
[この投稿を含むスレッドを表示] [この投稿を削除]
[225] Re:C言語ポインタ完全制覇についての質問
投稿者:れぷ
2007/02/20 02:13:25

>まぁ、コンパイラがリンク処理を行う段階でexternなんていう情報は >すっかり消えうせて関数名だけ残ってしまう。 >しかも、名前の一致する呼び出し元と実体をリンク処理しちゃう。 ここ、私の解釈が間違ってましたね・・・ 本多さんの意図はexternで「外部にあるよ!」と宣言してるにも関わらず、 同一ファイル内に同じ名前があると「外部」を見に行かなくなるってことですね。 # ブロックスコープの「外にある」という風に解釈するのが自然!?
[この投稿を含むスレッドを表示] [この投稿を削除]
[224] 背景をいじってみました
投稿者:(ぱ)
2007/02/20 02:13:25

クリスマスバージョン(柄にもなく)ということで背景をいじってみました。 イブの晩が終わったら戻そうと思います。 少し前、板ごとにCSSをいじれるようスクリプトを修正しました。 なので、以前作ったテスト掲示板↓では、古いCSSがそのまま適用されています。 http://kmaebashi.com/bbs/list.php?boardid=testbbs 板ごとに多少の紹介文をページ上部に入れられるような修正もしたのですが、 とりあえず今は時間がないので 今回の素材は以下のページからお借りしました。 http://kisetu.chu.jp/navi_fuyu_xmas.html ところで、クリスマスといえば、最近久々にアクセス記録なぞ見たのですが、 「赤鼻のトナカイ」「赤鼻のトナカイ 歌詞」という検索キーワードで この雑記↓に到達した人が最近結構いらっしゃるようです。さすがはクリスマス。 http://kmaebashi.com/zakki/zakki0009.html#xmas きっとお役には立てなかったと思います。すみませんねえ。
[この投稿を含むスレッドを表示] [この投稿を削除]
[223] Re:C言語ポインタ完全制覇についての質問
投稿者:九龍
2007/02/20 02:13:25

自己レスです。 >>a)hoge1()の中のpiyoの宣言はhoge1()の中で完結していて、 >なのに、既存の宣言(hoge1の関数ブロック内の宣言)との整合性がチェックされているとは…。 は、「コンパイラさん、宣言はブロックスコープを越えないで…」というような、私の嘆きの意味合いです。
[この投稿を含むスレッドを表示] [この投稿を削除]
[222] Re:C言語ポインタ完全制覇についての質問
投稿者:九龍
2007/02/20 02:13:25

れぷさんへ。 > a)hoge1()の中のpiyoの宣言はhoge1()の中で完結していて、 > b)hoge2()の中のpiyoの呼び出しで、宣言がないので暗黙にintを返す関数として > 宣言されて、 > c)その宣言の段階で、既存の宣言との整合性がチェックされ、なぜかこのときは > hoge1()の中での宣言とのチェックも行っていて、そのためにエラーになった。 なので、 「a)hoge1()の中のpiyoの宣言はhoge1()の中で完結していて、」なのですが、 最終的には、 「c)その宣言の段階で、既存の宣言との整合性がチェックされ、なぜかこのときは  hoge1()の中での宣言とのチェックも行っていて、そのためにエラーになった。 」 となるので、前者の文章は「完結していて」が「完結していない」という結論になります。 (チェックされていればhoge1で完結している事にはなりませんので、(ぱ)さんは完結していないと仰りたかったんだと私は解釈しております。間違ってたらごめんなさい。) という訳で(私の解釈が正しければ)、bcc32では774RRさんが仰っている > と思います。C++ と違い C の場合、K&R1 の頃の(いわゆる non-ansi C) との後方互換性を > 保つため、規格書に書かれていない(もしくは規格書が禁じている)後方互換のための機能が > いくつも有効になっている処理系がほとんどのようです。 となります。 という訳でして、hoge1()のextern宣言時では「外部関数はグローバルにあると想定するしかない」ですよね。 で、宣言が完結していていない(コンパイラが余計(?)なことをしてくれるため)ため、「外部関数はグローバルにあると想定するしかない」がhoge2にも摘要されるので、れぷさんの仰る通り、 > なので「外部関数はグローバルにあると想定するしかない」→「だから整合チェックがかかるのでは?」と思ったわけです。 となります。 一応念の為に書いておきます。
[この投稿を含むスレッドを表示] [この投稿を削除]
[221] Re:C言語ポインタ完全制覇についての質問
投稿者:れぷ
2007/02/20 02:13:25

> と仰っているので、C++の名前空間的な機能が無い限り衝突はされられないので、それはできないとい >う結論になると思います(少なくても私の知っている限りでは)。 そうなりますね。 実は私が反応したのはお二方の文、   >>a)hoge1()の中のpiyoの宣言はhoge1()の中で完結していて、   >なのに、既存の宣言(hoge1の関数ブロック内の宣言)との整合性がチェックされているとは…。 だったりします。 なので「外部関数はグローバルにあると想定するしかない」→「だから整合チェックがかかるのでは?」と思ったわけです。 ちなみにstaticを使ってしまうと、最初のソースの記述では hoge1()もhoge2()もstaticのほうを呼び出してしまうので、 元のソースとは構成を変える必要が出てしまいますね(^-^;)
[この投稿を含むスレッドを表示] [この投稿を削除]
[220] Re:C言語ポインタ完全制覇についての質問
投稿者:九龍
2007/02/20 02:13:25

> 例えば、externする側をa.c、ローカルextern用のpiyo()を定義したものをb.c、  仰っている意味が分かりました。  ローカルextern用のpiyo()は、a.cのローカルextern用の関数定義って事だったんですね。 > 例えば、externする側をa.c、ローカルextern用のpiyo()を定義したものをb.c、 > グローバルextern用のpiyo()を定義したものをc.cしたとして、 > どちらのpiyo()をローカルへリンクして、もう一方をグローバルでリンクすれば良いのか、 > コンパイラこれを判断するにはどうすることが良いのでしょうか? > b.c、c.cの関数定義はいずれにせよグローバルにおかれるでしょうし、 > コンパイラもそれを想定していると考えるなら衝突することになるのかな、なんて思いました。 > 名前空間があれば解決できるのでしょうが、Cは空間分けがザックリすぎて(^-^;) > それができないですよね。  774RRさんも、 > C の場合は名前空間わけがざっくりすぎるし、オーバーロードは無いので、 > 結局同一名称の関数は1つしか存在し得ないわけです。では  と仰っているので、C++の名前空間的な機能が無い限り衝突はされられないので、それはできないという結論になると思います(少なくても私の知っている限りでは)。  ローカルのextern宣言の意味については774RRさんの仰っている通りです。  一応念の為に書いておきますが、b.cのpiyoをa.cのhoge1専用の作業関数としたい場合にはstaticを付けて、翻訳単位を分けるという方法しかないと思います。
[この投稿を含むスレッドを表示] [この投稿を削除]
[218] Re:C言語ポインタ完全制覇についての質問
投稿者:本多
2007/02/20 02:13:25

宣言した関数が宣言のあるブロック内でのみ有効と明示したいんでしょうね。 でも、C言語を使っていると型はコンパイル後に情報が残らないので、 同じ名前が二つ残ったら、リンクエラーになるんですね。 宣言を関数ブロックに入れるというのが、かなり異常な使い方だと思いますが。 実際、以下の様になってると宣言は何の効果も発揮しません。 ----test1.c---- #include <stdio.h> static int hoge(void) { printf("static int hoge()\n"); return 0; } int main(void) { extern int hoge(void); hoge(); return 0; } ----test2.c---- #include <stdio.h> int hoge(void) { printf("extern int hoge()\n"); return 0; } ---- % gcc -O2 -Wall test1.c test2.c % a.out static int hoge() まぁ、コンパイラがリンク処理を行う段階でexternなんていう情報は すっかり消えうせて関数名だけ残ってしまう。 しかも、名前の一致する呼び出し元と実体をリンク処理しちゃう。 だから処理内容を考えると当たり前の結果なんでしょうけど。 宣言で自分の結合先を選べるという意図があったとして、結果がこうなったら、 私の例はstaticを使ってるのでちょっと事情は異なりますが ちょっと残念に思うかもしれませんね。
[この投稿を含むスレッドを表示] [この投稿を削除]
[217] Re:C言語ポインタ完全制覇についての質問
投稿者:774RR
2007/02/20 02:13:25

C の場合は名前空間わけがざっくりすぎるし、オーバーロードは無いので、 結局同一名称の関数は1つしか存在し得ないわけです。では >int func1(void) { > extern int piyo(void); > return piyo(); >} の意図はというと、 「この extern を {} 外に出してしまうと同一翻訳単位中の他の関数から piyo() が正しく  呼び出せてしまって警告にならない」 ことを防止することにあります。 piyo() は func1() 専用の作業関数であることを明示したい、と。 だから func2() からは piyo() を呼び出せない、ないしは、 呼び出そうとすると警告になってほしい、わけですね。 # C++ ではきっちりエラーになってくれる。 ではない?
[この投稿を含むスレッドを表示] [この投稿を削除]
[216] Re:C言語ポインタ完全制覇についての質問
投稿者:れぷ
2007/02/20 02:13:25

九龍さん、はじめまして。  3つに別けたのはa.cのコードが以下のような状況を想定しているように思えたからです。 ---a.c--- void hoge1(void) { extern void piyo(int a); // b.c内を想定 piyo(1); } void hoge2(void) { piyo(2); // c.cを想定 }  なので、↓こういう状況を考えたわけです。 ---b.c--- // hoge1()ではAさんがくれたこっちを使おうと思った void piyo(int a) { return; } ---c.c--- // hoge2()ではBさんがくれたこっちを使おうと思った int piyo(int a) { return a; }  この状態でb.c内にあるpiyo()をhoge1()ローカルだけに対して定義できるかというとできないですよね。 従って、hoge1()でローカルexternしたpiyo()はどこにあるのかというと、 コンパイラは「外部にある関数はグローバルに存在すると想定する」としかないのかな、と思います。 そうなると、   「hoge1()でローカルexternされてるpiyo()はグローバルにあるはず」   「hoge2()のpiyo()はプロトタイプ宣言ないけどこれも多分グローバルにあるはず」 になるので、a.cのコンパイル時に正しいpiyo()をリンクするための情報を作るには 「正しいpiyo()はどれですか?」と整合エラーを吐くしかないような気がしました。  名前空間があれば解決できるのでしょうが、Cは空間分けがザックリすぎて(^-^;) それができないですよね。
[この投稿を含むスレッドを表示] [この投稿を削除]
[215] Re:C言語ポインタ完全制覇についての質問
投稿者:九龍
2007/02/20 02:13:25

れぷさん、はじめまして。 >例えば、externする側をa.c、ローカルextern用のpiyo()を定義したものをb.c、 「ローカルextern用のpiyo()を定義したもの」とありますが、どのような意味なのか理解しかねております。 具体的にどういうソースかをお書き頂けると嬉しいのですが。
[この投稿を含むスレッドを表示] [この投稿を削除]
[214] Re:C言語ポインタ完全制覇についての質問
投稿者:れぷ
2007/02/20 02:13:25

横レスすいません。 >c)その宣言の段階で、既存の宣言との整合性がチェックされ、なぜかこのときは > hoge1()の中での宣言とのチェックも行っていて、そのためにエラーになった。 ローカルでexternするにしてもグローバルでexternするにしても、 piyo()は外部に定義あるわけですよね。 例えば、externする側をa.c、ローカルextern用のpiyo()を定義したものをb.c、 グローバルextern用のpiyo()を定義したものをc.cしたとして、 どちらのpiyo()をローカルへリンクして、もう一方をグローバルでリンクすれば良いのか、 コンパイラこれを判断するにはどうすることが良いのでしょうか? b.c、c.cの関数定義はいずれにせよグローバルにおかれるでしょうし、 コンパイラもそれを想定していると考えるなら衝突することになるのかな、なんて思いました。 あー、なんかまた外したこと言ってそう(;_;)
[この投稿を含むスレッドを表示] [この投稿を削除]
[213] Re:C言語ポインタ完全制覇についての質問
投稿者:九龍
2007/02/20 02:13:25

>bcc32ですが、 > > extern void piyo(int a); > >と書いていたのを、 > > extern int piyo(int a); 一応、VC++ 6.0(SP6)でテストしてみました。 --a.c-- void hoge1 (void); void hoge1(void) { extern int piyo(int a); piyo(1); } void hoge2(void) { piyo(2); } --b.c-- int piyo (int a) { return a; } c:\cppsrc\a\a.c(11) : warning C4013: 関数 'piyo' は定義されていません。int 型の値を返す外部関数と見なします。 となりました。 しかし、 >a)hoge1()の中のpiyoの宣言はhoge1()の中で完結していて、 なのに、既存の宣言(hoge1の関数ブロック内の宣言)との整合性がチェックされているとは…。 >あまり関係ありませんが、コンパイラの警告メッセージの翻訳チームは規格書を理解して >細心の注意を払って訳しているのか、かなり疑問。 >宣言と定義は用語の意味が違うのですが、どう見ても混同していると思われます。 同感です。 私もコンパイラの警告メッセージで理解に苦しむ時があります。
[この投稿を含むスレッドを表示] [この投稿を削除]
[212] Re:C言語ポインタ完全制覇についての質問
投稿者:774RR
2007/02/20 02:13:25

>ということでしょうかね。 と思います。C++ と違い C の場合、K&R1 の頃の(いわゆる non-ansi C) との後方互換性を 保つため、規格書に書かれていない(もしくは規格書が禁じている)後方互換のための機能が いくつも有効になっている処理系がほとんどのようです。 VC++ や BCC なんかはその典型ですね。 # 関数宣言のスコープ拡大なんかはその一例。 gcc の場合、後方互換な機能が使われると警告を出すオプションがあったりしますが... あまり関係ありませんが、コンパイラの警告メッセージの翻訳チームは規格書を理解して 細心の注意を払って訳しているのか、かなり疑問。 宣言と定義は用語の意味が違うのですが、どう見ても混同していると思われます。 >エラー E2356 proto2.c 10: 'piyo' の再宣言で型が一致していない(関数 hoge2 ) >エラー E2344 proto2.c 3: 一つ前の 'piyo' の定義位置(関数 hoge2 ) 前者は正しく『宣言』ですが、後者は『定義』ではなく宣言であるはずです。 >hoge.c(7) : warning C4013: 関数 'piyo' は定義されていません。int 型の値を返す外部関数と見なします。 これもヘン。ここは『宣言』でなければならないはずです。 >hoge.c:7: warning: implicit declaration of function `piyo' gcc の英語は正しく「宣言」と言っています。 gcc-3.3.4 の gcc/po/ja.po を見たところほぼ正しく翻訳しているようですが、 一部やはり誤訳を発見。あぁ、フィードバックしないといけないかも?
[この投稿を含むスレッドを表示] [この投稿を削除]
[211] Re:C言語ポインタ完全制覇についての質問
投稿者:(ぱ)
2007/02/20 02:13:25

>C++ 規格書であれば 「JIS X3014:1998-3.3.2 局所的な有効範囲」で、 >ブロック内に宣言された名前はそのブロックに局所的である。 >と書かれています。実際以下のコードはコンパイルエラーです。 C でも、6.1.2.1 を見る限り、ブロック内で宣言された識別子のスコープは ブロック内ですから、プロトタイプ宣言もブロック内だけで有効と考えるのが 自然なように思います。 ただ、ふたつのコンパイラで、単純にそうとは言えない動きをしているので、 どこか別に規定があるのかと、昨晩は規格書をひっくり返していたのでした。 >んで、上記を hoge.c とした場合の挙動ですが >bash-3.0$ hppa2.0w-hp-hpux11.00-gcc-3.3.4 -Wall -c hoge.c >hoge.c: In function `func2': >hoge.c:7: warning: implicit declaration of function `piyo' これはプロトタイプ宣言がない場合の通常の挙動ですよね。 だから、gccでは、ちゃんとブロックでスコープが終了していて、 C++ではだめなのは、C++ではそもそもプロトタイプ宣言がないことを許さないからで。 bcc32ですが、 extern void piyo(int a); と書いていたのを、 extern int piyo(int a); にしたら通りました。 推測するに、 a)hoge1()の中のpiyoの宣言はhoge1()の中で完結していて、 b)hoge2()の中のpiyoの呼び出しで、宣言がないので暗黙にintを返す関数として  宣言されて、 c)その宣言の段階で、既存の宣言との整合性がチェックされ、なぜかこのときは  hoge1()の中での宣言とのチェックも行っていて、そのためにエラーになった。 ということでしょうかね。
[この投稿を含むスレッドを表示] [この投稿を削除]
[210] Re:C言語ポインタ完全制覇についての質問
投稿者:九龍
2007/02/20 02:13:25

申し訳ございません。コンパイラの警告レベルを4に上げるの忘れてました…(面目ないです)。 ちなみに、警告レベル3では何も出ませんでした。 >cl -W4 -Za -c hoge.c だと >hoge.c(7) : warning C4013: 関数 'piyo' は定義されていません。int 型の値を返す外部関数と見なします。 >となるのでやはりブロックスコープなのが本来みたいですね。 Microsoft言語拡張機能の無効スイッチですね(全然気にしてませんでした。これからは切るようにします…)。 確かに、これを見るとブロックスコープなのが本来の仕様みたいですね。
[この投稿を含むスレッドを表示] [この投稿を削除]
[209] Re:C言語ポインタ完全制覇についての質問
投稿者:774RR
2007/02/20 02:13:25

おっと自己レス。 cl -W4 -Za -c hoge.c だと hoge.c(7) : warning C4013: 関数 'piyo' は定義されていません。int 型の値を返す外部関数と見なします。 となるのでやはりブロックスコープなのが本来みたいですね。 ブロックスコープを超越して大域に関数宣言が有効になるのは(互換性のための)拡張機能、と。 # 規格書を要確認だなこりゃ。
[この投稿を含むスレッドを表示] [この投稿を削除]
[208] Re:C言語ポインタ完全制覇についての質問
投稿者:774RR
2007/02/20 02:13:25

C 規格書はウチに帰らないと無いのでアレげですが C++ 規格書であれば 「JIS X3014:1998-3.3.2 局所的な有効範囲」で、 ブロック内に宣言された名前はそのブロックに局所的である。 と書かれています。実際以下のコードはコンパイルエラーです。 ---hoge.cpp--- int func1(void) { extern int piyo(void); return piyo(); } int func2(void) { return piyo(); } ---EOF of hoge.cpp--- んで、上記を hoge.c とした場合の挙動ですが bash-3.0$ hppa2.0w-hp-hpux11.00-gcc-3.3.4 -Wall -c hoge.c hoge.c: In function `func2': hoge.c:7: warning: implicit declaration of function `piyo' Microsoft Visual C++ 6.0SP6 だと cl -W4 -c hoge.c hoge.c(2) : warning C4210: 非標準の拡張機能が使用されています : 関数にはファイル スコープが与えられています。 hoge.c(7) : warning C4217: 非標準の拡張機能が使用されています : 以前のブロックでの関数宣言です。 となりました。 やはり言語規格がスコープ詳細等を定めていないようです。 # IE6 でも Acrobat Reader を uninstall してから JIS 閲覧するとゲフガフ # って検索が効かない文書なので、むりくり保存してもあまり役に立たない鴨。
[この投稿を含むスレッドを表示] [この投稿を削除]
[207] Re:C言語ポインタ完全制覇についての質問
投稿者:九龍
2007/02/20 02:13:25

774RRさん、度々申し訳ありません。 >リンク先の12番の解説を文字通りに解釈してください。 >仮定義(初期化子なし定義)だけがあって、初期化子あり定義が無い場合、 >翻訳単位のEOFに達した時点で仮定義は定義となります。 >--hoge.c-- >int x; // 仮定義 >int x; // 仮定義:何回仮定義が現れても(既存の宣言に反しない限り)問題ない >int x; // 仮定義 >--EOF of hoge.c-- >この時点で int x=0; と定義されたことになる。 > >>上記の場合だと、b.cのint a;が仮定義なので、 >この文章はある意味YES、ある意味NO。確かに int a; は仮定義ですが、既に述べたとおり >翻訳単位 (b.c) の EOF に達した時点で、仮定義は「仮ではない『定義』」になります。 >よって提示の例では a.c b.c ともに変数 a が定義されています。 >そこではじめてリンク先13番目の解説が効いてきます。 > >>a.cで定義されているint a = 1;のオブジェクトとまとめられたと言うことで >「仮定義だからまとめられた」のではありません。 >「C では、定義が複数ある場合の挙動が定められていない」(未定義動作) >→「エラーにするのも、定義を1つにまとめるのも処理系の実装次第」 >→→「多くの C 処理系では定義を1つにまとめちゃう」 >となっただけです。 > >>b.cのint a;がextern int a;と解釈されている訳ではないという解釈で宜しいでしょうか? >コンパイラは int a; を勝手に extern int a; と解釈しません。 >そのへん関数宣言と変数宣言で文法が違う場所です。 なるほど。理解できました。 ご丁寧な解説、ありがとうございます。
[この投稿を含むスレッドを表示] [この投稿を削除]
[206] Re:C言語ポインタ完全制覇についての質問
投稿者:774RR
2007/02/20 02:13:25

リンク先の12番の解説を文字通りに解釈してください。 仮定義(初期化子なし定義)だけがあって、初期化子あり定義が無い場合、 翻訳単位のEOFに達した時点で仮定義は定義となります。 --hoge.c-- int x; // 仮定義 int x; // 仮定義:何回仮定義が現れても(既存の宣言に反しない限り)問題ない int x; // 仮定義 --EOF of hoge.c-- この時点で int x=0; と定義されたことになる。 >上記の場合だと、b.cのint a;が仮定義なので、 この文章はある意味YES、ある意味NO。確かに int a; は仮定義ですが、既に述べたとおり 翻訳単位 (b.c) の EOF に達した時点で、仮定義は「仮ではない『定義』」になります。 よって提示の例では a.c b.c ともに変数 a が定義されています。 そこではじめてリンク先13番目の解説が効いてきます。 >a.cで定義されているint a = 1;のオブジェクトとまとめられたと言うことで 「仮定義だからまとめられた」のではありません。 「C では、定義が複数ある場合の挙動が定められていない」(未定義動作) →「エラーにするのも、定義を1つにまとめるのも処理系の実装次第」 →→「多くの C 処理系では定義を1つにまとめちゃう」 となっただけです。 >b.cのint a;がextern int a;と解釈されている訳ではないという解釈で宜しいでしょうか? コンパイラは int a; を勝手に extern int a; と解釈しません。 そのへん関数宣言と変数宣言で文法が違う場所です。
[この投稿を含むスレッドを表示] [この投稿を削除]
[205] Re:C言語ポインタ完全制覇についての質問
投稿者:九龍
2007/02/20 02:13:25

>それをやっちゃうと、swap(float *a, float *b)のような関数で困りますし。 なるほど。仰られる通りです。 >もともと、プロトタイプ宣言なんて書かなくても(警告は出ても)動きますから、 >結合はされるとしても、プロトタイプ宣言の有効範囲は微妙な問題のように >思います。 > >以下のソースをbcc32でコンパイルしたところ、 > >void hoge1(void) >{ > extern void piyo(int a); > > piyo(1); >} > >void hoge2(void) >{ > piyo(2); >} > >こんなエラーが出ました。 >エラー E2356 proto2.c 10: 'piyo' の再宣言で型が一致していない(関数 hoge2 ) >エラー E2344 proto2.c 3: 一つ前の 'piyo' の定義位置(関数 hoge2 ) > >hoge2のブロックの先頭に「extern void piyo(int a);」を入れると >ちゃんと通るので、少なくともbcc32においては、hoge1()内部の宣言がそのまま >hoge2()内部で有効になっているというわけではないようです。 > >この件について規格書になにか書いてないかとぱらぱらめくったのですが >見つけられませんでした。 わざわざ規格書まで調べて頂き有り難うございます。 と、ゆうことは処理系依存って事なんでしょうね…。
[この投稿を含むスレッドを表示] [この投稿を削除]
[204] Re:C言語ポインタ完全制覇についての質問
投稿者:(ぱ)
2007/02/20 02:13:25

> どうせ仮引数でdoubleしか渡せないのなら、void sub_funcの関数宣言での >floatへのポインタの仮引数宣言は、doubleへのポインタに読み替えられて >いるのではないかという勝手な勘違いです。 それをやっちゃうと、swap(float *a, float *b)のような関数で困りますし。 > 例えば、別のモジュールで定義宣言されている関数を、他のモジュールの >関数ブロック内でextern void f (void)とすると(普通はこんなことしませんが)、 >その関数ブロック内だけでその関数への参照が可能だと思っていたのですが、 >それより下の関数定義ブロック内でも参照可能となっていました(VC++ 6.0で確認)。 もともと、プロトタイプ宣言なんて書かなくても(警告は出ても)動きますから、 結合はされるとしても、プロトタイプ宣言の有効範囲は微妙な問題のように 思います。 以下のソースをbcc32でコンパイルしたところ、 void hoge1(void) { extern void piyo(int a); piyo(1); } void hoge2(void) { piyo(2); } こんなエラーが出ました。 エラー E2356 proto2.c 10: 'piyo' の再宣言で型が一致していない(関数 hoge2 ) エラー E2344 proto2.c 3: 一つ前の 'piyo' の定義位置(関数 hoge2 ) hoge2のブロックの先頭に「extern void piyo(int a);」を入れると ちゃんと通るので、少なくともbcc32においては、hoge1()内部の宣言がそのまま hoge2()内部で有効になっているというわけではないようです。 この件について規格書になにか書いてないかとぱらぱらめくったのですが 見つけられませんでした。 ご存知の方がいらっしゃいましたら情報よろしくお願いいたします(_o_)
[この投稿を含むスレッドを表示] [この投稿を削除]
[203] Re:C言語ポインタ完全制覇についての質問
投稿者:九龍
2007/02/20 02:13:25

774RRさん、度々申し訳ありません。 すばやいレスありがとうございます。 つまり、 --a.c-- int a = 1; // 定義 --b.c-- int a; // 仮定義 上記の場合だと、b.cのint a;が仮定義なので、a.cで定義されているint a = 1;のオブジェクトとまとめられたと言うことで、b.cのint a;がextern int a;と解釈されている訳ではないという解釈で宜しいでしょうか? (774RRさんがお書きになったリンク先の13番目の項目に該当するので、結局それは処理系依存になる為、VC++ 6.0ではまとめられて解釈されたというような解釈で宜しいでしょうか?) 後、くだらない事をお聞きしますが、 -- a.c -- #include <stdio.h> extern void f (void); // a.c の関数 f と結び付く(通常externは付けないけど) int main (void) { f (); return 0; } static void f (void) { printf ("a.c の関数 f\n"); } -- b.c -- #include <stdio.h> extern void f (void) { printf ("b.c の関数 f\n"); } の場合、main関数のf関数の呼び出しは、a.cにある関数fとなりますが、この場合のextern void f (void)の関数プロトタイプ宣言のリンケージ属性はどうなるのでしょうか? くだらない質問ですが、宜しくお願い致します。
[この投稿を含むスレッドを表示] [この投稿を削除]
[201] Re:C言語ポインタ完全制覇についての質問
投稿者:774RR
2007/02/20 02:13:25

関数宣言と変数宣言では話が違います。 関数宣言の省略時解釈は extern つまり外部結合ありです。 関数定義においても省略時解釈は extern つまり外部結合ありです。 関数定義と関数宣言とでは書式が違うので誤解を生む余地が無く、問題は発生しません。 大域変数の「定義にならない宣言」の場合は extern が必須です。 extern を書かずに大域変数を宣言し、初期化子が無い場合 ・C の場合:変数の仮定義となります。仮定義は複数個あってかまいません。 ・C++ の場合:変数の定義となります。定義は1つしか許されません。 ・C/C++ とも、その大域変数は外部結合となります。 --a.c-- extern int g; /* 定義にならない宣言 */ int g; /* 仮定義 */ int g=1; /* 定義 */ C の場合、言語規格は 「同一翻訳単位中に同一名称の大域変数の複数個の仮定義がある」ことを認めています。 「複数翻訳単位中に同一名称の大域変数の定義がある」ことは定めておらず、 たいていの処理系では全翻訳単位での定義を1つにまとめてしまいます。 ==b.cpp== extern int g; /* 定義にならない宣言 */ int g; /* 定義 */ int g=1; /* 再定義:エラー */ C++ の場合、仮定義などというものはないので 「同一翻訳単位中に同一名称の大域変数の複数個の定義がある」 「複数翻訳単位中に同一名称の大域変数の複数個の定義がある」 の両方が言語規格上、認められずエラー発生となります。 http://www2s.biglobe.ne.jp/~hig/q_a/Programing_QA02.html
[この投稿を含むスレッドを表示] [この投稿を削除]
[200] Re:C言語ポインタ完全制覇についての質問
投稿者:九龍
2007/02/20 02:13:25

774RRさん、はじめまして。 >>>int hoge(void); という関数宣言は extern int hoge(void); と解釈されます。 >>そのため、過去のコンパイラ用に書かれたコードとの互換性のために、 >>「複数個の翻訳単位で同一名称の変数が定義されたら、それを同一の実体とみなす」 >>処理系がほとんどです。 という事は、他の翻訳単位のファイルスコープ(外部宣言)で同一識別子で変数定義宣言をおこなった場合でも、省略時解釈ではexternになるために省略可能(でも普通は区別する為に付けますが)って解釈で宜しいのでしょうか?
[この投稿を含むスレッドを表示] [この投稿を削除]
[199] Re:C言語ポインタ完全制覇についての質問
投稿者:774RR
2007/02/20 02:13:25

>>・どこかで定義されている関数を使う場合、プロトタイプ宣言を行うが、 >> これにはexternをつけても付けなくても良い(で、たぶん普通はつけない) つけてもつけなくても良い、というか単純に省略時解釈なだけですね。 int hoge(void); という関数宣言は extern int hoge(void); と解釈されます。 void piyo(void) {} という関数定義は extern void piyo(void) {} と解釈されます。 extern がついているので外部結合となるわけです。 あと C と C++ では規則が少し変更されていて --a.cpp-- int g; --b.cpp-- int g; とするとエラーになります (One Definition Rule : ISO/IEC 14882:1998 3.2) C の場合 ODR の規定がありません。 そのため、過去のコンパイラ用に書かれたコードとの互換性のために、 「複数個の翻訳単位で同一名称の変数が定義されたら、それを同一の実体とみなす」 処理系がほとんどです。 # そーいうコードが多く残っているので。
[この投稿を含むスレッドを表示] [この投稿を削除]
[198] Re:C言語ポインタ完全制覇についての質問
投稿者:九龍
2007/02/20 02:13:25

 (ぱ)さん、はじめまして。  丁寧なご解答ありがとうございます。 >そうです…と答えると一言で終わってしまうわけですが、何か疑問があるので >質問されたのだと思います。そこをもう少し明確にしていただけると、何か回答 >できるかもしれません。 >たとえばfloat 4バイト、double 8バイトの処理系を仮定したとして、fは実は >doubleなので 8バイトです。その領域をfloat *で読めるはずはないわけです。    するどいですね。実は私が最初に思ったのが、どうせ仮引数でdoubleしか渡せないのなら、void sub_funcの関数宣言でのfloatへのポインタの仮引数宣言は、doubleへのポインタに読み替えられているのではないかという勝手な勘違いです。  それでちょっと心配になったのでご質問させて頂きました。  後、externとリンケージについての解答もありがとうございます。 >・どこかで定義されている関数を使う場合、プロトタイプ宣言を行うが、 > これにはexternをつけても付けなくても良い(で、たぶん普通はつけない)  昔、プロトタイプ宣言にexternをつけていたプログラムがあったので、一時期付けていた記憶があります。  話はちょっと脱線しますが、http://okuyama.mt.tama.hosei.ac.jp/unix/C/slide82-1.htmlにある解説、表はちょっと分かりずらいと思うのですが…。  例えば、別のモジュールで定義宣言されている関数を、他のモジュールの関数ブロック内でextern void f (void)とすると(普通はこんなことしませんが)、その関数ブロック内だけでその関数への参照が可能だと思っていたのですが、それより下の関数定義ブロック内でも参照可能となっていました(VC++ 6.0で確認)。  変数の場合であれば、その関数ブロック内のみ有効な筈ですが…。  うーん、ややっこしい。  ちょっと長くなりそうなので、この辺でやめておきます。  これからもちょくちょく寄らせて頂きますので、宜しくお願い致します。
[この投稿を含むスレッドを表示] [この投稿を削除]
[194] Re:C言語ポインタ完全制覇についての質問
投稿者:(ぱ)
2007/02/20 02:13:25

> 初めまして、九龍と申します。 > C言語でのプログラム経験は結構長いのですが、ある事が分からなかったので、 > C言語ポインタ完全制覇に購入させて頂きました。 はじめまして。お買い上げいただきありがとうございます。 > それで、現在読んでいる真っ最中なのですが、p303ページに記載されている >「fは勝手にdoubleに読み替えられているので,当然正しく渡らないことになります.」 > の意味が分かりません。 > 上記は、仮引数float fは、double fと読み替えられているため、fのポインタを >渡しても、void sub_func 関数では、floatへのポインタで間接参照されるため、 >正常に参照されないということでよろしいのでしょうか? そうです…と答えると一言で終わってしまうわけですが、何か疑問があるので 質問されたのだと思います。そこをもう少し明確にしていただけると、何か回答 できるかもしれません。 たとえばfloat 4バイト、double 8バイトの処理系を仮定したとして、fは実は doubleなので 8バイトです。その領域をfloat *で読めるはずはないわけです。 > 後、もし宜しければexternとリンケージに関する事も教えて頂ければと思います。 > p80の脚注にも出てきているので、ちょっとインターネットで調べてみたのですが >(http://okuyama.mt.tama.hosei.ac.jp/unix/C/slide82-1.html)、見た瞬間に >定義宣言と参照宣言、関数プロトタイプ宣言がごっちゃになりました。 そのページにあるように、外部結合とは、 | プログラムが複数のソースファイルから構成される場合,それらすべての | ソースファイルにおいて同一のオブジェクト,或いは関数として参照。 ですよね? それに対し内部結合はそのソースファイルの中だけで有効なリンケージです。 関数や変数を内部結合にするためにはstaticを付けますが、 外部結合の場合、定義では何もつけず、宣言ではexternを付ける…と決まっていれば 説明が楽なのですが、実際には、 ・どこかで定義されている変数を参照する場合、externを付けなくても、たいていの  処理系では何のエラーにもならない(p.317を参照) ・どこかで定義されている関数を使う場合、プロトタイプ宣言を行うが、  これにはexternをつけても付けなくても良い(で、たぶん普通はつけない) ということで、説明がややこしくなっています。 > (なにせ今まで、どこかで定義宣言をしている変数を参照する場合には、 > externを付ければ良いぐらいにしか思ってなかったんで。) この認識で正しいと思います。
[この投稿を含むスレッドを表示] [この投稿を削除]
[193] C言語ポインタ完全制覇についての質問
投稿者:九龍
2007/02/20 02:13:25

 初めまして、九龍と申します。  C言語でのプログラム経験は結構長いのですが、ある事が分からなかったので、C言語ポインタ完全制覇に購入させて頂きました。  それで、現在読んでいる真っ最中なのですが、p303ページに記載されている「fは勝手にdoubleに読み替えられているので,当然正しく渡らないことになります.」の意味が分かりません。  上記は、仮引数float fは、double fと読み替えられているため、fのポインタを渡しても、void sub_func 関数では、floatへのポインタで間接参照されるため、正常に参照されないということでよろしいのでしょうか?  一生懸命意味を理解しているつもりですか、拙い理解能力で申し訳ありません。  後、もし宜しければexternとリンケージに関する事も教えて頂ければと思います。  p80の脚注にも出てきているので、ちょっとインターネットで調べてみたのですが(http://okuyama.mt.tama.hosei.ac.jp/unix/C/slide82-1.html)、見た瞬間に定義宣言と参照宣言、関数プロトタイプ宣言がごっちゃになりました。  (なにせ今まで、どこかで定義宣言をしている変数を参照する場合には、externを付ければ良いぐらいにしか思ってなかったんで。)  宜しくお願い致します。
[この投稿を含むスレッドを表示] [この投稿を削除]
[192] Re:ありがとうございます
投稿者:(ぱ)
2007/02/20 02:13:25

本筋と関係ないですが。 >(ぱ)さん、kit2004さん本当にありがとです。 kitさんはkitさんであってkit2004さんではないわけですが、 神奈川さんが「kit2004」さんだと思ってしまったのは、スレッド表示のとき ハンドル名と日付の間に空白が空いてなかったからだと思います。 これは掲示板の仕様の問題で、要するに私が悪いので、先ほど修正しました。 数日前から気になってはいたのですが、対応が遅くなりましてすみません。
[この投稿を含むスレッドを表示] [この投稿を削除]
[191] ありがとうございます
投稿者:神奈川
2007/02/20 02:13:25

件名を変更しました。 (ぱ)さん、kit2004さん本当にありがとです。 根本的なところから、やり直す必要が多々あるかもしれません。 プログラムを始めてから、はや2週間ぐらいになります。 ここまで成長(といってもまだまだですが)したのも、ひとえに皆さん のお陰だと思っています。 解らない事もたくさんあり、丁寧に教えてくださったり、サイトを教えてくださったり 本当に感謝しています。 プログラム以外の基本的なこと(ぱ)さんが指摘してくださった。質問のしかたなど も勉強になりました。 こんな基本的なことも知らずに皆さんに接していた事は、失礼な事だと承知しました。 皆さんに聞くにしても、ちゃんとしたルールを守る必要があると強く思いました。 私としては、本や参考書などまず自分で調べてみて、解らなかった事は、人に聞くという プロセスを実行しています。そこで安易に「解らなかったから教えてください」という 感じになっていました。もしかしたら皆さんに不快な思いをさせてしまったかもしれません。 もしそうでしたら、申し訳ないです。 もう一つ自分を成長させるためにも、頑張ってみます。そして本当に解らなかった時、 具体的な説明を踏まえ解らない所を説明をします。 また逆に私が皆さんのお役に立てるように皆さんのお話を継承しこの掲示板を利用していきたいと思います。
[この投稿を含むスレッドを表示] [この投稿を削除]
[190] Re:XMLについて
投稿者:kit
2007/02/20 02:13:25

> こういう場合は、似たようなことを > している他人のプログラムを読んで理解し、真似を > することから始めるのがいいんじゃないでしょうか。 書き忘れましたが、読むプログラムは一つではなく、 多いほうが良いです。勉強ってどういう分野でも そうなんですけど、沢山読んでいるうちに、だんだん どうすれば良いのか分かるようになってきます。
[この投稿を含むスレッドを表示] [この投稿を削除]
[189] Re:XMLについて
投稿者:kit
2007/02/20 02:13:25

ちょっと気になるのは、神奈川さんがどういう立場で プログラミングをされているかですね。 自力でプログラミングができるようになることが目的で あれば、分からない問題を安易にBBSで聞いて解決する のは考えものです。むしろ、ひとに全く聞かなくても 自分で解けるようになるにはどうすれば良いのかを 考えた方がいいと思います。 最初のうちは、自分で解こうにもどうすればいいのか 見当もつかないことも多いわけですし、神奈川さんの 質問自体、まさにそういう状態にあると思われる質問 なわけですが、こういう場合は、似たようなことを している他人のプログラムを読んで理解し、真似を することから始めるのがいいんじゃないでしょうか。 似たようなプログラムはあるけどどう変えたらいいのか 分からないような場合、それは結局、そのプログラムが どういう動作をしているかちゃんと理解できてないという ことを意味しますから、理解できるようになるまで、 変数の内容表示を行う文を挿入したり、デバッガによる トレースなどを行いながら、他人のプログラムを繰り返し 読むというのが、遠回りに見えて実は近道になると思います。 神奈川さんの質問を見ていると、そもそも他人の書いた プログラムを細部までちゃんと理解して読んだ経験が 少なそうに見える点、そしてもっと大きな問題として、 自分で書くプログラムについても、どう動作するのか、 ちゃんと理解してないように見える点が気になります。 このあたりの問題をきちんと解決しておかないと、当面の 問題は解決できても、いつまでたっても一人だちできない ということになりかねません。 あと、これは基本中の基本なので、わざわざ指摘するのも 何か変な気もするのですが、インデントも変ですよ。 使い捨てのテストプログラムならともかく、人に見て もらう場合、インデントを正しくつけるのは、最低限必要な ことだと思います。
[この投稿を含むスレッドを表示] [この投稿を削除]
[188] Re:XMLについて
投稿者:(ぱ)
2007/02/20 02:13:25

>ここで問題なのは、属性を作成するとエラーが発生してしまうということです。 このプログラムを自分のところでコンパイルして動かすほど私は親切ではないので、 エラーが出たというのなら、どんなエラーが出たかぐらいは書いてください。 もちろん、エラーメッセージを直接コピペする形で。 掲示板やMLに質問する際の質問のしかたについては、以下のページが参考になります。 JavaHouse Topics。この中の「質問のしかたについて」 http://java-house.jp/ml/topics/ 技術系メーリングリストで質問するときのパターン・ランゲージ http://www.hyuki.com/writing/techask.html 真 技術系メーリングリストFAQ http://www.geocities.co.jp/SiliconValley/5656/
[この投稿を含むスレッドを表示] [この投稿を削除]
[187] XMLについて
投稿者:神奈川
2007/02/20 02:13:25

件名を変更しました。 またXMLで解らない事が出てきてしまいました・・・ 問題例を以下に記述します。 ---あ.xml---- <愛 id=1>   <b>     <c>     </c>   </b>     <愛 ID=2>     </愛> </愛> ------------ 特定のタグの属性の下に -- <k>  <愛 ID=7>あああ</愛>   </k> を記述しそのタグ<愛>に属性を与えるというプログラムです。 ☆例えば、あ.xmlの<愛 ID=2>の下に <k>  <愛 ID=7>あああ</愛>   </k> を加えたりするなどです。 ここで問題なのは、属性を作成するとエラーが発生してしまうということです。 以下に自作したプログラムを記述します。 static void selectionAppend() throws Exception { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); Document doc = db.parse(new FileInputStream("あ.xml")); NodeList list = doc.getElementsByTagName("愛"); for (int i = 0; i < list.getLength(); i++) { Element node = (Element)list.item(i); if (!(node instanceof Element)) continue; String value = ((Element)node).getAttribute("ID"); //ここで対象属性名を指定し if (value != null && value.equals("2")) { //ここで対象属性値を指定する Node child1 = doc.createElement("k"); Node child2 = doc.createElement("愛"); //↑ここのタグに属性を追加したい、setAttribute("ID", "7");このメソッドを代入する //のでしょうがどのように代入すればよろしいでしょうか。 Node child3 = doc.createTextNode("あああ"); child2.appendChild(child3); child1.appendChild(child2); node.appendChild(child1); //↑ここでツリー構成は完了していることになるのでしょうか?できたとしたら、 //NodeList know = node.getElementsByTagName("愛"); //Element knowe = (Element)know.item(0); //knowe.setAttribute("No", "8"); //こうするのでしょうが、 //解らなくなってしまったので、また質問しにきました。宜しくお願いします。 } } FileOutputStream out = new FileOutputStream("あ2.xml"); DOMSource src = new DOMSource(doc.getDocumentElement()); StreamResult dst = new StreamResult(out); Transformer tfm = TransformerFactory.newInstance().newTransformer(); tfm.transform(src, dst); out.close(); }
[この投稿を含むスレッドを表示] [この投稿を削除]
[186] Re:どうしても,整理できません.
投稿者:student
2007/02/20 02:13:25

※この投稿は、現在の裏掲示板に投稿されたものを前橋が転載したものです。 丁寧な,ご返答ありがとうございます.大変,参考になりました.大分,整理がついてきました. 心から,感謝します. 今後も,疑問が沸いてくると思いますが,どうしても,手に負えない場合には,相談させて頂きます.お時間が,ありましたら返答して頂けたら幸いです. > よろしければ、studentさんの最初の投稿から、全て表の掲示板に移行しようと > 思うのですが、よろしいでしょうか? 是非,移行してください.
[この投稿を含むスレッドを表示] [この投稿を削除]
[185] Re:どうしても,整理できません.
投稿者:(ぱ)
2007/02/20 02:13:25

※この投稿は、現在の裏掲示板に投稿されたものを前橋が転載したものです。 > オブジェクト指向再入門を読ませて頂きました.大変,勉強になりました. ありがとうございます。 > こんな,私が,今,一番悩んでいることは,まさに,関数による再利用性との違いです. そのあたりのことについては、 「オブジェクトに仕事をさせる、ということ」 http://kmaebashi.com/programmer/object/shigoto.html に書いたつもりです。 まとめると、関数による再利用では、関数の呼び出しをまたがって何らかのデータを 保持することができない、ということです。無理に保持しようとすると、 例に出したstrtok()のような困った仕様になってしまいます。 これで回答になっていますでしょうか? ところでお願いですが、 現在、当サイトの掲示板は以下のURLに移転しています。 http://kmaebashi.com/bbs/list.php?boardid=kmaebashibbs ここは裏掲示板でして、ザンボットがどうのZガンダムがどうのといった話ばかり しているのはそのためです。 「オブジェクト指向再入門」のページのリンクが古いままになっていました。すみません。 よろしければ、studentさんの最初の投稿から、全て表の掲示板に移行しようと 思うのですが、よろしいでしょうか? よろしいようでしたら、投稿内容をこちらで貼り直します。
[この投稿を含むスレッドを表示] [この投稿を削除]
[184] どうしても,整理できません.
投稿者:student
2007/02/20 02:13:25

※この投稿は、現在の裏掲示板に投稿されたものを前橋が転載したものです。 オブジェクト指向再入門を読ませて頂きました.大変,勉強になりました. 私は,オブジェクト指向プログラミングを初めて,2ヶ月の初心者であります. こんな,私が,今,一番悩んでいることは,まさに,関数による再利用性との違いです. ここが,どうも,頭の中で整理出来ていません. どうか,教えてください.お願いします.
[この投稿を含むスレッドを表示] [この投稿を削除]
[183] Re:ファイルについて
投稿者:神奈川
2007/02/20 02:13:25

>>しかしLinkedHashsetやSetなどのシンボルが解決できないとというエラーが >>起こってしまいました。 > >LinkedHashSetやSetはjava.utilパッケージにありますから、 >importしなければそうなって当たり前です。 すみません(TOT) ioのパッケージに含まれいるものだと思っていました。 変な勘違いをしていました。何してんだ私・・・ とりあえず解決は、しました。よくよく考えれば当たり前なのに・・
[この投稿を含むスレッドを表示] [この投稿を削除]
[182] Re:ファイルについて
投稿者:(ぱ)
2007/02/20 02:13:25

>しかしLinkedHashsetやSetなどのシンボルが解決できないとというエラーが >起こってしまいました。 LinkedHashSetやSetはjava.utilパッケージにありますから、 importしなければそうなって当たり前です。 SAXなどのパッケージはimportしているわけですから、神奈川さんがimportの 何たるかを知らないとは考えにくいのですが、それでなぜ、java.utilの importを忘れるのかが不思議です。書き忘れるのは別に不思議じゃないですが、 このエラーメッセージを見れば一目瞭然です。 もしかして神奈川さんが、importの何たるかがわかっていなくて、 ネットに落ちてるコードとかを拾い集めてここまでプログラムを書いたのだとすれば、 それはそれでたいしたものではありますが、やっぱり勉強の順番がおかしいように 私には思えます。 >また最後の値{"け","ちち","た"}を配列に格納したいのですが 配列に格納したいのなら、すればよいのでは?
[この投稿を含むスレッドを表示] [この投稿を削除]
[181] Re:ファイルについて
投稿者:神奈川
2007/02/20 02:13:25

>>今度は、txtファイルの読み込みと書き込みについて質問なんですが、 > >APIリファレンスを見ると、InputStreamReaderにはmarkとresetという >メソッドがありますが、markSupportedはfalseのようなので使えませんね。 > >よって、対象とするファイルがよっぽど巨大なのでなければ、 >「最初にいったん全部読み込んでメモリに載せ、いったんclose()し、 > 処理が全部すんだらまとめて書き出す」 >という方法で良いんじゃないでしょうか。 返信送れてしみません。。確かにこの方法しかないようですね。。 これでやってみます。 新たな質問です。 文字列が String[] a={"あい","うえ","お","かか","きき","こ"} String[] b={"あい","け","お","こ","ちち","た"} と二つあるとき,bに対してaの文字列を引いた文字列 だけを取得するためのサンプルプログラム作成しようと思っているのですが この場合は、結果的に{"け","ちち","た"}のみになります。 以下にプログラムを書きました。 しかしLinkedHashsetやSetなどのシンボルが解決できないとというエラーが 起こってしまいました。 もしよろしければ正しく直していただけるとうれしいのですが、 また最後の値{"け","ちち","た"}を配列に格納したいのですが それも含めて宜しくお願いします。 import javax.xml.parsers.*; import org.xml.sax.*; import org.xml.sax.helpers.*; import java.io.*; public class www extends DefaultHandler { public static void main(String[] args) { String[] a = {"あい","うえ","お","かか","きき","こ"} ; String[] b = {"あい","け","お","こ","ちち","た"} ; Set setA = new LinkedHashSet(Arrays.asList(a)); Set setB = new LinkedHashSet(Arrays.asList(b)); setB.removeAll(setA); Iterator it = setB.iterator(); while (it.hasNext()) { System.out.println(it.next()); } }
[この投稿を含むスレッドを表示] [この投稿を削除]
[180] Re:センス・オブ・プログラミングの間違い?
投稿者:(ぱ)
2007/02/20 02:13:25

>はじめまして。 はじめまして。ご指摘ありがとうございます。 >// カーソルの位置の直後の文字を削除 >void backSpace(); > >ですけど >「直後」じゃなくて「直前」ではないでしょうか? おっしゃる通りです。なにしろbackSpace()ですから、カーソルの前の文字が 消えるのが当然です。 ご迷惑をおかけして申し訳ありません。 正誤表に加えておきました。ご指摘ありがとうございました。
[この投稿を含むスレッドを表示] [この投稿を削除]
[179] センス・オブ・プログラミングの間違い?
投稿者:いくら
2007/02/20 02:13:25

はじめまして。 センス・オブ・プログラミング読ませていただいて気になったのですが、 P.278の真ん中あたりの // カーソルの位置の直後の文字を削除 void backSpace(); ですけど 「直後」じゃなくて「直前」ではないでしょうか? サンプルコード試すと直前の文字が消えますし。
[この投稿を含むスレッドを表示] [この投稿を削除]
[178] Re:[業務連絡]サーバの障害について
投稿者:iWA
2007/02/20 02:13:25

>私の記憶では、iWAさんの投稿があったと思うのですが、消えてしまっているのは >そのためです。 ○| ̄|_ >他にも投稿していた方がいらっしゃいましたら、よろしければ再度投稿を >お願いいたします。 さすがにもう一度書けるほど、書いたことを憶えてないです……(^^;
[この投稿を含むスレッドを表示] [この投稿を削除]
[177] [業務連絡]サーバの障害について
投稿者:(ぱ)
2007/02/20 02:13:25

裏掲示板の方には一応アナウンスしましたが、昨晩の19:30頃より、kmaebashi.comが 置いてあるサーバが停止していました。原因はハードディスク障害だそうです。 本日14:00過ぎあたりに復旧したのですが、その際、 「7日の午前1時前後のバックアップデータ」からデータを復元したため、 この掲示板の投稿も、一部消えてしまいました。 私の記憶では、iWAさんの投稿があったと思うのですが、消えてしまっているのは そのためです。 他にも投稿していた方がいらっしゃいましたら、よろしければ再度投稿を お願いいたします。 サーバ障害に関する詳細は雑記帳にでも書きます。
[この投稿を含むスレッドを表示] [この投稿を削除]
[176] Re:ファイルについて
投稿者:(ぱ)
2007/02/20 02:13:25

>今度は、txtファイルの読み込みと書き込みについて質問なんですが、 APIリファレンスを見ると、InputStreamReaderにはmarkとresetという メソッドがありますが、markSupportedはfalseのようなので使えませんね。 よって、対象とするファイルがよっぽど巨大なのでなければ、 「最初にいったん全部読み込んでメモリに載せ、いったんclose()し、  処理が全部すんだらまとめて書き出す」 という方法で良いんじゃないでしょうか。
[この投稿を含むスレッドを表示] [この投稿を削除]
[175] ファイルについて
投稿者:神奈川
2007/02/20 02:13:25

>「飲み会以外では飲まない」という軟弱な断酒中ですが、木曜の晩は飲み会で、 >日付が変わる頃帰宅して風呂に入って、朝の5:00頃目がさめました。風呂の中で。 >というわけで昨晩も帰宅後即寝てしまったので返事が遅れましてすみません。 いえいえ,こちらこそお世話になっているので、ありがとうございます。解決できました。 ふぃよかったです。 件名を変更しました。 今度は、txtファイルの読み込みと書き込みについて質問なんですが、 一つ目の質問です。 ******aaa.txt****** ねこ こねこ いぬ 哺乳類 爬虫類 とかげ ******************* この場合4行目のみ読み取るためにはどうすればよいのでしょうか? ちなみに //文字ストリーム作成 br=new BufferedReader ( new InputStreamReader ( new FileInputStream( "aaa.txt" ), "SJIS" ) ); //読み込み、ついでにreadLine()は、1行ずつ見る。1回目とおれば、1行目2回通れば2行目 String AAA=br.readLine() String BBB=br.readLine() この場合、AAAは、1行目の「ねこ」がはいります。 BBBには、2行目の「こねこ」がはいります。 4回ループを起してから抽出する事は可能ですが、 最初2行目 次4行目 次1行目 を読み取るとなると、readLine()は、よくわからないけど1行目ずつ格納してしまうので 4行目の次に1行目を見るというのは、どうも難しいような気がwします。 何か、行数を指定してその行を読み取るメソッドは、あるでしょうか? 無い場合は、行数を初期化(1行目から)すればいいんでしょうが、どうすればいいのかわかりません・・ 二つ目の質問です。 やりたいことは、書き込みと読み込みを同じファイルから行いたいことです。 それを踏まえた上で、 例えばaaa.txtにたいして最初に1:ネコという書き込みがされ 1ステップ(書き込み)    ******aaa.txt******    1:ねこ    ******************* 2ステップ(1行目読み込み) 3ステップ(書き込み)    ******aaa.txt******    1:ねこ    1-1:こねこ    1-2:いぬ    ******************* 4ステップ(2行目読み込み) 5ステップ(書き込み)    ******aaa.txt******    1:ねこ    1-1:こねこ    1-2:いぬ    1-1-2:哺乳類    1-1-3:爬虫類    1-1-4:とかげ    ******************* 6ステップ(3行目読み込み) 7ステップ(書き込み内容なし) と繰り返し 最後(読み込んだ文字列=null)になって終了 というふうにしたいのです。 書き込んでいる最中に読み込めるのでしょうか? この場合、読み込みの後に別の処理があるのですが、これについては できていて、文字列が入力されると0~複数の文字列が出力される。という感じです。
[この投稿を含むスレッドを表示] [この投稿を削除]
[174] Re:本を買いました
投稿者:(ぱ)
2007/02/20 02:13:25

うわ、こりゃまた思わぬ方から。 ごぶさたしております。 お買い上げいただきありがとうございました。 昨晩の飲み会は行きたかったのですが、[169]で書いたようにその日はちゃんと 寝てなかったので、帰宅してしまいました。 サイン、というか名前を書くぐらいいくらでもしますので、次の機会(どうせ 頻繁にあるでしょう)でお会いしましょう。
[この投稿を含むスレッドを表示] [この投稿を削除]
[173] 本を買いました
投稿者:PZH
2007/02/20 02:13:25

 前橋さん、プログラミングの本は私には難しいのですが、最近だされた本は私でも読めそうでしたので買いました。 今度お会いする機会があった時、著書にサインしてください。
[この投稿を含むスレッドを表示] [この投稿を削除]
[172] Re:データ構造の重要性
投稿者:隠れファン
2007/02/20 02:13:25

>こう考えると、このケースでも多重継承は不要ですねえ。 よく考えてみたら前橋さんのおっしゃる通りでした...。 さすがです。 >Perlは詳しくないですが、PerlからCを呼ぶことぐらいはできるはずなので、 >ラクダ本第2版を今見てみました。perlxstutというキーワードが出てきたので >Googleして見つかったのがこちらです。 > >http://www.kt.rim.or.jp/~kbk/perl5.005/perlxstut.html ありがとうございます。参考になります。 買って読んでいない本がだいぶたまってきたので、 また色々勉強して、その内投稿するかもしれません。 ありがとうございました。 「オブジェクト指向開発講座」を超える本を期待しています。
[この投稿を含むスレッドを表示] [この投稿を削除]
[171] Re:センス・オブ・プログラミング読ませていただきました。
投稿者:(ぱ)
2007/02/20 02:13:25

>はじめまして、前橋さん。 はじめまして。 >『センス・オブ・プログラミング』を読ませていただきました。 >初心者の私にとって、とても示唆に富む面白い本でした。 ありがとうございます。大変励みになりますです (_o_) …が、これ以上何を書いてよいかわからないので、大変嬉しいのですが こういう投稿への返答には困るのでした。f(^^;;
[この投稿を含むスレッドを表示] [この投稿を削除]
[170] Re:データ構造の重要性
投稿者:(ぱ)
2007/02/20 02:13:25

>1)インターフェース継承による多重継承によりWINDOWを表す方法 >2)集約によりWINDOWをもつ方法 >の2つでは、若干違いがあると思います。 >クラスのクライアント側から見た場合、2)の場合、あくまでも外面は >TREE_NODEであり、WINDOWではない訳です。 ちょっと今まで出た案を整理しますね。 案1)多重継承。WINDOWがSCREEN_OBJECTとTREE_NODEを多重継承する。 案2)インタフェースと委譲を使う。WINDOWはSCREEN_OBJECTを継承し、  TREE_NODEインタフェースを実装する。  TREE_NODEの実装はTREE_NODE_IMPLクラスにあって、WINDOWは  TREE_NODE_IMPLへの参照を保持し、add_child()などのメソッドを  そっちに委譲する。 案3)コレクションクラスTREEを作り、そのTREE_NODEがWINDOWへの  参照を保持するようにする。 案3)は、私がうっかりこれでいいかと思っちゃった案ですが、WINDOWの場合は ダメです。たとえばWINDOWのrepaint()メソッドが呼び出されたとき、 WINDOWは自分の子を再帰的にrepaint()しなければなりません。 つまり、「外から見て木構造に見える」のではダメで、 WINDOW自身が自分の子を知っていないといけないわけで、 TREE_NODEからWINDOWに参照を持つような構造では困ります。 案2)ですが、この方法で、外から見れば多重継承と実質同じことができますが、 考えてみれば、外から見て、WINDOWがTREE_NODEに見えて嬉しいことは なさそうなので、わざわざinterfaceを使う必要はなさそうです。 つまり委譲だけでよいと。で、何に委譲するかですが、TREE_NODE_IMPLなんぞ 作らなくても、ArrayListで良いような… こう考えると、このケースでも多重継承は不要ですねえ。 >ところで、知っていたら教えてほしいのですが、PerlとCのリンク方法で >詳しいページとか書籍とかあったら教えてほしいです。 >つまりCのメモリ上にPerlで処理したデータを取得したいのです >(外部ファイルとか、ソケットなどを使わずに)。 Perlは詳しくないですが、PerlからCを呼ぶことぐらいはできるはずなので、 ラクダ本第2版を今見てみました。perlxstutというキーワードが出てきたので Googleして見つかったのがこちらです。 http://www.kt.rim.or.jp/~kbk/perl5.005/perlxstut.html
[この投稿を含むスレッドを表示] [この投稿を削除]
[169] Re:配列で問題が・・
投稿者:(ぱ)
2007/02/20 02:13:25

「飲み会以外では飲まない」という軟弱な断酒中ですが、木曜の晩は飲み会で、 日付が変わる頃帰宅して風呂に入って、朝の5:00頃目がさめました。風呂の中で。 というわけで昨晩も帰宅後即寝てしまったので返事が遅れましてすみません。 # ていうか他のどなたかが答えてくれてもいいような… >ここでは、真となるファイル名のみをtopfnameの配列に格納したいのですが >配列の長さも真となるファイルの個数になるようにしたい。 >現在の状態だと、topfnameのサイズを「10」と定義しているので、これをなんとか >真となるファイルの個数をサイズにしたいのですが、どのようにすればよいでしょうか? Javaの配列は拡張できないので、java.util.ArrayListクラスあたりを 使えばよいでしょう。 で、最終的に配列が欲しければ、 String[] s = (String[])arrayList.toArray(new String[0]); で変換します。 このへんのことは「Java謎+落とし穴徹底解明」のp.329あたりに書いてあります。
[この投稿を含むスレッドを表示] [この投稿を削除]
[168] センス・オブ・プログラミング読ませていただきました。
投稿者:shun
2007/02/20 02:13:25

はじめまして、前橋さん。 『センス・オブ・プログラミング』を読ませていただきました。 初心者の私にとって、とても示唆に富む面白い本でした。 これからもがんばってください。 では。
[この投稿を含むスレッドを表示] [この投稿を削除]
[167] 配列で問題が・・
投稿者:神奈川
2007/02/20 02:13:25

ツリーがあまりに長くなってしまったので新しく投稿させていただきました。 現在,配列の格納の仕方で迷っています。 下にプログラムを表記します。 import javax.xml.parsers.*; import org.xml.sax.*; import org.xml.sax.helpers.*; import java.io.*; public class Q extends DefaultHandler { public static void main(String[] argv) { BufferedReader br = null; String fname; int l=0; int k=0; String[] topfname=new String[10]; //キーワードとなる文字列 String[] r={"空"}; try { br = new BufferedReader ( new InputStreamReader ( new FileInputStream( "fname1.txt" ), "SJIS" ) ); //ここでfname1.txtに表記されているファイル名を順番(1行ずつ)に抽出 while( ( fname = br.readLine() )! = null) {              //XML検索で抽出プログラムを呼び出し KnowledgeExtract myKnowledgeExtract=new KnowledgeExtract();              //ファイル名とキーワードを送り,戻り値として真偽を取得 boolean xxx=myKnowledgeExtract.Ext(fname,r) ; System.out.println(xxx+" "+"top:"+fname); //ここが問題点・・       if(xxx){topfname[l]=fname;l++;}else{} } } catch( Exception ex ) { ex.printStackTrace(); } //truuになったファイル名を表示 for (int i=0; i < topfname.length ; i++) System.out.println("topfname:"+topfname[i]); } ここでは、真となるファイル名のみをtopfnameの配列に格納したいのですが 配列の長さも真となるファイルの個数になるようにしたい。 現在の状態だと、topfnameのサイズを「10」と定義しているので、これをなんとか 真となるファイルの個数をサイズにしたいのですが、どのようにすればよいでしょうか?
[この投稿を含むスレッドを表示] [この投稿を削除]
[166] Re:データ構造の重要性
投稿者:隠れファン
2007/02/20 02:13:25

>MAYERさんのはこっちですね。品切れ、中古もなしですねえ… 手に入らないとなると余計にほしくなります。 いろいろと探してみます...。 >>>一瞬納得しそうになりますが、TREE_NODEが、その要素への参照を持てば >>>済む話ですよね。EiffelにはGenericsがあるわけですし。 > >>委譲が面倒でなければ前橋さんのやり方の方が柔軟性ありそうですね。 > >うむむ。私が書いたやり方は、実は普通にコレクションクラスライブラリに >オブジェクトを突っ込む方の意味のつもりでしたが、WINDOWは本質的に >親子関係を持つわけですからadd_child()とかはWINDOW側に付くべきですよね。 ># ていうかWINDOW自身が自分の子を知らないと困るわけで… ># 今回いろいろぼけてました。 > >てなわけでinterfaceにして委譲することになるわけですが、 >面倒だという意見もあるでしょう。 コレクションライブラリにオブジェクトを突っ込むということで Genericsがあるという意味がやっと分かりました。 しかし自分で書いておいて後からよく考えてみると、 1)インターフェース継承による多重継承によりWINDOWを表す方法 2)集約によりWINDOWをもつ方法 の2つでは、若干違いがあると思います。 クラスのクライアント側から見た場合、2)の場合、あくまでも外面は TREE_NODEであり、WINDOWではない訳です。 クライアントクラスに渡す場合、WINDOWとして処理したい場合でも クライアントは、TREE_NODEとして受け取らなくてはならないからです。 TREE_NODEからGetterでWINDOWを取り出し、渡すという方法もありますが、 あまり気楽に渡したのでは参照を保持する意味がありません。 1)と2)は機能的には同じですが、外面という意味では違いそうです。 恐らく一般的に、実装継承と比較すると集約の方が柔軟性あるということですね。 前橋さんのコレクションクラスを利用する方法は一番シンプルだと 思いますが、前橋さん自身がおっしゃってるように、真面目に考えると 本来WINDOWクラス自身に持たせたい機能を他で持つのはあまり 好ましくないかもしれません。 >>テストケースを書く前に決まっているとすると、結局は初めにUMLありき >>なので、テストケース自体単なる動作チェックもしくは、 >>後でリファクタリングをするのだけが目的ということになり、 >>あまりおいしくはなさそうです。 > >うーん、UMLで言えば、クラス図よりは後だけどシーケンス図よりは前というか。 >また、いつでも気楽に自動テストができるなら、それだけでもおいしいと思います。 確かにそうかもしれません。使い方次第ですかね? ところで、知っていたら教えてほしいのですが、PerlとCのリンク方法で 詳しいページとか書籍とかあったら教えてほしいです。 つまりCのメモリ上にPerlで処理したデータを取得したいのです (外部ファイルとか、ソケットなどを使わずに)。 前橋さんに聞くのはどうかとも思いましたが、特にCのプログラミングのことなら 知らないことないというイメージだったので...。 もし知っていたらで結構です。
[この投稿を含むスレッドを表示] [この投稿を削除]
[165] Re:XMLファイルを検索
投稿者:神奈川
2007/02/20 02:13:25

ありがとうございます。。できました。また基本的な質問だったかもしれません 11月27日に投稿してから5日たちました。 最初は、javaなんて聞いた事がある程度だったんですが、 ここまでプログラムを完成できるように指導してくださって有難うございます。 以前(ぱ)さんがお話していた。 引数をキーワード及びファイル名にして 戻り値の型をbooleanにして真偽を返す事に成功しました。
[この投稿を含むスレッドを表示] [この投稿を削除]
[164] Re:XMLファイルを検索
投稿者:(ぱ)
2007/02/20 02:13:25

>この場合return文のsyutokusuとkeyが認識せず、 >どのようにすればsyutokusuとkeyを認識し返せるのでしょうか? 変数のスコープ(見える範囲)は、その宣言を囲む最小のブロック({}で囲まれた範囲)で 終わってしまうので、syutokusuとkeyの宣言をtryのブロックの外に出せばよいです。
[この投稿を含むスレッドを表示] [この投稿を削除]
[163] Re:データ構造の重要性
投稿者:(ぱ)
2007/02/20 02:13:25

>私が間違っているのかもしれませんが、恐らく同一な書名なのですが、 >バートランド・マイヤーさんのではありません。 うわわ、すみません、うっかりしてました。 MAYERさんのはこっちですね。品切れ、中古もなしですねえ… http://www.amazon.co.jp/exec/obidos/ASIN/4756100503/qid=1101915980/sr=1-38/ref=sr_1_2_38/249-6600035-2383509 >>一瞬納得しそうになりますが、TREE_NODEが、その要素への参照を持てば >>済む話ですよね。EiffelにはGenericsがあるわけですし。 >委譲が面倒でなければ前橋さんのやり方の方が柔軟性ありそうですね。 うむむ。私が書いたやり方は、実は普通にコレクションクラスライブラリに オブジェクトを突っ込む方の意味のつもりでしたが、WINDOWは本質的に 親子関係を持つわけですからadd_child()とかはWINDOW側に付くべきですよね。 # ていうかWINDOW自身が自分の子を知らないと困るわけで… # 今回いろいろぼけてました。 てなわけでinterfaceにして委譲することになるわけですが、 面倒だという意見もあるでしょう。 >テストケースを書く前に決まっているとすると、結局は初めにUMLありき >なので、テストケース自体単なる動作チェックもしくは、 >後でリファクタリングをするのだけが目的ということになり、 >あまりおいしくはなさそうです。 うーん、UMLで言えば、クラス図よりは後だけどシーケンス図よりは前というか。 また、いつでも気楽に自動テストができるなら、それだけでもおいしいと思います。
[この投稿を含むスレッドを表示] [この投稿を削除]
[162] Re:XMLファイルを検索
投稿者:神奈川
2007/02/20 02:13:25

>同じ要領でelementlistからelementのElementを取り出して、そこからさらに >getElementsByTagName()を呼び出せば、elementの子のpretestを取り出すことが >できるでしょう。 (ぱ)さん!!!やりました!!何とか動きました~(^o^)v 有難うございます。keyさんも有難うございます。 後は、戻り値として真偽をbooleanに返すだけだす。。 しかしちょっとここで問題が起こりましたです。。 例えば下に自作で創った簡単なサンプルプログラムを記述します。 class T {    public boolean tyu(int h) {      try {         int syutokusu,key;         syutokusu=2;         key=h;         System.out.println(syutokusu);        }      catch (Exception e)         {         e.printStackTrace();         }      return (syutokusu==key);                  }      } この場合return文のsyutokusuとkeyが認識せず、 どのようにすればsyutokusuとkeyを認識し返せるのでしょうか? try文の内部で処理した(定義した方や変数は使えないのかな??) なんかまた間違えてるのかな?
[この投稿を含むスレッドを表示] [この投稿を削除]
[161] Re:データ構造の重要性
投稿者:隠れファン
2007/02/20 02:13:25

>うわ、絶版でしたか。知りませんでした。 > ># amazonで中古品が買えるようではありますが。 >http://www.amazon.co.jp/exec/obidos/tg/detail/offer-listing/-/4274075400/all/ref=sdp_srli_u/249-6600035-2383509 ご紹介ありがとうございます。ページ拝見しました。 私が間違っているのかもしれませんが、恐らく同一な書名なのですが、 バートランド・マイヤーさんのではありません。 上記の本は、日本人が書いた本だと思います。 中古品とかで色々探してみます...。 >インタフェースの多重継承はよく使いますよね。 Javaのイメージで話してたので勘違いしていました。 私が言いたかったのは実装継承による多重継承のことでした。 確かにインターフェースの多重継承は必要ですね。 >継承関係は、スーパークラスの分類とも言えますから、複数の軸について >分類したければ多重継承になる…という考え方もありますが、 >それをやるとクラスの数が掛け算で増えていくので実用的ではないと私は思います。 なるほど...。難しいですね。 >「オブジェクト指向入門」では、階層構造を持てるWINDOWが、 >SCREEN_OBJECTとTREEを多重継承するという例が出ています(このTREEは、 >TREE_NODEと呼ぶべきだと思う)。 >一瞬納得しそうになりますが、TREE_NODEが、その要素への参照を持てば >済む話ですよね。EiffelにはGenericsがあるわけですし。 委譲が面倒でなければ前橋さんのやり方の方が柔軟性ありそうですね。 私は1つのクラスに複数の役割を持たせるのはあまり好きではありません。 ただし本に載っているサンプルは実装を簡単にするため (あるいは、インターフェースの多重継承の説明のため) なのかもしれないですね。 >テストファーストって、設計の前にテストケースを書くということではなく、 >実装の前にテストケースを書くのでは。メソッドの引数など細かいところは >テストケースを書きながら詰めていく面もあるでしょうけど、 >クラス間の関係のような重要な点は、テストケースを書く前に決まっていると思います。 確かに実装の前にテストケースを書くのだと思うのですが、 テストケースを色々書いていく内に必要なクラスと不要なクラスが 浮かび上がってきてクラスの関係が導きだせるという感じだったと思います。 テストケースを書く前に決まっているとすると、結局は初めにUMLありき なので、テストケース自体単なる動作チェックもしくは、 後でリファクタリングをするのだけが目的ということになり、 あまりおいしくはなさそうです。 ># テストファースト、良いと思うんですが、現場ではなかなか。 ># 私の場合、「使用例」として、Wordでせこせこサンプルコードを書いて、 ># レビューを通してから若いのに実装してもらうことが多いような。 私は仕事では数値計算関係のプログラムを作成することが多く、 テストケースを作成しにくいです(つまりテストケース自体のテストをしないと いけないので)。 ただ無理にでも使っていかないと、結局使う機会がなく勉強にならないので なかなか難しいです。 前橋さんは若い人に実装してもらえるのはいいですね。 私の場合、小さいチームなのでそこまではいきません。 以前別の部署の後輩にやってもらったら余計仕事が遅くなりました。 やはり上司はブルックスの法則を理解していないのだと思いました。 最近「人月の神話」を購入して、XPの考え方の基になったという印象が あります。XPの歴史とか知らないので何とも言えないですが。 前橋さんは、他の人に仕事を手伝ってもらったら余計遅くなったこと ありませんか?
[この投稿を含むスレッドを表示] [この投稿を削除]
[160] Re:溝
投稿者:(ぱ)
2007/02/20 02:13:25

>ちなみに、買った帰りにぺらぺらめくって眺めていたんですが、第3章の扉絵を見た瞬間 >吹き出してしまいました。・・・電車の中で。 > ># 本筋と関係ない話ですみません。 本筋とは関係ないんでしょうが、ここに反応していただけるとムチャクチャ嬉しいです。 かなり狙って描いたので w >「なぜオブジェクト指向が生まれたのか」という経緯を、自分の中で追体験するような >形で学ばないと、そのありがたみもわからないのかな、などと、最近思ったりもします。 そう思います。そういう意味じゃ、BASICなどの経験も無駄ではなかったかも。
[この投稿を含むスレッドを表示] [この投稿を削除]
[159] Re:データ構造の重要性
投稿者:(ぱ)
2007/02/20 02:13:25

>私はオブジェクト指向勉強中の身なので色々勉強はしていて、 >バートランド・マイヤーさんの「オブジェクト指向入門」も >絶版のため結局買えてません。英語は面倒ですし...。 うわ、絶版でしたか。知りませんでした。 # amazonで中古品が買えるようではありますが。 http://www.amazon.co.jp/exec/obidos/tg/detail/offer-listing/-/4274075400/all/ref=sdp_srli_u/249-6600035-2383509 >私はartonさんと前橋さんの本が気に入っています。 >「C言語ポインタ完全制覇」でCに開眼したので。 ありがとうございます (_o_) >ところで、多重継承って使ったことないのですが必要な機能なのでしょうか? >使う目的が分かりません。 インタフェースの多重継承はよく使いますよね。 継承関係は、スーパークラスの分類とも言えますから、複数の軸について 分類したければ多重継承になる…という考え方もありますが、 それをやるとクラスの数が掛け算で増えていくので実用的ではないと私は思います。 「オブジェクト指向入門」では、階層構造を持てるWINDOWが、 SCREEN_OBJECTとTREEを多重継承するという例が出ています(このTREEは、 TREE_NODEと呼ぶべきだと思う)。 一瞬納得しそうになりますが、TREE_NODEが、その要素への参照を持てば 済む話ですよね。EiffelにはGenericsがあるわけですし。 >テストケースを書くことで本当にクラスの設計ができるのでしょうか? >クラスの設計って経験がものをいうというイメージだったのですが。 テストファーストって、設計の前にテストケースを書くということではなく、 実装の前にテストケースを書くのでは。メソッドの引数など細かいところは テストケースを書きながら詰めていく面もあるでしょうけど、 クラス間の関係のような重要な点は、テストケースを書く前に決まっていると思います。 # テストファースト、良いと思うんですが、現場ではなかなか。 # 私の場合、「使用例」として、Wordでせこせこサンプルコードを書いて、 # レビューを通してから若いのに実装してもらうことが多いような。
[この投稿を含むスレッドを表示] [この投稿を削除]
[158] Re:XMLファイルを検索
投稿者:(ぱ)
2007/02/20 02:13:25

>>>Elementを取り出すとは、何でしょう? … >Element element = (Element)pretestlist.item(i); >これは、item(i)⇒要素を順番に取得していくという意味ではないかとお思います つまりここでpretestの要素(Elementオブジェクト)が取り出せているわけですよね。 getElementsByTagName()はElementのメソッドです。 前回の神奈川さんのプログラムは、NodeListのgetElementsByTagName()を 呼ぼうとしていて、NodeListにそんなメソッドはないのでエラーになっていたわけです。 同じ要領でelementlistからelementのElementを取り出して、そこからさらに getElementsByTagName()を呼び出せば、elementの子のpretestを取り出すことが できるでしょう。 # ElementはJavaの(DOMの)クラスで、elementは神奈川さんが書いているXMLの # 要素名です。念のため。
[この投稿を含むスレッドを表示] [この投稿を削除]
[157] Re:溝
投稿者:kei
2007/02/20 02:13:25

>仮にAPIリファレンスを見なくても、getElementByTagName()がElementの >メソッドである、ということは、神奈川さん自身が投稿したソースを見れば >わかることですし。 あー。。 スレッド別表示にして見ていたので、下の方にひょろっとあった[145]の投稿に 気づかず、それを読まずに投稿してしまいました。(気付けよ、自分) ・・・と言うか神奈川さん、すでに答えをご自分で(ほぼ)書いていたんですね。。 >神奈川さんが越えるべきハードルはたくさんありそうです。 実は、僕もそれを感じたので >>神奈川さんが抱えている問題は複数あるように感じます。 って書いちゃいました、なんだか偉そうに。 >プログラムを書くには、まず自分が「何をしたいのか」を日本語でちゃんと >説明できなければならない、なんてことは「センス・オブ・プログラミング!」にも >書きましたけど。 実は、「センス・オブ・プログラミング!」は購入済みなんですが、忙しくて ほとんど読めていなかったりします。すみません。せっかく10月29日に買ったのに! ちなみに、買った帰りにぺらぺらめくって眺めていたんですが、第3章の扉絵を見た瞬間 吹き出してしまいました。・・・電車の中で。 # 本筋と関係ない話ですみません。 >今時の入門者は、「梯子が外された」状態にあるのかもしれません。 それは、良く感じます。 僕は運良く、プログラムを始めた時期に前橋さんの本で学ぶことが出来たわけですが、 同時期にプログラムを始めた人間は、研修でいきなり「StrutsでWebアプリケーション」 だとか、そんなことを勉強させられたりしたようです。 そう言えば、「オブジェクト指向で全ては抽象化されているんだから、細かい アルゴリズムなんて覚える必要は無い!」とか、トンでもなことを言い出している 上司もいました。 「なぜオブジェクト指向が生まれたのか」という経緯を、自分の中で追体験するような 形で学ばないと、そのありがたみもわからないのかな、などと、最近思ったりもします。 で、「センス・オブ・プログラミング!」には、きっとそんなことが書かれているのかなぁ などと妄想してみたり(笑) # うーん、「溝」という話題とは微妙にそれてしまったような。。
[この投稿を含むスレッドを表示] [この投稿を削除]
[156] Re:データ構造の重要性
投稿者:隠れファン
2007/02/20 02:13:25

隠れファンです。 返信ありがとうございます。 >これはその通りでしょう。でもまあ、それで細部は隠せても、 >大まかなところはオブジェクト間の関係のような形で見えてしまいますし。 >多重度の設計をしくじって拡張の際にはまる、なんてことは多いですよね。 ># Hogeに対してPiyoはひとつでよいはずだったのに、今度の機能拡張では ># n個にしなきゃいけなくなった。HogeのgetPiyo()には引数ないぞ。どうしてくれよう。 私は設計に失敗した場合、その部分を作り直してしまった方が早いと思っています (もちろん関連が多すぎるなど、そうできない場合も多いと思います)。 例えばクラスをラップしていって機能を追加してうまくごまかして 無理やりつじつま合わせようとしてもどんどん泥沼にはまりそうです。 >オブジェクト指向のバイブルは、私にとってはMAYERさんの「オブジェクト指向入門」 >でした。第2版は(買いはしたものの)まるで読めてませんけど。 ># なにせ英語なので… (^^;; > >継承がらみの議論では(特に多重継承)首をひねるところもありますが、 >今でも名著だと思います。 私はオブジェクト指向勉強中の身なので色々勉強はしていて、 バートランド・マイヤーさんの「オブジェクト指向入門」も 絶版のため結局買えてません。英語は面倒ですし...。 ご存知だと思いますが、オブジェクト指向の本では 「憂鬱なプログラマのためのオブジェクト指向講座」が売れているみたいですが 今ではほとんど役に立たないと思っています。 最近購入した「アジャイルソフトウェア開発の奥義」という本は かなり気に入っていて新たな発見がありそうです。 私はartonさんと前橋さんの本が気に入っています。 「C言語ポインタ完全制覇」でCに開眼したので。 ところで、多重継承って使ったことないのですが必要な機能なのでしょうか? 使う目的が分かりません。 あとテストファーストについてどう思われますか? 本を読んでると何かよさげなのですが...。 テストケースを書くことで本当にクラスの設計ができるのでしょうか? クラスの設計って経験がものをいうというイメージだったのですが。
[この投稿を含むスレッドを表示] [この投稿を削除]
[155] Re:XMLファイルを検索
投稿者:神奈川
2007/02/20 02:13:25

>>Elementを取り出すとは、何でしょう? > >[145]で神奈川さんが投稿されたリストの、 > > Element element = (Element)pretestlist.item(i); > >この部分は、どういう意味だと思って書いていましたか? 皆さん私のために親身に教えてくださって有難うございます。(TOT) (ぱ)さんの仰ったとおり「溝」に陥っているのかもしれません。。 Element element = (Element)pretestlist.item(i); これは、item(i)⇒要素を順番に取得していくという意味ではないかとお思います 例: タグpretestに対して item(0)が1番初めpretest要素取得 item(1)が2番目のpretest要素取得 とこのような感じだと思ったのですが、この状態だと全ての<pretest>タグ要素 を取得してしまう気がするんですけど。 間違っているでしょうか??
[この投稿を含むスレッドを表示] [この投稿を削除]
[154] Re:データ構造の重要性
投稿者:(ぱ)
2007/02/20 02:13:25

>隠れファンです。 >勝手に返信させて頂きます。 どうもです f(^^;; >但し、重要なデータほど >オブジェクト指向ではインターフェースを利用しモジュールを分離するので、 これはその通りでしょう。でもまあ、それで細部は隠せても、 大まかなところはオブジェクト間の関係のような形で見えてしまいますし。 多重度の設計をしくじって拡張の際にはまる、なんてことは多いですよね。 # Hogeに対してPiyoはひとつでよいはずだったのに、今度の機能拡張では # n個にしなきゃいけなくなった。HogeのgetPiyo()には引数ないぞ。どうしてくれよう。 >オブジェクト指向の実装よりではなく設計よりの内容でのバイブルを作れるのは オブジェクト指向のバイブルは、私にとってはMAYERさんの「オブジェクト指向入門」 でした。第2版は(買いはしたものの)まるで読めてませんけど。 # なにせ英語なので… (^^;; 継承がらみの議論では(特に多重継承)首をひねるところもありますが、 今でも名著だと思います。
[この投稿を含むスレッドを表示] [この投稿を削除]
[153]
投稿者:(ぱ)
2007/02/20 02:13:25

また件名かえました。 >・ DOMのAPIドキュメントをちゃんと読んでいない。 > >というのが差し当たっての問題のように思えます。 それもそうだと思うのですが、 >「なぜ、NodeListに対してgetElementsByTagName()が出来ないのか」 という言葉の意味がわかるなら、そしてAPIリファレンスの何たるかを知っていれば、 別に熟読しなくても、その部分だけでも読みそうなもんですし、 仮にAPIリファレンスを見なくても、getElementByTagName()がElementの メソッドである、ということは、神奈川さん自身が投稿したソースを見れば わかることですし。 神奈川さんが越えるべきハードルはたくさんありそうです。 以下、別に神奈川さんを責めているわけではありません。 「闘わないプログラマ」に「溝」という文章がありますが、 http://www.amy.hi-ho.ne.jp/~lepton/program/p1/prog181.html 神奈川さんの最初の投稿の >ファイルを格納するということは、できるのでしょうか? というのを読んで私が連想したのが実はこの文章でした。 質問者の側に知識が不足していると、往々にしてこういうことは起こってしまうわけで、 じゃあどうすればいいのかというと、私もLeptonさんと同じく「名案は無いですねえ」 状態なわけで。 本なんか書いてる身としては、こんなこっちゃいかんわけですが。私のほうにセンスが 足りてないんでしょう。 プログラムを書くには、まず自分が「何をしたいのか」を日本語でちゃんと 説明できなければならない、なんてことは「センス・オブ・プログラミング!」にも 書きましたけど。 正直、APIリファレンスの読み方がわからない人が、XMLを解析してどうこうする プログラムを書くのは難度が高すぎやしないか、と思うわけですが、 現代の初心者にはありがちな話のような気がします。 私がプログラミングを始めた頃は、そんな複雑なAPIもなく、そもそもそんな 凝ったことをするマシンパワーもなくて、簡単なプログラムから順次入門して いったわけですが、今時の入門者は、「梯子が外された」状態にあるのかもしれません。 うーん。まとまらなくてすみません。
[この投稿を含むスレッドを表示] [この投稿を削除]
[152] Re:XMLファイルを検索
投稿者:(ぱ)
2007/02/20 02:13:25

>Elementを取り出すとは、何でしょう? [145]で神奈川さんが投稿されたリストの、 Element element = (Element)pretestlist.item(i); この部分は、どういう意味だと思って書いていましたか?
[この投稿を含むスレッドを表示] [この投稿を削除]
[151] Re:XMLファイルを検索
投稿者:kei
2007/02/20 02:13:25

> 神奈川さん こんにちは。 スレッドを拝見していて思ったんですが、神奈川さんが抱えている問題は 複数あるように感じます。 が、とりあえずは ・ DOMのAPIドキュメントをちゃんと読んでいない。 というのが差し当たっての問題のように思えます。 Javaでプログラミングをする時は、APIドキュメントを読むことが必須だったりします。 「なぜ、NodeListに対してgetElementsByTagName()が出来ないのか」理由が わからないのでしたら、前橋さんがご提示してくださったDOMのAPIドキュメントを 読み返してみてはいかがでしょうか? そうすれば、次に自分が何をすべきか見えてくると思いますよ。 ヒントを書くと、「NodeListの2つのメソッドを組み合わせて使えば。。」って 感じです。 # って、なんか偉そうですね。。すみません。 それから、今回はもう間に合わないと思いますが、世の中にはxmlとJavaオブジェクトの バインディングのためのライブラリなども存在しますので、次回はそういったものも 勉強してみると、同じことが楽に出来るかもしれないですよ。
[この投稿を含むスレッドを表示] [この投稿を削除]
[150] Re:XMLファイルを検索
投稿者:神奈川
2007/02/20 02:13:25

>> NodeList pretestlist = elementlist.getElementsByTagName >... >>しかしこの状態だとエラーが発生してしまいました・・ > >そりゃNodeListに対してgetElementsByTagName()はできないでしょう。 >Elementを取り出してからにしないと。 たびたびすみません。 うーん・・解らないですね。。 Elementを取り出すとは、何でしょう? どうすれば、elementの下のpretestのみを取得できるのでしょう? 僕のイメージは、親を指定して例えば(element) その後に子を指定する(pretest)を行って初めて、 そのpretestにたどり着くようなイメージがあるのですが、 とんでもない勘違いをしているのでしょうか? Element root = doc.getDocumentElement(); ⇒ルート要素取得(ドキュメントの下のノードを取得したことになりますよね?) NodeList list = root.getElementsByTagName("タグの名前"); ⇒タグの名前要素のリストを取得(ルート要素で取得したノードに対してタグの名前要素のリス                トを取得) リストを取得して⇒ノードを取得⇒リストを取得して⇒ノードを取得 を繰り返す事で末端の要素にたどり着くのでしょうか? すみません。。ほんとに解らなくて・・・ここさえ解れば、あとは何とか成りそうなんですが・・(実は、ものすごい単純なのかもしれませんが宜しくお願いします) 下のようなxmlならば、elementの下のpretestを指定する。 (後はitemごとにtextを取得するこれ自体は、可能) <?xml version="1.0" encoding="Shift_JIS" ?> <site> <title>JavaでHello World</title> <element id="28"> <pretest id="28"> <title>EJB編</title> <file>ejb.htm</file> </pretest> <pretest> <title>DOM編</title> <file>xmldom.htm</file> </pretest> </element> <element1 id="28"> <pretest id="28"> <title>neko</title> <file>neko.htm</file> </pretest> <pretest> <title>DOMneko編</title> <file>xmldomneko.htm</file> </pretest> </element1> </site>
[この投稿を含むスレッドを表示] [この投稿を削除]
[149] Re:XMLファイルを検索
投稿者:(ぱ)
2007/02/20 02:13:25

> NodeList pretestlist = elementlist.getElementsByTagName ... >しかしこの状態だとエラーが発生してしまいました・・ そりゃNodeListに対してgetElementsByTagName()はできないでしょう。 Elementを取り出してからにしないと。
[この投稿を含むスレッドを表示] [この投稿を削除]
[148] Re:XMLファイルを検索
投稿者:神奈川
2007/02/20 02:13:25

有難うございます^^ あまり理解できなくすみません。 >まずelementを見つけて、そのelementに対して >getElementsByTagNameをやればよいだけの話では? とのことでしたので、(先ほど記述したプログラムの一部を抜粋) DocumentBuilder builder = dbfactory.newDocumentBuilder(); // パースを実行してDocumentオブジェクトを取得 Document doc = builder.parse(new File("site.xml")); // ルート要素を取得(タグ名:site) Element root = doc.getDocumentElement(); // element要素のリストを取得 NodeList elementlist = root.getElementsByTagName("element"); // pretest要素のリストを取得 (elementの下のpretest) NodeList pretestlist = elementlist.getElementsByTagName このようにすればよいのでしょうか? NodeList pretestlist=elementlist(ここで親を指定するという形でいいのでしょうか?) .getElementsByTagName しかしこの状態だとエラーが発生してしまいました・・ エラー内容は、 java21:シンボルが解決されません シンボル:getElementsByTagName(java.lang.string) 場所:org.w3c.dom.Nodelist NodeList pretestlist = elementlist.getElementsByTagName                   ^ とのようになりました。。難しいです。。記述の仕方がまずいのでしょうか?
[この投稿を含むスレッドを表示] [この投稿を削除]
[147] Re:難易度(ゴミ)
投稿者:(ぱ)
2007/02/20 02:13:25

>難易度って難しい℃なのかやさしい℃なのか、いつもわかりません。 >素直に難度といえばいいのにとか思う今日子の頃。 確かに。 Google検索してみると… 難易度が高い の検索結果 約 34,300 件 難度が高い の検索結果 約 5,350 件 「難易度が高い」の方が多いことは予想していましたが、 「難度が高い」も結構ありますねえ。
[この投稿を含むスレッドを表示] [この投稿を削除]
[146] XMLファイルを検索
投稿者:(ぱ)
2007/02/20 02:13:25

件名を変えました。 >>私ならそもそもそういうメソッドは、 >>ファイル名と検索キーワードを引数で受け取って、マッチしたかどうかを >>booleanで返すようにしますけど。 ... >引数は、ファイル名とキーワードは、複数ある場合があるから、配列で示すのかな >?? キーワードは配列で渡すのでしょうが、ファイル名はひとつだけ渡すことを 想定していました。だから戻り値がboolean 1個でいいわけです。 戻り値は「そのファイルにキーワードが含まれていたかどうか」を表現します。 もちろん、それ以外の情報も返したいなら、booleanではなく、何らかの オブジェクトに値を詰めて返さなければなりません。 で、もちろん検索はたくさんのファイルの中から行いたいのでしょう。 でも、たくさんのファイルでぐるぐるループするのは、このメソッドの 呼び出し側で行えばよい話で、だから >で、フォルダ内のファイル名を片っ端からそのメソッドで判定する、 >という処理は、その一階層上でやらせます。 こう書きました。 >となります。このように「この親(element)のこの子(pretest)」 >という指定はできるのでしょうか?今の状態だと全てのpretestの要素を取得している >ので何とかしたいのですが・・どうぞ宜しくお願いします。 elementとpretestの間に何かが挟まったり、pretestがネストしたりする 可能性がないのであれば、まずelementを見つけて、そのelementに対して getElementsByTagNameをやればよいだけの話では?
[この投稿を含むスレッドを表示] [この投稿を削除]
[145] Re:難しいです。。
投稿者:神奈川
2007/02/20 02:13:25

>http://www.hellohiro.com/xmldom.htm >このページではDOMの環境構築の話から書いてあります (ぱ)さんの指定したリンク先を元にプログラムを作成してみました。 下は、xmlファイルです。 <?xml version="1.0" encoding="Shift_JIS" ?> <site> <title>JavaでHello World</title> <element id="28"> <pretest id="28"> <title>EJB編</title> <file>ejb.htm</file> </pretest> <pretest> <title>DOM編</title> <file>xmldom.htm</file> </pretest> </element> <element1 id="28"> <pretest id="28"> <title>neko</title> <file>neko.htm</file> </pretest> <pretest> <title>DOMneko編</title> <file>xmldomneko.htm</file> </pretest> </element1> </site> 僕のプログラム public class A { public static void main(String[] args) { try { // ドキュメントビルダーファクトリを生成 DocumentBuilderFactory dbfactory = DocumentBuilderFactory.newInstance(); // ドキュメントビルダーを生成 DocumentBuilder builder = dbfactory.newDocumentBuilder(); // パースを実行してDocumentオブジェクトを取得 Document doc = builder.parse(new File("site.xml")); // ルート要素を取得(タグ名:site) Element root = doc.getDocumentElement(); System.out.println("ルート要素のタグ名:" + root.getTagName()); System.out.println("***** ページリスト *****"); // element要素のリストを取得 NodeList elementlist = root.getElementsByTagName("element"); // pretest要素のリストを取得 NodeList pretestlist = root.getElementsByTagName("pretest"); // pretest要素の数だけループ for (int i=0; i < pretestlist.getLength() ; i++) { // page要素を取得 Element element = (Element)pretestlist.item(i); // title要素のリストを取得 NodeList titleList = element.getElementsByTagName("title"); // title要素を取得 Element titleElement = (Element)titleList.item(0); // title要素の最初の子ノード(テキストノード)の値を取得 String title = titleElement.getFirstChild().getNodeValue(); // file要素のリストを取得 NodeList fileList = element.getElementsByTagName("file"); // file要素を取得 Element fileElement = (Element)fileList.item(0); // file要素の最初の子ノード(テキストノード)の値を取得 String file = fileElement.getFirstChild().getNodeValue(); System.out.println("タイトル:" + title + " " + "ファイル:" + file); } } catch (Exception e) { e.printStackTrace(); } } } というように作成してみました。 そうすると実行結果が、 タイトル:EJB編 ファイル:ejb.htm タイトル:DOM編 ファイル:xmldom.htm タイトル:neko ファイル:neko.htm タイトル:DOMneko編 ファイル:nekoxmldom.htm となりました。私としては、elementの下にあるpretestのみを取得したいのですが 詰まり実行結果としては、 タイトル:EJB編 ファイル:ejb.htm タイトル:DOM編 ファイル:xmldom.htm となります。このように「この親(element)のこの子(pretest)」 という指定はできるのでしょうか?今の状態だと全てのpretestの要素を取得している ので何とかしたいのですが・・どうぞ宜しくお願いします。 長々と申し訳ありません・・
[この投稿を含むスレッドを表示] [この投稿を削除]
[144] Re:データ構造の重要性
投稿者:隠れファン
2007/02/20 02:13:25

はじめまして。 隠れファンです。 勝手に返信させて頂きます。 「センス・オブ・プログラミング」読ませて頂きました。 データ構造のあたりの考え方はかなり参考になりました。 >>抽象化・データ構造重視というとまさにオブジェクト指向的な考えですよね。 > >そう思います。「センス・オブ~」はオブジェクト指向の手前で止まっていますが、 >延長線上にある概念だと思います。 >オブジェクト指向を、従来のプログラミング技術と「まるで違う」もので >あるかのように宣伝したがる人も多いようですけど。 私も同感です。プログラミングの本質は言語が何であろうと変わらないと 思っています。「まるで違う」という人の意見は設計ではなく実装よりの ことを言っているのかもしれません。ただし設計と実装の境界が微妙な場合も 多々あると思います。 データ構造に関してですが、私はデータを処理するアルゴリズムがデータ構造に 依存しているために、仕様の変更時にデータ構造の変更は、アルゴリズムの変更も 伴うため、データ構造が重要だと思っています。但し、重要なデータほど オブジェクト指向ではインターフェースを利用しモジュールを分離するので、 結合度をどの程度にするかは結局は他とのバランスだと思っています。 >>オブジェクト指向に関する本もやがて出ると(勝手に)期待してます。 > >えーっと f(^^;; >たぶん私を逆さにして振っても、「Java謎+落とし穴~」に書いてある以上のことは >出てこないと思います。 ># でも、Webページの方も更新しないとなあ。 私も期待しています。特に最近のキーワードでもある「アジャイル開発」や「XP」 あたりのテーマを書いてほしいです。 オブジェクト指向の実装よりではなく設計よりの内容でのバイブルを作れるのは 前橋さんだと思っています。
[この投稿を含むスレッドを表示] [この投稿を削除]
[143] Re:難しいです。。
投稿者:神奈川
2007/02/20 02:13:25

有難うございます。。 返信遅れてすみません。。 >>実は、XMLファイルの検索のプログラムを作成し様としているのです。 > >ということは、 >・たくさんあるXMLファイルを片っ端から開いて、 >・内容を読み込み、解析し、 >・ある特定のキーワードが、(ある特定のタグの下に)あるファイルを抽出する。 >という動作になりますよね? (合ってますか?) 合ってます。 >私ならそもそもそういうメソッドは、 >ファイル名と検索キーワードを引数で受け取って、マッチしたかどうかを >booleanで返すようにしますけど。 なるほど具体的にいうと例えばどのようなプログラムでしょう? 簡単な受け取り部分のサンプルプログラムを教えていただけると嬉しいのですが・・ booleanが戻り値 public boolean a(引数) 引数は、ファイル名とキーワードは、複数ある場合があるから、配列で示すのかな ?? アホみたいな質問ですみません・・ >このページではDOMの環境構築の話から書いてあります いいページです。勉強中~。。 >これが「難しくてわけわからない」ということだとすると、 >今の神奈川さんには、ちょっと問題の難易度が高かった、ということだと思います。 初心者なので探り探りです・・・
[この投稿を含むスレッドを表示] [この投稿を削除]
[142] Re:データ構造の重要性
投稿者:(ぱ)
2007/02/20 02:13:25

はじめまして。 >前々から、前橋さんの本は結構気に入っていて、 >全部読んでいます。 ありがとうございます。大変励みになります。 >抽象化・データ構造重視というとまさにオブジェクト指向的な考えですよね。 そう思います。「センス・オブ~」はオブジェクト指向の手前で止まっていますが、 延長線上にある概念だと思います。 オブジェクト指向を、従来のプログラミング技術と「まるで違う」もので あるかのように宣伝したがる人も多いようですけど。 >オブジェクト指向に関する本もやがて出ると(勝手に)期待してます。 えーっと f(^^;; たぶん私を逆さにして振っても、「Java謎+落とし穴~」に書いてある以上のことは 出てこないと思います。 # でも、Webページの方も更新しないとなあ。
[この投稿を含むスレッドを表示] [この投稿を削除]
[141] データ構造の重要性
投稿者:sec
2007/02/20 02:13:25

はじめまして。 前々から、前橋さんの本は結構気に入っていて、 全部読んでいます。 今回のセンス・オブ・プログラミング!も さっそく読ましていただきました。 今回の本で、抽象化とデータ構造の重要さを改めて認識することができました。 仕事でコーディングする時は、ロジックに焦点がいきがちで、 ついデータ構造がおざなりになってしまいがちなんですよね。 私自身、そこまで意識して、データ構造を明確に意識して設計することは、 あまりなかったなぁと感じて、反省しています。 (でかいグローバルな構造体を用意して、そいつにすべての情報を詰め込み、 あらゆるところから、参照するという「やっちゃいけない」パターンを やってることが多いです。) 抽象化・データ構造重視というとまさにオブジェクト指向的な考えですよね。 オブジェクト指向に関する本もやがて出ると(勝手に)期待してます。 仕事もしながら、執筆は大変だと思いますが、今後もがんばってください。
[この投稿を含むスレッドを表示] [この投稿を削除]
[140] 難易度(ゴミ)
投稿者:774RR
2007/02/20 02:13:25

難易度って難しい℃なのかやさしい℃なのか、いつもわかりません。 素直に難度といえばいいのにとか思う今日子の頃。 燃費がいいってどっち?とか。
[この投稿を含むスレッドを表示] [この投稿を削除]
[139] Re:難しいです。。
投稿者:(ぱ)
2007/02/20 02:13:25

>実は、XMLファイルの検索のプログラムを作成し様としているのです。 ということは、 ・たくさんあるXMLファイルを片っ端から開いて、 ・内容を読み込み、解析し、 ・ある特定のキーワードが、(ある特定のタグの下に)あるファイルを抽出する。 という動作になりますよね? (合ってますか?) 抽出した後のファイルをどうするのかわかりませんが、ファイル名(パス)を 表示するだけなら、ファイルを探すメソッドの戻り値は、ファイル名(文字列)で よいように思います。ただ、私ならそもそもそういうメソッドは、 ファイル名と検索キーワードを引数で受け取って、マッチしたかどうかを booleanで返すようにしますけど。 で、フォルダ内のファイル名を片っ端からそのメソッドで判定する、 という処理は、その一階層上でやらせます。 具体的な実現手段を探してうろうろする前に、自分がなにをしたいのかを 明確にしないと、プログラムは書けませんよ。 また、こういうことをしたいのなら、難しいのはむしろXMLのパース(構文解析) でしょうが、XMLの構文解析はDOMなどを使うと簡単です。 JavaでHello World!: http://www.hellohiro.com/xmldom.htm このページではDOMの環境構築の話から書いてありますが、 1.4以降のJavaなら標準で入っています。 APIリファレンスはこちら: http://java.sun.com/j2se/1.4/ja/docs/ja/api/org/w3c/dom/package-summary.html これが「難しくてわけわからない」ということだとすると、 今の神奈川さんには、ちょっと問題の難易度が高かった、ということだと思います。
[この投稿を含むスレッドを表示] [この投稿を削除]
[138] Re:難しいです。。
投稿者:神奈川
2007/02/20 02:13:25

早速ありがとうございます。^^ >本当にやりたいことは、ファイル名から「ファイル」を得ることじゃなく、 >「そのファイルを読み書きするためのナニモノか」を得ることなんじゃないかなあ、 >という気がします(合ってますか?)。 (ぱ)さんは、すごく鋭いですね^^ 現在知識の詰め込み中でして・・多々解らない事がありまして。勉強中なんです。。 実は、XMLファイルの検索のプログラムを作成し様としているのです。 前のスレで似たような質問があったみたいですが、僕には解らなくて・・ タグで検索するという形なのですが、 例えば、入力のキーワードを「2ちゃん」とすると(下のxmlファイルを参照して) 下の<a>のタグの下に<b>内にある文字列である「2ちゃん」 を検索してこのxmlファイルを戻り値として返すという感じです。 入力キーワードが2つ以上ある場合は、それをandで計算して、その二つのキーワード が含まれる<a>のタグの下に<b>内にある文字列を検索します。 一致したファイルをxmlファイルを戻り値として返すという感じです。 ******②ちゃん.xml********* <c>    <b>ギコ</b>    <b>おにぎり</b> </c> <a>    <b>2ちゃん</b>    <b>掲示板</b> </a> *************************** 実は、二人で作業していまして、僕がファイルを戻すという作業をすることになったのです。 目的としては、見つけたファイルを戻して終了という感じです。 もしよろしければ、このようなサンプルプログラムとかあるでしょうか? なければ、どのような本を見れば乗ってるでしょうか? 宜しくお願いします。
[この投稿を含むスレッドを表示] [この投稿を削除]
[137] Re:難しいです。。
投稿者:(ぱ)
2007/02/20 02:13:25

どうも、はじめまして。 ご質問の件ですが、一般に 「自分が何をしたいのか、きちんと日本語で説明できないうちは、  プログラムは書けない」 と言えます。(ちょうど「センス・オブ・プログラミング!」にそんなことを書きました。) >引数が文字列で,戻り値がファイルというような形です。 ... >「おにぎり」というキーワードを入力 >↓ >ファイル名がおにぎりというファイルを出力 ここだけ読むと import java.io.*; class Test { File hoge(String path) { return new File(path); } } こんなことがしたいようにも読めますが… File f = Test.hoge("hoge.txt"); と呼び出した後で何をしたいのかが不明ですし。 本当にやりたいことは、ファイル名から「ファイル」を得ることじゃなく、 「そのファイルを読み書きするためのナニモノか」を得ることなんじゃないかなあ、 という気がします(合ってますか?)。 だとすれば、Fileではなく、FileInputStreamやFileOutputStreamを使うことになるでしょう。 このへんのクラスの説明については、JavaのAPIリファレンス http://java.sun.com/j2se/1.4/ja/docs/ja/api/index.html を参照してください。 http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/io/File.html http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/io/FileInputStream.html http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/io/FileOutputStream.html
[この投稿を含むスレッドを表示] [この投稿を削除]
[136] 難しいです。。
投稿者:神奈川
2007/02/20 02:13:25

質問ですー JAVAでプログラムを組もうとしています。 JAVAでは文字列や数字などintなどの変数によって格納できますが、 ファイルを格納するということは、できるのでしょうか? 例えば 引数が文字列で,戻り値がファイルというような形です。 「おにぎり」というキーワードを入力 ↓ ファイル名がおにぎりというファイルを出力 というような形です。 宜しくお願いします。 プログラム初心者なので、出来もしない事を書いてあるかもしれません。 初歩的なことかもしれませんが宜しくお願いします。 そこも踏まえて宜しくです。。
[この投稿を含むスレッドを表示] [この投稿を削除]
[134] Re:可変長配列について
投稿者:(ぱ)
2007/02/20 02:13:25

>これは、この構造体の例よりも もっと合法な使い方である、 >単なる可変長配列を realloc() した場合にも起きる問題ですね。 うーん、たとえば折れ線を表現するときに、 typedef struct { int point_count; Point *point; } Polyline; typedef struct { int point_count; Point point[1]; } Polyline; というふたつの実現方法があって、どちらを使うかを考えたとき、 後者の方法だと、pointの数を増減させるたびにPolylineのアドレスが 変わってしまう、ということを言いたかったのですが。 確かにどちらもrealloc()すればpointの指すアドレスは変わりますが、 「pointはPolyline以外誰も指してないけど、Polylineを指してる奴は いっぱいいる」というケースはたぶんたくさんあって、後者の方が 危険度がかなり高いと思います(程度問題にせよ)。 >この手法は、C99 で合法化されたと考えて良いと思います。 >以下参照: >http://seclan.dll.jp/c99d/c99d04.htm#dt19990726 これはそうですね。 そういえばGCCにも、point[0]と書ける拡張機能がありました。
[この投稿を含むスレッドを表示] [この投稿を削除]
[133] Re:可変長配列について
投稿者:kit
2007/02/20 02:13:25

> このテクニックで可変長配列を実現すると、realloc()で配列を > 拡張したとき、 これは、この構造体の例よりも もっと合法な使い方である、 単なる可変長配列を realloc() した場合にも起きる問題ですね。 例としては、むしろ、pArry[1] みたいなアクセスでまずいことに なることを挙げた方がいいような気がします。 > 微妙です。少なくとも合法と言い切ることはできません。 この手法は、C99 で合法化されたと考えて良いと思います。 以下参照: http://seclan.dll.jp/c99d/c99d04.htm#dt19990726
[この投稿を含むスレッドを表示] [この投稿を削除]
[132] Re:可変長配列について
投稿者:(ぱ)
2007/02/20 02:13:25

>「センス・オブ・プログラミング」読ませていただきました。 >読んで良かったと思いました。 はじめまして。読んでいただきありがとうございます。 >ところで、可変長配列について説明(P153)がちょっと足りないのでは? このテクニックは、私も「ポインタ完全制覇」では説明していますが、 今回の本で必要だったかというとどうかと思います。 Cに特化した話ですし(だからこそ「Cに特有の話」の項になら書いてよいのでは、 というご意見なのだと思いますが)、それに、このテクニックは、使用できる 状況が限定されますし。 このテクニックで可変長配列を実現すると、realloc()で配列を拡張したとき、 構造体本体のアドレスまで変わってしまう可能性があります。 よって、この構造体を指しているポインタがどこかにあるときは、 このテクニックは使えません。 また、可変長配列にできる要素が最後のひとつだけ、という問題もあります。 このテクニックを使う機会は、「その構造体を、連続した塊としてファイルに 吐いたり、ネットワークでどこかに送りたい」というケースに限定されるように 思います。 >Cではこれが間違いではありません。---① 微妙です。少なくとも合法と言い切ることはできません。 C-FAQには以下の記述があります。 http://www.kouno.jp/home/c_faq/c2.html#6 | この技巧は人気がある。ただしDennis Ritchieは「Cの実装への | 根拠のない馴れ馴れしさ」と呼んだ。公式な解釈によると上の | 技巧は Cの 規格に厳密には準拠していないと考えられる。 私も同じように思います。が、ほぼ全ての環境で動くと思うので、 移植性を根拠にこれを使うことをためらう必要はないでしょうけど。 >この2点が「Cに特有の話」である事で、この説明が足りないと思いました。 補足の形で(Webに)載せた方がよいかどうかは、現在思案中です。
[この投稿を含むスレッドを表示] [この投稿を削除]
[131] 可変長配列について
投稿者:しゅん
2007/02/20 02:13:25

「センス・オブ・プログラミング」読ませていただきました。 読んで良かったと思いました。 特に3章は共感する所が多くありました。 私もコピペやっちゃうんですよね、そして後で後悔してますね。 新人の頃に読めたらもっと何か違っていたかもと思いもしました。 ところで、可変長配列について説明(P153)がちょっと足りないのでは? 特に「Cに特有の話」の部分にかかります。 typedef struct _VARIABLEARRY { int valMaxIndex; char val[1]; // 1つの配列のインデックス値は本来0だけが有効。 // char val[0]; の記述はコンパイラの実装により異なる。 }VARIABLEARRY; たとえばこの場合 int maxIndex = 10; VARIABLEARRY *pArry; pArry = malloc( sizeof(VARIABLEARRY) + maxIndex ); pArry->valMaxIndex = maxIndex; pArry->val[1] = 'a'; // 配列のインデックス値が宣言した範囲を超えている。 の表記が許される事です。 BASICでは配列のインデックス値が範囲を超えるとエラーです。 Cではこれが間違いではありません。---① また、構造体の最後のメンバを配列にする事でこれが可能である事です。---② typedef struct _VARIABLEARRY { char val[1]; int valMaxIndex; }VARIABLEARRY; とした場合は正しく機能しません。 この2点が「Cに特有の話」である事で、この説明が足りないと思いました。
[この投稿を含むスレッドを表示] [この投稿を削除]
[130] Re:C++におけるラベル付きbreakについて
投稿者:(ぱ)
2007/02/20 02:13:25

>ところで本文中でちょっとした誤りだと思われる箇所を見つけました。 >goto文について解説しているところで、JavaとC++にはラベル付きbreakが >存在すると記述されていますが、C++では聞いたことがなかったので念のために ご指摘ありがとうございます。 とりあえず手元のStroustrup本で確認しましたが、C++にラベル付きbreakは ありませんね。なぜかは知りませんが勘違いしていたようです。 これは罪の重い間違いだと思います。申し訳ありません。 正誤表に載せておきました。
[この投稿を含むスレッドを表示] [この投稿を削除]
[129] C++におけるラベル付きbreakについて
投稿者:lowlander
2007/02/20 02:13:25

センス・オブ・プログラミング読ませて頂きました。 プログラミングにおけるポイントを押さえていていい本だと感じました。 またループに使用する変数i,j,k,...の由来を知ったときは感激でしたね。 ところで本文中でちょっとした誤りだと思われる箇所を見つけました。 goto文について解説しているところで、JavaとC++にはラベル付きbreakが 存在すると記述されていますが、C++では聞いたことがなかったので念のために ISO/IEC FDIS 14882:1998を調べてみました。ところが自分が調べた限り そのような記述は見つかりませんでしたので、ご確認していただけないでしょうか? 一応自分が参照したFDISのbreakに関する部分を掲載させていただきます。 では失礼致します。 6.6.1 The break statement The break statement shall occur only in an iterationstatement or a switch statement and causes termination of the smallest enclosing iterationstatement or switch statement; control passes to the statement following the terminated statement, if any.
[この投稿を含むスレッドを表示] [この投稿を削除]
[128] Re:指を折って数える
投稿者:(ぱ)
2007/02/20 02:13:25

昨晩は飲んだくれてまして反応が遅れました。すみません。 >0~5 の 6通りの数を表現しています。 あっ。 …重ね重ねありがとうございます。(_o_) 修正しておきました。
[この投稿を含むスレッドを表示] [この投稿を削除]
[127] Re:指を折って数える
投稿者:かずま
2007/02/20 02:13:25

>えっ! …と思ってやってみたら本当でした。どうもボケていたようです。 >どう直すべきか悩むところですが、正誤表に入れておきます。 : 正) : しかも、0と10、1と9、2と8などは同じ形ですから、実際は5通りの数しか表現していません。 0~5 の 6通りの数を表現しています。 [1] 0 - 10 [2] 1 - 9 [3] 2 - 8 [4] 3 - 7 [5] 4 - 6 [6] 5
[この投稿を含むスレッドを表示] [この投稿を削除]
[126] Re:第一号かな?
投稿者:(ぱ)
2007/02/20 02:13:25

> へぇ、そういうものなんですか(おどろき) > TeXの機能に索引に載せる単語を指定すると > 自動で索引作成してくれるような機能があったと思っていたので > そんな感じに改版するたびに全自動で作ってるのかと思ってました。 編集さんが使っているDTPソフトには、そういう機能があるのだろうと思います。 ミスが出ている以上、どこかに手作業が介在しているのでしょうけど。 たとえば、自動生成した索引を手でレイアウトしなおしていて、再生成すると 手作業分がふっとぶから、そこだけ手で直した…とか(想像です)。 > えっ、全ページ出力し直すわけじゃないんですか。 そのようです。例外として、「体当たり学習」では、タイトルとかの背景の luckyがスペルミスしてる、という問題があって(初版発行まえに差し替えを 要求したはずが、印刷会社側のミスで反映されていなかった)、このときは 第2刷の際に全ページ再出力しました。「どうせ再出力するから、直したい ところがあれば言って欲しい」というようなことを言われました。 > きっとワープロ→プリンタ出力の様なイメージで考えちゃ > いけない世界なんですね...(^^;) 数千とか万とか刷る本は、「小部数ではバカ高だが、たくさん刷れば安くなる」 方法で印刷しますから、事前準備の部分にコストがかかるということなんでしょうね。 ># と、いうことは間違え探しも見つけるたびに言うのではなく、 ># 一気に出さないと迷惑なのかしら? (^^;) いえ、修正は増刷のタイミングで行うわけですから、その分のバッファリングは こちらでできます。見つかるたびに報告していただけたほうがありがたいです。
[この投稿を含むスレッドを表示] [この投稿を削除]
[125] Re:指を折って数える
投稿者:(ぱ)
2007/02/20 02:13:25

おひさしぶりです。いつもありがとうございます。 >1と9、2と8、3と7、4と6 も同じ指の形になりませんか? 実質は 5。 えっ! …と思ってやってみたら本当でした。どうもボケていたようです。 どう直すべきか悩むところですが、正誤表に入れておきます。 >p.85 図 2-26 コンパイラの出力が「hello.c」になっています。 こちらもご指摘ありがとうございます。 # ここは、念校時に直してもらうようお願いしたのですが、意図とは異なる # 直され方をしてしまったようです。書き方が悪かったかなあ。
[この投稿を含むスレッドを表示] [この投稿を削除]
[124] Re:指を折って数える
投稿者:かずま
2007/02/20 02:13:25

>「センス・オブ・プログラミング」買いました。 書名に「!」をつけるのを忘れました。全角か半角かは? > 1と9、2と8、3と7、4と6 も同じ指の形になりませんか? 実質は 5。 「実質は 0~5」と書いたつもりでした。
[この投稿を含むスレッドを表示] [この投稿を削除]
[123] 指を折って数える
投稿者:かずま
2007/02/20 02:13:25

「センス・オブ・プログラミング」買いました。 p.60 しかも、0 と 10は同じ指の形ですから、実質は 0~9 までになるでしょう。 1と9、2と8、3と7、4と6 も同じ指の形になりませんか? 実質は 5。 p.85 図 2-26 コンパイラの出力が「hello.c」になっています。
[この投稿を含むスレッドを表示] [この投稿を削除]
[122] Re:第一号かな?
投稿者:本多
2007/02/20 02:13:25

> 索引に関しては、私は、ゲラの段階で、索引に載せるべき単語にマーカーで >印を付ける、という以上の作業はしていません。よって、どのようにして索引が >作られているかどうかは知らないんですよ。 へぇ、そういうものなんですか(おどろき) TeXの機能に索引に載せる単語を指定すると 自動で索引作成してくれるような機能があったと思っていたので そんな感じに改版するたびに全自動で作ってるのかと思ってました。 # TeXは修論のとき以来触ってないから、 # もうどんな機能があったか忘却のかなたですねぇ。 # \frac{1}{2} だったかな? > 増刷の際に自動的に直るということはないと思います。増刷時、ポカが >あったりして直す際は、ページ単位で製版し直しているようです。 >ページ単位でコストが発生するため、「全部作り直す」ということはしないはずです。 えっ、全ページ出力し直すわけじゃないんですか。 きっとワープロ→プリンタ出力の様なイメージで考えちゃ いけない世界なんですね...(^^;) # と、いうことは間違え探しも見つけるたびに言うのではなく、 # 一気に出さないと迷惑なのかしら? (^^;)
[この投稿を含むスレッドを表示] [この投稿を削除]
[121] Re:第一号かな?
投稿者:(ぱ)
2007/02/20 02:13:25

> ところで、索引とかは何かのツールで自動生成してると思うので、 > 第2版では直っている、もしくは自動的に直ってしまうかもしれませんが > 一つ間違いを見つけました...  これもご指摘ありがとうございます。  まずは編集さんに伝えておきました。 > どうしてこういうことが発生するのかしら?ツールにバグがあるのかな? > ツールで索引作成後に文章を書き足したのでしょうか?  索引に関しては、私は、ゲラの段階で、索引に載せるべき単語にマーカーで 印を付ける、という以上の作業はしていません。よって、どのようにして索引が 作られているかどうかは知らないんですよ。 # 知っていたとして、ここに書いてよいかどうか、という問題もありますが。 >こういう場合、チェック項目が何個もあるんでしょうけど、 >それを自動化できないのはプログラマとしては歯がゆい感じしません?  元原稿はLaTeXで書いているので、「3章を参照してください」とか 「p.XXXを参照してください」という類の相互参照は、私が提出する段階では 自動チェックできるんですが、いずれにしても組版すれば変わってしまうので、 あとは編集さんにお任せですね。ゲラを見ると、いろいろこう、歯がゆいことも あるんですが(謎)  増刷の際に自動的に直るということはないと思います。増刷時、ポカが あったりして直す際は、ページ単位で製版し直しているようです。 ページ単位でコストが発生するため、「全部作り直す」ということはしないはずです。
[この投稿を含むスレッドを表示] [この投稿を削除]
[120] Re:第一号かな?
投稿者:本多
2007/02/20 02:13:25

>> これだけの分量に対して、この程度の量の間違いって言うのは >> 私のプログラムのソースコードとバグの比率と比べて >> かなりいいと思いますが。 >いやあ、プログラムのテストと同じで、現状で見つかっているポカの数が >本当のポカの数を反映しているとは限らないわけでして。 >現状のチェックがぬるいだけで、これから増えるかもしれません。 こういう場合、チェック項目が何個もあるんでしょうけど、 それを自動化できないのはプログラマとしては歯がゆい感じしません? ところで、索引とかは何かのツールで自動生成してると思うので、 第2版では直っている、もしくは自動的に直ってしまうかもしれませんが 一つ間違いを見つけました... 索引(INDEX)中の「副作用」の項目を調べると97ページと書いてありますが 実際には副作用の記述は97ページにはなくて98ページにあるようです。 どうしてこういうことが発生するのかしら?ツールにバグがあるのかな? ツールで索引作成後に文章を書き足したのでしょうか? あ、「プロシージャ」は98ページとなっていますが、99ページにあるようですね。 ずれている場所を細かく調べると、どの文章を書き足したかわかる仕組み?(^^)/
[この投稿を含むスレッドを表示] [この投稿を削除]
[119] Re:第一号かな?
投稿者:(ぱ)
2007/02/20 02:13:25

> これだけの分量に対して、この程度の量の間違いって言うのは > 私のプログラムのソースコードとバグの比率と比べて > かなりいいと思いますが。 いやあ、プログラムのテストと同じで、現状で見つかっているポカの数が 本当のポカの数を反映しているとは限らないわけでして。 現状のチェックがぬるいだけで、これから増えるかもしれません。 もちろんそうならないことを祈ってますけれど。
[この投稿を含むスレッドを表示] [この投稿を削除]
[118] Re:誤り??
投稿者:(ぱ)
2007/02/20 02:13:25

>> ! = >>となっているように見えます ... >編集さんに確認メールを出しておきました。  回答が来ました。  結論から言うと、「!が全角になっていた」そうです。  本文中で感嘆符として使う「!」は、私はいつも半角で書いていますが、 編集の際に全角に統一するらしく、その際、置換しすぎたそうです。  本多さんご指摘の図を含め、第2刷にギリギリ間に合ったそうです。  取り急ぎ、ご報告まで。
[この投稿を含むスレッドを表示] [この投稿を削除]
[117] Re:第一号かな?
投稿者:本多
2007/02/20 02:13:25

> この週末は風邪引いて寝込んでまして、反応が遅れましてすみません。 ご自愛くださいませ。 > 正誤表の方ですが、ちょうど増刷がかかり、通しチェックをしていたので、 >それで見つけたポカと合わせてページを作成しました。 これだけの分量に対して、この程度の量の間違いって言うのは 私のプログラムのソースコードとバグの比率と比べて かなりいいと思いますが。 #まぁ、それは比較対照が悪すぎとも言いますが...(^^;)。 なにしろ、書物の世界はプログラムと違って コンパイラが構文チェックしてくれませんから ほとんど机上デバッグですもんね。
[この投稿を含むスレッドを表示] [この投稿を削除]
[116] Re:誤り??
投稿者:(ぱ)@ネットカフェ
2007/02/20 02:13:25

>センスオブプログラミングの95ページに掲載されてる否定演算子(名前うろ覚え) > != >ですが、間にスペースが入って > ! = >となっているように見えます ご指摘ありがとうございます。 確かにそう見えます。私自身、「心の隅にひっかかってた」状態でした。 ただ、 ・私から編集さんに原稿を出すときは、当然電子入稿(テキストファイル)である ・私が出した元原稿では、そんなところにスペースはない ・編集さんのところでわざわざそんなところをいじることはないだろう という判断で、フォントの都合か何かかと思っていました。 でも、別ページを見ると、もっと詰まっているところもありますよね。 編集さんに確認メールを出しておきました。
[この投稿を含むスレッドを表示] [この投稿を削除]
[115] 誤り??
投稿者:ja
2007/02/20 02:13:25

センスオブプログラミングの95ページに掲載されてる否定演算子(名前うろ覚え) != ですが、間にスペースが入って ! = となっているように見えます
[この投稿を含むスレッドを表示] [この投稿を削除]
[114] Re:コピペしたでしょ?
投稿者:(ぱ)
2007/02/20 02:13:25

>初めまして。koicと申します。 はじめまして。 >スレ違いでしたらすみません。 とんでもないです。スレッドタイトルそのままです。あああ。 >「センス・オブ・プログラミング!」のページに書かれているISBNが「Java謎+落とし穴徹底解明」のISBNになっております。 修正しました。重ね重ねポカしてましてすみません(_o_)
[この投稿を含むスレッドを表示] [この投稿を削除]
[113] Re:第一号かな?
投稿者:(ぱ)
2007/02/20 02:13:25

>P66の繰り上がり計算回路の「OR回路」の記号がAND回路で書かれています。  ご指摘ありがとうございます。  この週末は風邪引いて寝込んでまして、反応が遅れましてすみません。  正誤表の方ですが、ちょうど増刷がかかり、通しチェックをしていたので、 それで見つけたポカと合わせてページを作成しました。  …が、本多さんのご指摘は、気付いてすぐ編集さんにメールを入れたのですが、 たぶん第2刷に間に合っていないと思います。残念。
[この投稿を含むスレッドを表示] [この投稿を削除]
[112] Re:コピペしたでしょ?
投稿者:koic
2007/02/20 02:13:25

初めまして。koicと申します。 スレ違いでしたらすみません。 「センス・オブ・プログラミング!」のページに書かれているISBNが「Java謎+落とし穴徹底解明」のISBNになっております。
[この投稿を含むスレッドを表示] [この投稿を削除]
[111] 第一号かな?
投稿者:本多
2007/02/20 02:13:25

P66の繰り上がり計算回路の「OR回路」の記号がAND回路で書かれています。
[この投稿を含むスレッドを表示] [この投稿を削除]
[110] Re:スタイルあれこれ
投稿者:れぷ
2007/02/20 02:13:25

こんばんは。 > それはそう思います。でもそれはお互い様であるわけで、 > プロジェクトに入ったら、「郷に従え」とは思います。 同意します。 そういうわけで私は新規作成の場合は自分のスタイルで打って コンパイル通ったら括弧の位置を直したりしてます(^-^;) 追加の場合は直してる時間がもったいないので 最初から規約に従ってコーディングしますね。 > 関数の最初のレベルはインデントしない、という規約もあった これってちょっと誤認識しそう(^-^;) 最近は4タブでエディタ横幅が広いのでネストを展開したり、 内部関数化して切り離すほうが現実的かもしれないですね。 # 実はまだ8タブ規約のプロジェクトも健在してます。 そういえば昔は変数宣言だけはインデントしないところは多かったような。 int main(void) { char hoge; int piyo; /*--- 以下略 ---*/ } 処理がどこから始まるかがパッと見で判らないからなんでしょうけど、 私はあまり好きになれませんでした。 > 組み込みとかでもまた話は違うとは思います。 私も組み込みは経験がないので何とも言えなかったり・・・ メモリを節約するなら共用体も有効かも!? # サーバ系だと怒られそうですが。 グローバル変数は今の時代なら「クラス内static変数にすれば十分」とか 色々な選択ができるので議論が広がりそうですね。 ちなみに未だに残っている80文字制限ですが、 「telnetでシェルスクリプトなどを覗くクライアントがいて折り返すと大激怒される」 という理由のあって渋々やっているプロジェクトがありました。 # もちろん彼らはコードが読めないのですが・・・
[この投稿を含むスレッドを表示] [この投稿を削除]
[109] Re:買いました。
投稿者:(ぱ)
2007/02/20 02:13:25

>あとスタイルは長年の経験で手が憶えたとおりに打ってしまうので、 >それを変えるのが嫌というのも原因かもしれませんね。実際、変えるの難しいですし。 それはそう思います。でもそれはお互い様であるわけで、 プロジェクトに入ったら、「郷に従え」とは思います。 きっと違う誰かが保守するわけですからね。 ただ、聞いた話ですが、 int main(void) { printf("hello\n"); if (a==0) { printf("world.\n"); } } みたいな感じで、関数の最初のレベルはインデントしない、という 規約もあったそうです。確かに関数の切れ目はコメントなどでわかるから 無駄にインデントを深くしないためには合理的なのかもしれませんが… でも、あんまり一般的じゃない規約はちょっと勘弁してほしい、とも思ったり。 >私もここ何年かで読み手主体で名前をつけるようになりました。(WinAPIの影響かも) WinAPIやJavaのおかげで、最近の世代では長い名前が当たり前になっているかも しれませんね。今あれを本に書くのはちょっと時代遅れだったかも。 >グローバル変数はゲーム系だと良く利用しますし、 >「オープン系ではこう」「でもゲーム系はこう」なんて限定したほうが良いのかな、と思ってます。 組み込みとかでもまた話は違うとは思います。経験がないのであまり語れませんが。 実行環境にメモリがなくても、開発環境のコンパイラが賢ければ、(インライン関数とかで) カバーできる部分もあるのではないか、と思いますが… Cだと苦しいですかね。
[この投稿を含むスレッドを表示] [この投稿を削除]
[108] ソースを読む・読ませる
投稿者:れぷ
2007/02/20 02:13:25

丁度いいタイミングで「ソースを読む」ことに関連するサイトを発見(^-^;) ソースコードを読むための技術   http://i.loveruby.net/ja/misc/readingcode.html 引用元:   http://d.hatena.ne.jp/oooooooo/20041109#p2   →言われてみると確かに、と思いました。    私は他人のソースを読むのは好きです。
[この投稿を含むスレッドを表示] [この投稿を削除]
[107] Re:買いました。
投稿者:れぷ
2007/02/20 02:13:25

> 「中括弧の位置論争」なんかはもう純粋に好みの問題でしかない そうですね。 あとスタイルは長年の経験で手が憶えたとおりに打ってしまうので、 それを変えるのが嫌というのも原因かもしれませんね。実際、変えるの難しいですし。 (変数名、関数名のつけ方にも言えますね) だから私は自分のスタイルでコーディングして、 必要最低限(要は目立ちそうなところだけ)だけ規約どおりに直してます。 > 私は、本にも書いたとおり、「読むとき」の方が重要だと考えているので >あのような記述になりましたが、異なる立場はもちろんあって良いわけで、 私もここ何年かで読み手主体で名前をつけるようになりました。(WinAPIの影響かも) 下手に省略しないので命名も意外と楽ですし、統一が取りやすい感じがします。 逆にcreateをcrtなんて略されると私は思い出すのが面倒だなと最近思ったり・・・ >立場が変われば「変数なんて1文字でいいよね」とか「グローバル変数マンセー」が >正解になることもあるかもしれません。 変数一文字は「y = a * x + b」など明らかに意味が読み取れるなら問題ないでしょうね。 ただ、数学得意な方がこぞってこれをやってしまうと 普通のプログラマが演算ライブラリを弄るのにひと苦労かも(^-^;) グローバル変数はゲーム系だと良く利用しますし、 「オープン系ではこう」「でもゲーム系はこう」なんて限定したほうが良いのかな、と思ってます。
[この投稿を含むスレッドを表示] [この投稿を削除]
[106] Re:サンプルコード
投稿者:(ぱ)
2007/02/20 02:13:25

>さっき、X-Wordのサンプルコード(Windows版)をダウンロードしてビビりました。 >xword_ver1.0\maebashi\book\kotsu\xword_ver1.0\src_dos\com\kmaebashi\xword >なんか、一般向けに配布するにしちゃ、やけに階層が深くないですか?(^^;) すみません、単純に、圧縮する際のミスでした。修正しました。 報告ありがとうございました。 ログを見ると、30人ほどの方が既にダウンロードされていたようです。 確認不足でご迷惑をおかけいたしました。
[この投稿を含むスレッドを表示] [この投稿を削除]
[105] サンプルコード
投稿者:本多
2007/02/20 02:13:25

さっき、X-Wordのサンプルコード(Windows版)をダウンロードしてビビりました。 xword_ver1.0\maebashi\book\kotsu\xword_ver1.0\src_dos\com\kmaebashi\xword なんか、一般向けに配布するにしちゃ、やけに階層が深くないですか?(^^;) (kmaebashiという名前のフォルダが2度現れて、階層がループしてるのかと疑いました) 今後、配布するコードを格納するためのフォルダとかを熟慮した結果こうなった...ということかしら? まだ、この本を手に入れてないんですけど、 「普通は、これくらい深い階層で開発するべきなんだ」とか書いてあったりして?
[この投稿を含むスレッドを表示] [この投稿を削除]
[104] Re:買いました。
投稿者:(ぱ)
2007/02/20 02:13:25

 お買い上げいただきありがとうございます。 >スタイルについては「なぜ相手がそうしているのか」を理解する気があれば、 >話は大荒れになったりしないんだろうといつも思いますけどね(^-^;) ># もしかして雑記はこのための布石とか?  そうかもしれません (^^;  雑記帳の方には、 | 最終的に「好み」や「優先度」の問題に落ち着くようなことは結論は出ませんけど  と書きましたが、スタイルに関する宗教戦争にもこういう面はあると思います。  リンク集にも入れている「「いんちき」心理学研究所」の編集後記のページで、 こんな記述があります。 http://2shin.net/neko/ | コップに水が半分あって、「もう半分しかない」と解釈するか | 「まだ半分もある」と解釈するかでどちらが正しいかを議論して | どれだけ意味があるのか。  「中括弧の位置論争」なんかはもう純粋に好みの問題でしかないと思いますが、 たとえば変数名をどれくらいの長さにするのか、ということであれば、 ソースを「書くとき」と「読むとき」のどちらに重点を置くかで 正しい対応が変わってきます。  私は、本にも書いたとおり、「読むとき」の方が重要だと考えているので あのような記述になりましたが、異なる立場はもちろんあって良いわけで、 立場が変われば「変数なんて1文字でいいよね」とか「グローバル変数マンセー」が 正解になることもあるかもしれません。
[この投稿を含むスレッドを表示] [この投稿を削除]
[103] 買いました。
投稿者:れぷ
2007/02/20 02:13:25

昔のエディタのアルゴリズム(ポインタを逆向きに繋ぎかえる)とかが 掲載されていたので興味を持って買いました。 # 恥ずかしながらその辺り知らなかったもので・・・ かなり現場寄りの要点が書かれていますね。 私も「あー、そうなんだよ。」なんて思いながら読み進めてました。 # 私もこれくらい的確な説明で指導できればなぁ(T_T) スタイルについては「なぜ相手がそうしているのか」を理解する気があれば、 話は大荒れになったりしないんだろうといつも思いますけどね(^-^;) # もしかして雑記はこのための布石とか?
[この投稿を含むスレッドを表示] [この投稿を削除]
[102] Re:コピペしたでしょ?
投稿者:(ぱ)
2007/02/20 02:13:25

>「「センス・オブ・プログラミング!」のページに戻る」ためのリンクが >「「Java謎+落とし穴徹底解明」のページに戻る」となってますよー(^.-) うわ、ご指摘ありがとうございます。修正しました。 >コピペしたでしょ? 図星です。 この本の中に、「コピペすると後で必ず後悔するよ」ってことが書いてあるのですが、 まさに身をもってそれを実践してしまいました(_o_)
[この投稿を含むスレッドを表示] [この投稿を削除]
[101] コピペしたでしょ?
投稿者:本多
2007/02/20 02:13:25

どうでもいいことですが、例題プログラム「X-Word」のページの一番下にある 「「センス・オブ・プログラミング!」のページに戻る」ためのリンクが 「「Java謎+落とし穴徹底解明」のページに戻る」となってますよー(^.-)
[この投稿を含むスレッドを表示] [この投稿を削除]
[100] Re:「宗教な話」について
投稿者:(ぱ)
2007/02/20 02:13:25

>いつも楽しく読ませていただいております。 どうもです。 >なぜなら、面倒臭い作業をしなければならない状況ほど、「思考停止」というのは人を楽 >にしてくれるからです(人間の生理というのはそういうものなんだそうです)。 ええと、プログラマのような「面倒なことを回避できる仕事」ならともかく、 回避できない仕事の人は思考停止もある程度しょうがない、ということでしょうか? うーん、仕事上のことであればそうかもしれませんが、それ以外のことについては どうでしょうか。職種が全てに影響を与えるほど、みんな心血絞って仕事してる わけじゃない気がするんですが。 あと、雑記で書いた「進化論と創造論」のような話なら、それこそ日常生活を 送るには関係ない話です。「神様が創ったんだよ」を丸呑みするよりは、 「おら知らね」の方がずっと誠実な態度だと思えるんですよね。
[この投稿を含むスレッドを表示] [この投稿を削除]
[99] 「宗教な話」について
投稿者:roy
2007/02/20 02:13:25

いつも楽しく読ませていただいております。 で、雑記の「宗教な話」を読んだ感想としては、仰ることには全面的に賛成ですけれども、 「面倒臭いことからは可能な限り逃げるのがプログラマの美徳」と仰る(ぱ)さんらしい 見解だとも思いました。 なぜなら、面倒臭い作業をしなければならない状況ほど、「思考停止」というのは人を楽 にしてくれるからです(人間の生理というのはそういうものなんだそうです)。 ちなみに、私はプログラマとは全く畑の違う職業に就いておりますが、やはり面倒臭い作 業から逃げることが許されない職業です。 もちろん、職業だけで人の思考が規定されるわけでもありませんし、私自身も(ぱ)さん の仰るとおり、思考停止に陥らないよう努力したいものですけど、それでも世の中からは 思考停止な人が消えることはないんでしょうね。
[この投稿を含むスレッドを表示] [この投稿を削除]
[98] 断酒の話
投稿者:(ぱ)
2007/02/20 02:13:25

ええと、投稿者により削除された投稿にレスするのもアレかもしれませんが。 昨年は、2月の健康診断に向けて11月末(って30日だから実質12月からですな)から 断酒を始めたわけですが、会社が変わったせいで、健康診断の時期が変わってしまいました。 どうも5月頃らしいです。 「俺はいつ断酒をはじめたらいいんだろ」と同僚に言ったら、 「今から始めればいいのでは」と言われてしまいました。もっともです。
[この投稿を含むスレッドを表示] [この投稿を削除]
[97] Re:センス・オブ・プログラミング!
投稿者:(ぱ)
2007/02/20 02:13:25

>前橋信者未満な前橋ファン、かつ半人前プログラマな僕としては、これは >是非読みたいです! ありがとうございます (_o_) >先日の「宗教な話」を深読みすると、論争を巻き起こしそうな内容ってこと >なのでしょうか?期待しています! そういう面が全くないとは言いませんが、そんなにはないだろう、と 書いた本人は思っていますです。 もちろん既刊の3冊も、そうだと思っています(きっぱり)
[この投稿を含むスレッドを表示] [この投稿を削除]
[95] センス・オブ・プログラミング!
投稿者:kei
2007/02/20 02:13:25

前橋信者未満な前橋ファン、かつ半人前プログラマな僕としては、これは 是非読みたいです! 仕事帰りにさっそく書店に寄ってみます。(って、仕事中に書き込んでますが。。) 先日の「宗教な話」を深読みすると、論争を巻き起こしそうな内容ってこと なのでしょうか?期待しています!
[この投稿を含むスレッドを表示] [この投稿を削除]
[94] Re:「信者」論
投稿者:(ぱ)
2007/02/20 02:13:25

 や、まとまらない話にご意見いただきありがとうございます。 > しょせん日本人が「私は Free Software Foundation 信者である」とか「彼は qmail 信者だから」 >といったところで、葬式のときには仏教に頼る、という程度の意味しか持たないのではないかと思うのです。  これなんですが、伝統宗教以外の世界で「○○信者」と言ったらそれはけなし言葉だろう、 つまり自分から「○○信者」と名乗ることはあるまい、ということを雑記帳には書いた のですが、書きながら、いやFSF信者だけは「自称」するかもしれない、と思ってました。 いやそのなんとなく。 > Gnu/Linux 遣いが PostgreSQL を使ったり、qmail 信者の人が DNS サーバは BIND だったり。  正しい姿勢だと思います。所詮は道具なので。 > ...で、そこが日本人の良いところだと思うのです。  これはつくづくそう思います。  葬式仏教にはそれなりの存在意義があるし、初詣だって仲間とわいわい行けば楽しい でしょうし。
[この投稿を含むスレッドを表示] [この投稿を削除]
[93] 「信者」論
投稿者:やえもん (パイプ)
2007/02/20 02:13:25

しょせん日本人が「私は Free Software Foundation 信者である」とか「彼は qmail 信者だから」 といったところで、葬式のときには仏教に頼る、という程度の意味しか持たないのではないかと思うのです。 Gnu/Linux 遣いが PostgreSQL を使ったり、qmail 信者の人が DNS サーバは BIND だったり。 「信者」という言葉の意味、英語の「洗礼を受けた人」よりもだいぶ軽いんじゃないですかね。 ...で、そこが日本人の良いところだと思うのです。 -- yaemon
[この投稿を含むスレッドを表示] [この投稿を削除]
[92] Re:メタデータの関係付けプログラムについて
投稿者:(ぱ)
2007/02/20 02:13:25

>>b)KeywordとPKeywordの区別はつけられるのか、という気がしますし、 >タグ検索のような事ができると聞いた事が有ります。例えばKeywordで検索すると ><Keyword></Keyword>の属性をメタファイルからチョイスし(複数ある場合もあります) XMLから特定の要素を抜き出したいのであれば、DOMなりSAXなり使えばよいと思います。 ただ、私が「KeywordとPKeywordの区別はつけられるのか」と書いているのは、 「PKeywordはそもそも不要では?」ということです。 既に例示されているA, Bでは、AがBへのリンクを持つだけでなく、BもAへの リンクを持つことになるのでは? つまりPKeywordは不要で、 単純に「共通のKeywordを含むメタデータへリンクする」ということに なるのではないかと思うわけです。 >>c)LOMだと、他のリソースを参照する場合はRelationという要素を使うようですし。 >LOMのRelationは,他のコンテンツ(LOMではない)を関係付ける記述です。また おっと、これは私が誤解していました。失礼しました。 >何か良い正規化の仕方は,あるでしょうか? >>a)メタデータクラスとキーワードクラスができて、 >>b)メタデータクラスはキーワードクラスを0..*で集約していて、 >>c)キーワードクラスは、そのキーワードにより関連するメタデータへの >> 参照を保持するようにする。 ここのところ、修正します。あるキーワードから、そのキーワードにより 関連するメタデータは複数ありますよね。 >>または、LOMの構造を意識するなら、 >> >>a)メタデータクラスとキーワードクラスとリレーションクラスができて、 >>b)メタデータクラスはキーワードクラスを0..*で集約していて、 >>c)メタデータクラスはリレーションクラスも0..*で集約していて、 >>d)リレーションクラスは、そのメタデータと、何らかの要因(必ずしもそれは >> キーワードの一致でなくてもよい)で関係するメタデータへの参照を >> 保持するようにする。 >これも勉強します。「0..*で集約」の意味が解っていないという寂しさ・・ 正直、この件に関する限り、特にOO用語を使う必要はないように思います。
[この投稿を含むスレッドを表示] [この投稿を削除]
[91] Re:メタデータの関係付けプログラムについて
投稿者:ねこさん
2007/02/20 02:13:25

はじめまして(ぱ)さん。有難うございます(^0^) ものすごい早い回答で嬉しいです。またご丁寧な説明有難うございます。 ならびに少々わかりづらい文面があったこと申し訳ありません。 プログラム初心者の私にとって,メタデータの関係付けプログラムを 作成するのは,色々と難解な所が有ります。・・(ToT) 頑張ります。 >a)あるデータについて、Keywordはひとつのような気はしませんし、 確かに複数ある場合があります。 >b)KeywordとPKeywordの区別はつけられるのか、という気がしますし、 タグ検索のような事ができると聞いた事が有ります。例えばKeywordで検索すると <Keyword></Keyword>の属性をメタファイルからチョイスし(複数ある場合もあります) ただし聞いた事があるだけなので,実際にみた事はありません。仮に無かった場合は, JAVAプログラムでタグから属性見つけるプログラムを作成することは,できるできるでしょうか?出来たらいいんですけど・・・ >c)LOMだと、他のリソースを参照する場合はRelationという要素を使うようですし。 LOMのRelationは,他のコンテンツ(LOMではない)を関係付ける記述です。また そのコンテンツを,LOM作成者が知っている必要があります。 私がやろうとしている事は,メタデータ同士を関連付けるプログラムでござります。 メタデータAを登録すると⇒自動的に関連付ける という感じです。つまり他のオブジェクトを意識せずに関連付ける事が出来ます。 「属性を記述することで関係を持たせる」というコンセプトで考えています。 >ひとつのメタデータには複数のキーワードがあり、 >あるメタデータから、共通するKeywordを含む(全ての?)メタデータへの >参照を持ちたいのなら、テーブルを分けて正規化するのがセオリーの >ように思うんですが、どうでしょうか。 流石でございます。確かに今のDB構造では,ダメだと思っていました。 今どのように正規化するのかも検討しています。←実はDBについても初心者なので                       本を抱えて勉強中です。                       本は,SQLでござんす。。 何か良い正規化の仕方は,あるでしょうか? Keyword属性 PKeyword属性 リンク先ID この3つは,複数ある場合があります。 >a)メタデータクラスとキーワードクラスができて、 >b)メタデータクラスはキーワードクラスを0..*で集約していて、 >c)キーワードクラスは、そのキーワードにより関連するメタデータへの > 参照を保持するようにする。 > >または、LOMの構造を意識するなら、 > >a)メタデータクラスとキーワードクラスとリレーションクラスができて、 >b)メタデータクラスはキーワードクラスを0..*で集約していて、 >c)メタデータクラスはリレーションクラスも0..*で集約していて、 >d)リレーションクラスは、そのメタデータと、何らかの要因(必ずしもそれは > キーワードの一致でなくてもよい)で関係するメタデータへの参照を > 保持するようにする。 これも勉強します。「0..*で集約」の意味が解っていないという寂しさ・・ 知識が無く申し訳ないです。。。 以下にアドレス 3aeem029@keyaki.cc.u-tokai.ac.jp
[この投稿を含むスレッドを表示] [この投稿を削除]
[90] Re:メタデータの関係付けプログラムについて
投稿者:(ぱ)
2007/02/20 02:13:25

>初めまして,ねこさんといいます。 ねこさんさん(でいいんでしょうか?) はじめまして。 >例 >Aというメタデータ内 ><Keyword>仲間</Keyword> ><PKeyword>学校</PKeyword> > >Bというメタデータ内(Aと同じく) ><Keyword>相性</Keyword> ><PKeyword>仲間</PKeyword> ええと、私はLOMについては今調べた知識しかありませんので、見当外れの ことを言ってましたらすみません。 このモデルには正直ちょっと違和感を感じます。 a)あるデータについて、Keywordはひとつのような気はしませんし、 b)KeywordとPKeywordの区別はつけられるのか、という気がしますし、 c)LOMだと、他のリソースを参照する場合はRelationという要素を使うようですし。 >AのKeyword属性とBのPKeyword属性が同じなので >AとBは関係しているようにしたいのです。 > >これをDBに記述すると >メタID メタデータ名 Keyword属性 PKeyword属性 リンク先ID > 1     A     仲間      学校      2 > 2     B     相性      仲間      Keywordがひとつでよく、KeywordとPKeywordの区別があってよく、 ひとつのメタデータが参照するメタデータもひとつでよいのなら、 このテーブルでよいのでしょうが、それでよいのでしょうか? ひとつのメタデータには複数のキーワードがあり、 あるメタデータから、共通するKeywordを含む(全ての?)メタデータへの 参照を持ちたいのなら、テーブルを分けて正規化するのがセオリーの ように思うんですが、どうでしょうか。 >またこれを実現するための >オブジェクト指向が聞けるとすごく嬉しいです。 >(これを先に教えていただけると嬉しいです) 「オブジェクト指向が聞けると」というのはちょっとよくわかりませんが (^^; a)メタデータクラスとキーワードクラスができて、 b)メタデータクラスはキーワードクラスを0..*で集約していて、 c)キーワードクラスは、そのキーワードにより関連するメタデータへの  参照を保持するようにする。 または、LOMの構造を意識するなら、 a)メタデータクラスとキーワードクラスとリレーションクラスができて、 b)メタデータクラスはキーワードクラスを0..*で集約していて、 c)メタデータクラスはリレーションクラスも0..*で集約していて、 d)リレーションクラスは、そのメタデータと、何らかの要因(必ずしもそれは  キーワードの一致でなくてもよい)で関係するメタデータへの参照を  保持するようにする。 ということになるのではないでしょうか。 ズレたこと言ってましたらすみません。
[この投稿を含むスレッドを表示] [この投稿を削除]
[89] メタデータの関係付けプログラムについて
投稿者:ねこさん
2007/02/20 02:13:25

初めまして,ねこさんといいます。 質問です。 メタデータのタグの間にある語彙と別のメタデータのタグの間にある語彙 を関係付けDBに反映するプログラムをJAVAで作成しようとしているのですが, なんせ初めてなもので何処からはじめていいのかが解りません。 またメタデータは,XML形式(LOM)です 例 Aというメタデータ内 <Keyword>仲間</Keyword> <PKeyword>学校</PKeyword> Bというメタデータ内(Aと同じく) <Keyword>相性</Keyword> <PKeyword>仲間</PKeyword> である場合,(特に脈絡は、ありませんがメタデータには,タグが        KeywrodとPKeywrodがありその間に語彙が記述されています) AのKeyword属性とBのPKeyword属性が同じなので AとBは関係しているようにしたいのです。 これをDBに記述すると メタID メタデータ名 Keyword属性 PKeyword属性 リンク先ID  1     A     仲間      学校      2  2     B     相性      仲間      このようにKeyword属性とPKeyword属性が同じメタデータがあった場合 Keyword属性の方にリンク先IDを追加する。 (リンク先IDは,Keyword属性とPKeyword属性が同じだった場合の PKeyword属性のメタIDが反映される。上記で記すと2となる) また新しくメタデータが追加された場合,同じくDBに反映させたいのです。 どのようにプログラムをすればよろしいでしょうか? またこれを実現するための オブジェクト指向が聞けるとすごく嬉しいです。 (これを先に教えていただけると嬉しいです) 長々と申し訳ありません。どうぞ宜しくお願い致します。 以下にメールを書きます 3aeem029@keyaki.cc.u-tokai.ac.jp
[この投稿を含むスレッドを表示] [この投稿を削除]
[88] Re:GLOBAL
投稿者:(ぱ)
2007/02/20 02:13:25

>>hoge.h, piyo.hが共にプライベートヘッダファイルならどこかでまとめて >>#define GLOBAL_VARIABLE_DEFINEして#includeしますし、 >そのまとめて include っつーことは globals.c とか作るということですか? >モジュール切り分け原則に反しているような気がしてなんとなくいやです。 globals.cを作るか、ということですが、 そのglobals.cが、プログラム全域のグローバル変数の定義を行う、 ということなら、Noです。 あるモジュールについて、「そのモジュールの内部だけで使う、ソースを超えた スコープを持つ変数」の定義を行うglobal.cなら、作るかもしれません。 たとえば先のcalcの例だと、電卓モジュール「CLC」内にglobals.cを 置くかもしれません(モジュールごとにディレクトリが分けられていて、 ソースファイル名の重複が許されるとして)。 モジュールをまたがったglobals.cがあるなら「モジュール切り分け 原則に反している」と私も思いますが、モジュール内でしか見ない グローバル変数のためのglobals.cなら、問題ないと思います。 # ここでモジュールは「複数の.cの集合体」と定義しています。 ## Mayerさんの「オブジェクト指向入門」に「ヘッダファイルはモジュールを ## 破壊する」ってあったけど、使い方次第だと思うんだけどなあ。 ただ、実際には、ひとつのモジュールに、そんなにたくさんプライベート ヘッダファイルがあるわけはないので、どこかのソースで代表させて終わりです。 CLCの場合はinterface.cですね。 # どこのソースで代表させるかが不明確なので(たとえ3行しかなくても)globals.c # を書くべきだ、という主張には正当性があると思います。 >組み込み系では「状態保持」のための変数は、プログラムが生きている >=電源が入っている限り、ずっと必要なので必然的に静的変数(大域変数)になっちゃいます。 >んで getter/setter も最適化の都合でインライン関数化したかったりするんです。 なるほど。アクセサを書くことまではできても、ヘッダファイルを切り分けると、 コンパイル単位が分かれてしまうからインライン展開が効かず効率が悪くなる わけですね。 Javaなんかだと、javacによるコンパイルはソース単位ですが、 JITコンパイラが実行時にソースを超えたインライン展開までやってくれたり するようです。でも組み込みじゃ難しいですよね。
[この投稿を含むスレッドを表示] [この投稿を削除]
[87] Re:GLOBAL
投稿者:774RR
2007/02/20 02:13:25

>hoge.h, piyo.hが共にプライベートヘッダファイルならどこかでまとめて >#define GLOBAL_VARIABLE_DEFINEして#includeしますし、 そのまとめて include っつーことは globals.c とか作るということですか? モジュール切り分け原則に反しているような気がしてなんとなくいやです。 >piyo.hが別モジュールのパブリックヘッダなら、グローバル変数は公開しないので >この問題は起きないんですね。 御意。ではあるのですが... 組み込み系では「状態保持」のための変数は、プログラムが生きている =電源が入っている限り、ずっと必要なので必然的に静的変数(大域変数)になっちゃいます。 んで getter/setter も最適化の都合でインライン関数化したかったりするんです。 っとなるとプライベートヘッダとパブリックヘッダの分離とか、 理想を追いかけていられない実装上の都合があったりするのです(泣)
[この投稿を含むスレッドを表示] [この投稿を削除]
[86] Re:GLOBAL
投稿者:(ぱ)
2007/02/20 02:13:25

>手間と言えば手間なんですが、グローバル変数にするような >ものは、必ず初期化する趣味なので、GLOBAL みたいな簡単な >マクロでは対処できなかったりします (たとえ 0 や NULL で >初期化する場合でも、明示的に初期化するスタイルを採って >ます)。 GLOBAL char *hoge[] #ifdef GLOBAL_VARIABLE_DEFINE = { "foo", "bar", } #endif /* GLOBAL_VARIABLE_DEFINE */ ; とか書いたこともありますけどね (^^; >また、そもそもグローバル変数なんてほとんど使わないので、 >手間的にはたいしたことないです。 別レスで書きましたけど、実は私もそうです。 別レスで挙げたCLC_Interpreterのように、構造体にまとめて malloc()で領域を確保することが多いです。 # わかりにくいですがCLC_Interpreterはポインタでして、 # こういうふうにポインタがポインタでないかのようにtypedefするのは # よろしくないなあ、と今は思っています。当時はXtとかのスタイルを見て # かっこいいと思ってしまったわけですが。 ## clc_current_interpreterのようなものを静的に持ってしまうと ## リエントラントでなくなります。当時はマルチスレッドなんて ## そうそう使わないよね、と思ってたわけですが… ## まあ、リエントラントにしたい場合も、外部のインタフェースにだけは影響を ## 与えないようにしてあるからまあ許容範囲かと。 >昔風のプログラムなら >グローバル変数にする場合も、たいていは accessor/mutator >関数でラップして見かけは関数にしてしまうことがほとんど >です。 たとえばclc_current_interpreterは関数でラップされていませんが、 CLCモジュールの外から見えることもありません。 これはモジュールの粒度をどのくらいにするかという問題だと思いますが、 「関連の強いソースの集合体としてのモジュール」内(せいぜい数千行レベル)で あれば、この程度のカプセル化の侵食は許容範囲じゃないかなあ、 と私は思っています。 もちろん最初からgetter/setterを書いたからといってさしたる手間でも ないですけれど。
[この投稿を含むスレッドを表示] [この投稿を削除]
[85] Re:GLOBAL
投稿者:(ぱ)
2007/02/20 02:13:25

>http://kmaebashi.com/programmer/pointer.html >では GLOBAL int global_variable; を推奨されているようですが、私は反対です。 うーん。 GLOBALに反対する根拠として一番大きいのは、私としては 「Cの構文をねじ曲げるようなマクロはよろしくない」という原則に 反しているからじゃないかな、と思っています。 #define BEGIN { みたいなシンタックスのレベルで改変を入れるようなマクロは確かに いろんな意味でまずいでしょう。 >hoge.c の中で >#include "hoge.h" >int global_variable; >と書いても ISO 文法上何の問題も無いので。 これはそうですね。 >もし仮に hoge.c の中で >#define GLOBAL_VARIABLE_DEFINE >#include "hoge.h" >#include "piyo.h" >とかやっちゃうと hoge piyo 両方の大域変数が定義されてしまいます。 私のヘッダファイルの切り分け方からすると、 http://kmaebashi.com/programmer/c_yota/module.html hoge.h, piyo.hが共にプライベートヘッダファイルならどこかでまとめて #define GLOBAL_VARIABLE_DEFINEして#includeしますし、 piyo.hが別モジュールのパブリックヘッダなら、グローバル変数は公開しないので この問題は起きないんですね。 >わざわざ同一の記述を複数の個所で行なうのは間違いのもとである このメリットは一応それなりの説得力はあるかと思っています。 が、私が実際これをどう使っているかというと、たとえばここで 公開しているソースでは、 http://kmaebashi.com/programmer/c_yota/calc_html/calc.html #ifdef GLOBAL_VARIABLE_DEFINE #define GLOBAL #else #define GLOBAL extern #endif GLOBAL CLC_Interpreter clc_current_interpreter; これ一個だけ… だったら必要ないじゃん、というのはもっともですね (^^;
[この投稿を含むスレッドを表示] [この投稿を削除]
[84] Re:GLOBAL
投稿者:kit
2007/02/20 02:13:25

> hoge.h の中では必ず > extern int global_variable; > と書くべきだと考えます。 僕も自分で一から書くソフトウェアでは、 GLOBAL のようなマクロは使わず、extern 宣言と、変数の 実体の定義と 2回書いてます。 手間と言えば手間なんですが、グローバル変数にするような ものは、必ず初期化する趣味なので、GLOBAL みたいな簡単な マクロでは対処できなかったりします (たとえ 0 や NULL で 初期化する場合でも、明示的に初期化するスタイルを採って ます)。 また、そもそもグローバル変数なんてほとんど使わないので、 手間的にはたいしたことないです。昔風のプログラムなら グローバル変数にする場合も、たいていは accessor/mutator 関数でラップして見かけは関数にしてしまうことがほとんど です。プロファイルとって効率が問題になるようだったら、 あとで実装をマクロに直すだけですから、最初からグローバル 変数として見せる必要があるとは思えません。逆に、最初は 変数で済んでいたものが、後になって変更時に手続きをフック したくなることは結構あります。(単に最初の仕様検討がいい 加減なだけだって話もありますが… ^^;) > globals.c とか作るのは個人的には嫌っています。 同じく globals.c みたいなものは作りません。 こういうのって、モジュール分けの原則に反してますよね。
[この投稿を含むスレッドを表示] [この投稿を削除]
[83] Re:GLOBAL
投稿者:トル
2007/02/20 02:13:25

 はじめまして、トルと申します。  追加・削除する時は、分けると2箇所を修正する必要がありますから、分けない方が一箇所で済み、何かと楽ではないですか? >globals.c とか作るのは個人的には嫌っています。  私は嫌いではありませんよ。
[この投稿を含むスレッドを表示] [この投稿を削除]
[82] GLOBAL
投稿者:774RR
2007/02/20 02:13:25

発言数が少ないようなのでネタ振りなど。 http://kmaebashi.com/programmer/pointer.html では GLOBAL int global_variable; を推奨されているようですが、私は反対です。 hoge.h の中では必ず extern int global_variable; と書くべきだと考えます。 hoge.c の中で #include "hoge.h" int global_variable; と書いても ISO 文法上何の問題も無いので。 もし仮に hoge.c の中で #define GLOBAL_VARIABLE_DEFINE #include "hoge.h" #include "piyo.h" とかやっちゃうと hoge piyo 両方の大域変数が定義されてしまいます。 #undef GLOBAL_VARIABLE_DEFINE しますか?めんどくさいです。 ヘッダ中から別ヘッダを #include しているとそもそも分離不可能だし。 globals.c とか作るのは個人的には嫌っています。 >わざわざ同一の記述を複数の個所で行なうのは間違いのもとである こと自体は御意なのです。でも、 関数(原型)宣言と関数定義を両方書く必要があるなら、 大域変数の宣言と定義を両方書いても大差ないぢゃん、とか思う今日この頃。 皆様はどうお考えですか?
[この投稿を含むスレッドを表示] [この投稿を削除]
[81] Re:ハッカーと画家
投稿者:(ぱ)
2007/02/20 02:13:25

>「ハッカーと画家」、出版されるみたいですよ。 > >http://www.shiro.dreamhost.com/scheme/wiliki/wiliki.cgi?Shiro  遅くなりましたが、情報提供ありがとうございます。  Webで公開されている文書11本に、書き下ろしを4本加えた本ですか。 その11本がどれだかわからないのですが、この中からチョイスしたものなんですかね。  http://www.paulgraham.com/articles.html  翻訳されたものがWebで読めるのかわかりませんが、読めるのだとしたら、 やっぱりどうしても購入を躊躇してしまう…
[この投稿を含むスレッドを表示] [この投稿を削除]
[80] ハッカーと画家
投稿者:kei
2007/02/20 02:13:25

こんにちは。 「ハッカーと画家」、出版されるみたいですよ。 http://www.shiro.dreamhost.com/scheme/wiliki/wiliki.cgi?Shiro ↑の、2004/9/30の箇所で査読者募集していました。
[この投稿を含むスレッドを表示] [この投稿を削除]
[78] Re:Javaコミュニティ
投稿者:(ぱ)
2007/02/20 02:13:25

>ですよねぇ。あれだけ居た人々はいったいどこに行ってしまったのでしょうか。 ># Java人口自体は増えてると思うんですが……。 2chかなあ… それとも小さなコミュニティに分散したのか… これは私も不思議に思っていますので、ご存知の方、情報をお願いいたします(_o_)
[この投稿を含むスレッドを表示] [この投稿を削除]
[77] Re:Javaコミュニティ
投稿者:iwa
2007/02/20 02:13:25

>JavaHouse自体、最近はほとんど流量がないじゃないですか。 ですよねぇ。あれだけ居た人々はいったいどこに行ってしまったのでしょうか。 # Java人口自体は増えてると思うんですが……。 # 最近はどの案件もみ~んなJava。(おいらは異端のPerl屋さん^^;) >私が知っているところだと、Java読書会BOFくらいですかねえ。 情報ありがとうございます。一度入って様子を見てみます。 >JavaMailネタでしたら、木下さんもいますし。 そーいえばJavaMailの本の存在をどっかで見かけたよーな気がするなー、と思って 「JavaMail 木下」でぐぐってみたのですが……まだちゃんと中身確認してませんが、 この本とWebページみれば質問事項一通り解決しそーな予感が(^^; ぁぅぁぅ。 # 如何にJavaについて情報収集してなかったかとゆー……。
[この投稿を含むスレッドを表示] [この投稿を削除]
[76] Re:Javaコミュニティ
投稿者:(ぱ)
2007/02/20 02:13:25

>JavaHouseに質問投げたら応答無し子さん(;_;)だったので JavaHouse自体、最近はほとんど流量がないじゃないですか。 アーカイブも復活しませんし。高木さんもすっかり投げてますよね。 というわけで >## それとも質問の仕方がマズかったのかなぁ……。 これはないと思います。 >他のところに聞こーかと思うんですが、どこか良さげな >ところありますでしょーか? 私が知っているところだと、Java読書会BOFくらいですかねえ。 http://www.iaj.or.jp/bukai/java/wg_bof/jfriends.html JavaMailネタでしたら、木下さんもいますし。
[この投稿を含むスレッドを表示] [この投稿を削除]
[75] Javaコミュニティ
投稿者:iwa
2007/02/20 02:13:25

JavaHouseに質問投げたら応答無し子さん(;_;)だったので 他のところに聞こーかと思うんですが、どこか良さげな ところありますでしょーか? # 2ch?(^^; ## それとも質問の仕方がマズかったのかなぁ……。
[この投稿を含むスレッドを表示] [この投稿を削除]
[74] Re:式の中のchar型
投稿者:tos
2007/02/20 02:13:25

>規格の6.2.1.5を見る限り、両辺の型が浮動小数点数でもlongでも >unsignedでもなければ、両オペランドがintに拡張されることになっています。 すいません。 テストする時、下記のようにpiyoに200を代入してました。 hoge = 100; piyo = 200; で、投稿する時に(手が勝手に?)piyoに100を代入して送ってしまいました。 お騒がせしてすいませんでした。 前橋さん、774RRさんありがとうございました。
[この投稿を含むスレッドを表示] [この投稿を削除]
[73] Re:式の中のchar型
投稿者:774RR
2007/02/20 02:13:25

LSI-C 86 試食版とか。 これは最近では数少ない non-ISO compliant な悪名高き処理系です。 もともと i8080 系のためのコンパイラとして開発されたため char と char の演算は char のまま行ってくれます。 っていうか README にその旨書いてあるので、理解し評価し納得した上で 使わないといけないのですが...
[この投稿を含むスレッドを表示] [この投稿を削除]
[72] Re:式の中のchar型
投稿者:(ぱ)
2007/02/20 02:13:25

>表題の件ですが、どこかで「式の中ではchar型の変数は、int型に格上げされる」 規格の6.2.1.5を見る限り、両辺の型が浮動小数点数でもlongでも unsignedでもなければ、両オペランドがintに拡張されることになっています。 >オーバーフローせず、fooに10000が代入される。というような説明を >読んだ記憶があるのですが、いまやってみるとしっかりオーバーフローしてくれます。 というわけで私のところでも試してみましたが、 bcc32とgccの両方で、しっかり10000が代入されました(gccはLinux上、 gccに-Wallを付けた以外はどちらもオプションなし)。 すみませんが、tosさんが実験された処理系とコンパイルオプション、 および再現できる完全なソースコードを教えていただけませんか? ちなみに私はこんなソースで試しました。 #include <stdio.h> int main(void) { char hoge; char piyo; int foo; hoge = 100; piyo = 100; foo = hoge * piyo; printf("foo..%d\n", foo); return 0; }
[この投稿を含むスレッドを表示] [この投稿を削除]
[71] 式の中のchar型
投稿者:tos
2007/02/20 02:13:25

皆さん、こんにちは。 表題の件ですが、どこかで「式の中ではchar型の変数は、int型に格上げされる」 というような説明を読んだような気がして、またそこで下記のような例で、 char hoge; char piyo; int foo; hoge = 100; piyo = 100; foo = hoge * piyo; オーバーフローせず、fooに10000が代入される。というような説明を 読んだ記憶があるのですが、いまやってみるとしっかりオーバーフローしてくれます。 「kmaebashi.com内」を検索して、「intより小さい整数型は、可変長引数で渡される ときには無条件でintに格上げされています。」との前橋さんの発言は見つかったのですが、上記のような説明はやはりありませんでした。 やっぱり記憶違いでしょうか? #でも、どっかで読んだような気がするのですが・・・。 #C FAQでもないみたいなんですよね。
[この投稿を含むスレッドを表示] [この投稿を削除]
[70] Re:感動
投稿者:(ぱ)
2007/02/20 02:13:25

はじめまして。 >はじめて納得がいきました。 どうもです。ほめていただき恐縮です。というかそこまでほめていただくと はずかしいです (^^; 更新が止まっておりましてすみません。 ログを見ると、「オブジェクト指向」で検索エンジンで探してうちのページに たどり着く人は結構いるようなので(検索キーワードとしては、hoge、 ポインタ、オブジェクト指向, PHP 掲示板、樹海あたりが多いです)、 ぼちぼちでも更新したいと思っているのですが。 ただ、この後、継承やインタフェースの話となると、結局普通の入門書と 同じような話になっちゃうのかなあ、という気もしています。 # あ、その前に、「PHPとMySQLで掲示板を作る」もさっさと書かないと…
[この投稿を含むスレッドを表示] [この投稿を削除]
[69] 感動
投稿者:フラグ
2007/02/20 02:13:25

オブジェクト指向がさっぱりわからず、本を読んだり掲示板をみたり いろいろなサイトをみたりしておりました。 すばらしいです!!!! はじめて納得がいきました。 本当にありがとうございます(深々
[この投稿を含むスレッドを表示] [この投稿を削除]
[68] Re:技術レベル
投稿者:(ぱ)
2007/02/20 02:13:25

> お客さんのとこに出張して 1時間くらいので、 > 大雑把にデータを整理して何かの資料を作りたいとか言う場合に > 手作業をほんのちょっと減らしたいなんて程度に使う分には > ザクザクッと作れちゃうperlみたいな形無し言語ってとても便利だと思いますが。 お客さんのとこに出張して、さくっとデータ変換しなきゃいけなかった時、 Perlはなく、AWKを使ったら、何しろ日頃使っていないものだからえらく 苦労した、という経験があります。客先じゃNUTS SHELLは落ちてないし、 当時はさくっとGoogleできる環境でもなかったですし。 やっぱり普段から使ってないといかんですねえ。
[この投稿を含むスレッドを表示] [この投稿を削除]
[67] Re:技術レベル
投稿者:kei
2007/02/20 02:13:25

> 手作業をほんのちょっと減らしたいなんて程度に使う分には > ザクザクッと作れちゃうperlみたいな形無し言語ってとても便利だと思いますが。 実は、恥ずかしい話なんですが。。 僕は、多少なりとも自信を持って使える言語がCとJavaしかなかったりします。 前橋さんの「C言語体当り学習」で、タブをスペースに変換する サンプルコードがありましたが、いつもあんな感じで、CやJavaで 作業用のツールを書いてました。 で、最近になって、他の人達が、perlやrubyを使ってサクッと作っている様子 などを見て、「ひょっとして、壮大な時間の浪費をしているのでは??」 と感じるようになったのでした。 # もちろん、決して無駄になったとは思ってませんけど。 > 色んな言語に触れて適材適所を身に付けたらベストでしょう。 > 何でもかんでもオブジェクト指向言語万歳じゃないと思うし ありがとうございます。励みになります。 よーし、がんばるぞ。
[この投稿を含むスレッドを表示] [この投稿を削除]
[66] Re:技術レベル
投稿者:kei
2007/02/20 02:13:25

>でも、PerlならPerlの作者は、長年の経験を積んだ名うてのハッカーであるわけで。 >頭のいい人なら型無し言語でもいいのかもしれません。 なるほど。。 じゃあ、僕はダメかもしれないです(笑) しかも、 >私はと言えば、「この世の中に自分より信用できないものが他にあるかーっ」 >という横島クンの叫び(うろ覚え)に共感する側の人間です。 僕の場合、「自分より信用できないものが他にあるかー」と叫びつつ、 常に自分を甘やかしてしまう人間なので、なおのこと、強い型付けの 言語の方が向いてるかもしれませんね。 でも、やはり視野を広げるために、色々な言語も知っておかなきゃ、 とも思うのです。 # そもそも、CとJavaすら使いこなしてるとは言えなかったりしますけど。。
[この投稿を含むスレッドを表示] [この投稿を削除]
[65] Re:技術レベル
投稿者:本多
2007/02/20 02:13:25

>>というのは、前橋さんの長年の経験が導き出した答えなんだなぁ、と。 >でも、PerlならPerlの作者は、長年の経験を積んだ名うてのハッカーであるわけで。 >頭のいい人なら型無し言語でもいいのかもしれません。 名うてでも頭よくもないですけど型なしでいいと思うときと言うと、 お客さんのとこに出張して 1時間くらいので、 大雑把にデータを整理して何かの資料を作りたいとか言う場合に 手作業をほんのちょっと減らしたいなんて程度に使う分には ザクザクッと作れちゃうperlみたいな形無し言語ってとても便利だと思いますが。 そういう場合って例外処理だのは、おかしかったら やりなおせばいいのでどうでもよくて、 ちょっと出力に怪しい部分があってもおかしなところだけ手で直せばいいや、 ざっくり結果出してくれやってな感じで使うにはperlって重宝しますよねぇ。 その場合でも型があっても邪魔にならないんじゃないかって言われると んー、どうなんでしょうねぇ。文字列→数値ってなことを 型を意識せずにチャキチャキして欲しいとき型は邪魔かなって思うんですけど。 必要に応じて必要な関数にだけ構造体のメンバを増やしたりとか 手軽にできるし。 #一番困るのはそんなプログラムの一人歩きだったりしますが。 しっかりと設計に時間がかけなくちゃいけない規模のプログラムや、 後でメンテナンスが必要になるようなプログラムには 当然型があるべきだというのは もちろん同意します。 っていうか、設計って型を決めることでは(暴論) っていうか、型さえキレイに決まっていたら後はなんとでもなると思うし(極論) >>今はまだ、色々な言語に触れてみたいなぁ、なんて思ってしまいます 色んな言語に触れて適材適所を身に付けたらベストでしょう。 何でもかんでもオブジェクト指向言語万歳じゃないと思うし。 10分ででっち上げなくちゃいけない場合なんかは。 ま、適材適所ってことで。
[この投稿を含むスレッドを表示] [この投稿を削除]
[64] Re:技術レベル
投稿者:(ぱ)
2007/02/20 02:13:25

>というのは、前橋さんの長年の経験が導き出した答えなんだなぁ、と。 でも、PerlならPerlの作者は、長年の経験を積んだ名うてのハッカーであるわけで。 頭のいい人なら型無し言語でもいいのかもしれません。 結局、自分自身をどこまで信用できるか、という問題のように思います。 私はと言えば、「この世の中に自分より信用できないものが他にあるかーっ」 という横島クンの叫び(うろ覚え)に共感する側の人間です。
[この投稿を含むスレッドを表示] [この投稿を削除]
[63] Re:技術レベル
投稿者:kei
2007/02/20 02:13:25

>あー懐かしいスレ。 >このスレが現役だった頃はム板も読んでたんですが、最近はさっぱりです。 このスレが現役だった頃、僕はまだ、プログラマじゃなかったです(笑) それで、思ったんですが、 >もちろん用途次第で、静的な型付けがない方がよい場合もあるかもしれません。 >でも私は嫌です。自由よりも犬の首輪が欲しい方なんで。 というのは、前橋さんの長年の経験が導き出した答えなんだなぁ、と。 それに比べると、僕はまだよちよち歩きを始めたばかりで、「あれに触れると 熱くてやけどする」だとか、「あれに近付くと噛みつかれる」だとか、 そういったことを経験してないから、いまいちわかっていないのかもしれません。 今はまだ、色々な言語に触れてみたいなぁ、なんて思ってしまいます。
[この投稿を含むスレッドを表示] [この投稿を削除]
[62] Re:続・怪しいメール
投稿者:(ぱ)
2007/02/20 02:13:25

>怪しいメールは朝4 ~ 6時に来るとムカつきますね。 >まだ眠た・・・いや、バッチでコケたかと思ってドキッとします。 うーんと。 徹夜作業中(監視中?)ですか? お疲れ様です。
[この投稿を含むスレッドを表示] [この投稿を削除]
[61] Re:技術レベル
投稿者:(ぱ)
2007/02/20 02:13:25

>>あー、正直、定年間近なプログラマ(35才定年説が正しいとして)である >>私としては、ツールの使い方などは「隣の席の若い奴に聞く」というのが >>最近常態化しています。こんなこっちゃいかんとは思うんですが。 >うーん。そうですか。 >業務以外のグループで使っているような門外漢なツールならそれは >ありだと思うんですけど、 いやもちろんツールの使い方は知らなきゃいけないと思いますが、 最近の私のボケっぷりからすると、ちと人のことを言えた義理ではないなあ、と。 >VBできます、VC++できますとプロジェクトに入ってきたものの、 >プロジェクトにファイルを追加することができなかったり、 >ライブラリやインクルードパスの設定方法が解らない+そうする意味が解らないとか、 >モジュールのプロパティ設定ウィンドウが消えて2時間悩んだ、 といっても、さすがにこれはどうかと思いますが。
[この投稿を含むスレッドを表示] [この投稿を削除]
[60] Re:技術レベル
投稿者:(ぱ)
2007/02/20 02:13:25

いろいろあって週末は死んでました。 >と思ったら、↓こんなのを見付けました。 >http://pc.2ch.net/tech/kako/986/986355498.html あー懐かしいスレ。 このスレが現役だった頃はム板も読んでたんですが、最近はさっぱりです。 >ただ、個人的に使ってみるぶんには、型安全でない言語の方が色々できて >面白そうかな、なんて思ってしまいました。 もちろん用途次第で、静的な型付けがない方がよい場合もあるかもしれません。 でも私は嫌です。自由よりも犬の首輪が欲しい方なんで。
[この投稿を含むスレッドを表示] [この投稿を削除]
[59] Re:続・怪しいメール
投稿者:れぷ
2007/02/20 02:13:25

怪しいメールは朝4 ~ 6時に来るとムカつきますね。 まだ眠た・・・いや、バッチでコケたかと思ってドキッとします。
[この投稿を含むスレッドを表示] [この投稿を削除]
[58] Re:技術レベル
投稿者:れぷ
2007/02/20 02:13:25

はじめまして。 >「不精する努力を惜しまない」人ですかねぇ。 そうですね。コンピュータが得意なことはコンピュータにやらせるのは重要ですね。 > 勤勉すぎる輩 その割に仕事を能率よくこなせるスクリプト言語は 「時間がないから」と言って勉強しなかったり・・・ # 雑談なら毎日30分以上こなせるようですが。:-p
[この投稿を含むスレッドを表示] [この投稿を削除]
[57] Re:技術レベル
投稿者:れぷ
2007/02/20 02:13:25

連日徹夜は辛いですね。特に会社が自宅になっている人とか・・・ その上でスーツなんですからこの業界ちょっとどこかおかしいです。 私は徹夜を避けるために技術を磨くとします(^-^;) >- どこでもいつでも寝れる >- 何でも食える 連日徹夜だと嫌でもこの体質になれるかもしれません。 # そんな状態のことは考えたくもない! ;-<
[この投稿を含むスレッドを表示] [この投稿を削除]
[56] Re:技術レベル
投稿者:れぷ
2007/02/20 02:13:25

>あー、正直、定年間近なプログラマ(35才定年説が正しいとして)である >私としては、ツールの使い方などは「隣の席の若い奴に聞く」というのが >最近常態化しています。こんなこっちゃいかんとは思うんですが。 うーん。そうですか。 業務以外のグループで使っているような門外漢なツールならそれはありだと思うんですけど、 VBできます、VC++できますとプロジェクトに入ってきたものの、 プロジェクトにファイルを追加することができなかったり、 ライブラリやインクルードパスの設定方法が解らない+そうする意味が解らないとか、 モジュールのプロパティ設定ウィンドウが消えて2時間悩んだ、 と言われてしまうと激しく萎えてしまいます・・・ >満足じゃないですが、最低限のレベルとしては、「そんなやり方は美しくない」 >といった意識を持っているかどうかですね。 ああ、なんとなく解るような気がします。 私も「もっと処理を端折れないかな」 「こうしたらメンテが楽かも」などと考えるようにしています。 # あとでメンテするのも自分ですしね。 >時間の都合などで美学を曲げるのはアリかもしれませんが(きっと後で後悔しますが)、 >最初からそれが通じない人がたまにいます。 お客が文句を言わないからうちの飯は「きっと」うまいんだろうと考えて 味付けを工夫しないでいるような下町の定食屋さんとでも言えば良いでしょうかね。 # 定食屋さんに恨みがあるわけではないです(^-^;) >また、ツールやミドルウェアに関して言えば、使い方を覚えるのも重要ですが、 >外部仕様から動作原理を推測する姿勢があるとよいんじゃないでしょうか。 >あるいは「俺だったらこう作る!」とか。 他人の作ったプログラムから内部動作を推測して勉強するってことですね。 ブラックボックスから明確にコードを想像するには ある程度以上は「プログラム」というものを理解していないとできない技ですし。 # ハード屋さんが解体したハードから回路を抜き取って勉強するのと一緒ですね。
[この投稿を含むスレッドを表示] [この投稿を削除]
[55] Re:技術レベル
投稿者:れぷ
2007/02/20 02:13:25

おはようございます。 >・現状に満足していない よりコンパクトに解決できるはずだ、と思うことは必要ですね。 納期があるのでそれだけに没頭できないという制約もありますので、 ある程度の妥協点は必要でしょうか。 >・仕事のレベルだけで満足していない 解決方法っていう視点では1番と同じですかね・・・? 手段を手広くするには仕事で使う以外のプログラムを見ておいて、 ある程度の見聞を広げておくことも必要なような気がしてます。 >・コードを書くことが好き 私も好きです(^-^) >・書いたコードを読んで、「きれいだ」「洗練されている」と感じさせる 大昔のAS/400などで開発をした人はカラムの記述位置に制約があったので、 「綺麗に並んでること」=「綺麗なコード」と思っている方がいますね。 # あのマシンで「確定」ボタンを押し忘れて何度泣いたことか。 それよりもパッと見で何をやっているかが判る & 解るコードのほうが 数倍も有益で綺麗で洗練されてると感じます。 >↓それから、ちょっと次元が違う話かもしれませんが、こんな記事を見付けました。 ありがとうございます。読んでみました。 感想は下のスレでまとめて。
[この投稿を含むスレッドを表示] [この投稿を削除]
[54] Re:技術レベル
投稿者:れぷ
2007/02/20 02:13:25

>>↓それから、ちょっと次元が違う話かもしれませんが、こんな記事を見付けました。 >うちのリンク集にも「ハッカーと画家」が入っていたのでした。 両方読んでみました。(前者は続きもありました。) ハッカーは好奇心がより強い人って感じですね。 でも興味のないことには思った以上に無頓着というか(^-^;) >一般にプログラミングは、なんというかこう「センス」みたいなものが必要だ、 >というのはよくわかります。画家に通じるものもあるでしょう。 問題(対象)をどう捉えて表現するか、ってところもそうですね。 そう言えばプログラムのセンスってどんなものでしょうかね!? 例えば、  ・問題切り分けのうまさ  ・コード表現の簡潔さ  ・解決方法をいくつも思いつく柔軟さ などが思いつきます。 >間違ったことならいくら綿密にやってもしょうがないですわな。 その上、間違っていることに気づかなかったりしてたら目も当てられない、と(^-^;) >でも、凄腕ハッカーだけを集めてプログラム開発が出来るなら結構ですが、 >実際にはそうはいかないので、大規模プロジェクトは(私のような)ボンクラを >前提としたものでなければならないと思います。 前橋さんがボンクラだったら私は一体・・・(T_T) ただ、働いてお金をもらってるって意識があれば、 他人におんぶに抱っこな人はそうそう見つからなくなると思います。 # コンパイルエラーの取り方すらしらないベテランPGさんもいますし・・・隣に。 ># だから型なし言語は大規模プロジェクトには不向きだと思う。 0パディングした文字列に+1されてハマったりしますね。 >ところで、凄腕ハッカーに個室を与えたら、ちゃんと仕事しますかね。 与えた仕事が終わっていればそれも良し、かもしれません。 それより会社の自販機とかエアコンをハッキングされて困ったりして。:-)
[この投稿を含むスレッドを表示] [この投稿を削除]
[53] Re:技術レベル
投稿者:kei
2007/02/20 02:13:25

>a)HTMLにプログラムを埋め込むことを最初から前提にしている。 >b)Webアプリケーション用のライブラリが大量に揃っている。 > >ということなんじゃないかと思っています。特にb)が重要。 なるほど。。確かに、そうですね。 >PHPやPerlが型あり言語だったら、もっと便利だったんじゃないかと >よく思います。 これは逆に、型安全でない言語を好んで使っている人の意見を聞いてみたい 気もします。 と思ったら、↓こんなのを見付けました。 http://pc.2ch.net/tech/kako/986/986355498.html これを読んだ限りでは、型安全でない言語擁護派の意見の方が弱いかな。。 ただ、個人的に使ってみるぶんには、型安全でない言語の方が色々できて 面白そうかな、なんて思ってしまいました。
[この投稿を含むスレッドを表示] [この投稿を削除]
[52] Re:技術レベル
投稿者:iwa
2007/02/20 02:13:25

>たまに、手でやれば30分で済むことに、スクリプトを書いたらデバッグではまって >1時間ぐらいかかっちゃうこともありますけどね (^^; わははははは(^^;;; >それでも、 > >・技術が身に付く >・もう一度似たような問題がきたときに助かる 「気軽に何度も繰り返せる」というのも強みかと。 >という点から、プログラマたるもの「不精する手間を惜しまない」人間で >ありたいものです。 御意。 # 最近、ad hocなスクリプトでも「それは蓄積すべきknow howである」 # という観点から、Subversionで管理するよーにしてみました。 # まだ目に見える効果は出てませんが……(^^;
[この投稿を含むスレッドを表示] [この投稿を削除]
[51] Re:技術レベル
投稿者:(ぱ)
2007/02/20 02:13:25

>なーんて案件を身近で見た時、「そんなのPHPで作っちゃえばいいじゃん。。」 >って思ってしまいました。やはり、言語も適材適所なんだろうなぁ、と。 PHPだと確かにWebアプリケーションを簡単に構築できますが、それは 言語のおかげなんでしょうか。 私は、PHPが楽なのは、 a)HTMLにプログラムを埋め込むことを最初から前提にしている。 b)Webアプリケーション用のライブラリが大量に揃っている。 ということなんじゃないかと思っています。特にb)が重要。 PHPやPerlが型あり言語だったら、もっと便利だったんじゃないかと よく思います。 >世間的には、「XPだ、ペアプロだ」なんて言うのが流行りになりつつあるように >思えますが、ハッカーと呼ばれる人たちには、ペアプロなんて眼中にないのかも >しれませんね。 でも実際にはプログラミングは共同作業ですからね。 個室どころか、パーティションも邪魔なことが多いと思います。
[この投稿を含むスレッドを表示] [この投稿を削除]
[50] Re:技術レベル
投稿者:(ぱ)
2007/02/20 02:13:25

>「不精する努力を惜しまない」人ですかねぇ。Excelで連番を一所懸命手で >打つとか、スクリプト言語で20行ほど書けば1分かからずに終わるよーな作業 >を1日がかりで手でやるとか、とにかく勤勉すぎる輩が多すぎて、頭かかえる >ことも少なからず……。 たまに、手でやれば30分で済むことに、スクリプトを書いたらデバッグではまって 1時間ぐらいかかっちゃうこともありますけどね (^^; それでも、 ・技術が身に付く ・もう一度似たような問題がきたときに助かる という点から、プログラマたるもの「不精する手間を惜しまない」人間で ありたいものです。 山形さんの「コンピュータのきもち」を読んでたら、 「Excelの機能で出来ないのならそこだけ手でやるとか紙に出して  貼りこむとか方法はあるじゃないかゴルァ」 的なことが書いてありましたが、本当に急いでいるときは当然そういうことも やらなければならないけれど、これはやっぱり可能な限り避けるべきだと思います。
[この投稿を含むスレッドを表示] [この投稿を削除]
[49] Re:技術レベル
投稿者:kei
2007/02/20 02:13:25

>実際にはそうはいかないので、大規模プロジェクトは(私のような)ボンクラを >前提としたものでなければならないと思います。 前橋さんがボンクラだったら。。 僕みたいなヘボはどうなってしまうんでしょう(笑) ># だから型なし言語は大規模プロジェクトには不向きだと思う。 そうですね。 でも逆に、  素人同然のプログラマをかき集めて、使い捨て同然の携帯電話向けサイトをJ2EEで構築    ↓  案の定、火を噴く なーんて案件を身近で見た時、「そんなのPHPで作っちゃえばいいじゃん。。」 って思ってしまいました。やはり、言語も適材適所なんだろうなぁ、と。 >ところで、凄腕ハッカーに個室を与えたら、ちゃんと仕事しますかね。 世間的には、「XPだ、ペアプロだ」なんて言うのが流行りになりつつあるように 思えますが、ハッカーと呼ばれる人たちには、ペアプロなんて眼中にないのかも しれませんね。
[この投稿を含むスレッドを表示] [この投稿を削除]
[48] Re:技術レベル
投稿者:iwa
2007/02/20 02:13:25

はじめまして、iwaと申します。 >じゃぁ「何ができれば満足なのさ?」というくらいの軽い意図で質問しています。 「不精する努力を惜しまない」人ですかねぇ。Excelで連番を一所懸命手で 打つとか、スクリプト言語で20行ほど書けば1分かからずに終わるよーな作業 を1日がかりで手でやるとか、とにかく勤勉すぎる輩が多すぎて、頭かかえる ことも少なからず……。
[この投稿を含むスレッドを表示] [この投稿を削除]
[47] Re:続・怪しいメール
投稿者:kit
2007/02/20 02:13:25

>さっき同じメールが来ました。 >雑記帖を読み終わった直後だったので何か少し得した気分(^^) www at なんとか.org みたいな個人宛じゃない宛先にも 届いてました。ほとんどの購読者は日本語読めないし、 そもそも日本にいないんですが... 毎度のことですが、名簿の精度が悪過ぎ。
[この投稿を含むスレッドを表示] [この投稿を削除]
[46] 続・怪しいメール
投稿者:本多
2007/02/20 02:13:25

さっき同じメールが来ました。 雑記帖を読み終わった直後だったので何か少し得した気分(^^) これを読んでドキッとするようなことしたいですねぇ(^^;) だいたい、こっちは海外だっつうの。入金に日本語使えねえって(^O^)/
[この投稿を含むスレッドを表示] [この投稿を削除]
[45] Re:技術レベル
投稿者:本多
2007/02/20 02:13:25

>>そりゃー、もちろんこんな人はいろんな意味でレベルが高い。 >「出来る奴は残業なんかしない!」って説もありますけどね。 >実際にはそんなことはないわけですが。そこに仕事が集中するから。 正直な話、できない奴に任せるくらいなら、 今の山積みの仕事を片付けた後に回されても構わないから できる奴に任せるしかないとかと言うことは非常に多いですよね。 残業が多いだけじゃ すごいのかすごくないのか判断できませんが 休日の深夜残業なんてのは できる奴しかしてない気がします。 # そういえば私 最近 残業してないなぁ # この文脈で言うところの できない奴ってことなんだなぁ...f(^^;)
[この投稿を含むスレッドを表示] [この投稿を削除]
[44] Re:技術レベル
投稿者:(ぱ)
2007/02/20 02:13:25

>そりゃー、もちろんこんな人はいろんな意味でレベルが高い。 「出来る奴は残業なんかしない!」って説もありますけどね。 実際にはそんなことはないわけですが。そこに仕事が集中するから。 残業だらけの職場は職場そのものが病んでいる、という意見もありますが、 たとえば携帯電話の開発現場なんか、どう考えてもえらいことになっていると 思います。あんなものをこんな開発期間でリリースしてたんじゃ。 残業するから偉いとは言えませんが、残業しなきゃいけない局面もある。 とかくこの世はchaoticなものです。
[この投稿を含むスレッドを表示] [この投稿を削除]
[43] Re:技術レベル
投稿者:本多
2007/02/20 02:13:25

>レベルが高い/低いと思う判断基準って皆さんは何か持っていますか? そりゃー、もちろんこんな人はいろんな意味でレベルが高い。 main() { for(;;) over_night_work(); } あとは - どこでもいつでも寝れる - 何でも食える
[この投稿を含むスレッドを表示] [この投稿を削除]
[42] Re:技術レベル
投稿者:(ぱ)
2007/02/20 02:13:25

>↓それから、ちょっと次元が違う話かもしれませんが、こんな記事を見付けました。 > >http://www.shiro.dreamhost.com/scheme/trans/gh-j.html うちのリンク集にも「ハッカーと画家」が入っていたのでした。 http://www.shiro.dreamhost.com/scheme/trans/hp-j.html 一般にプログラミングは、なんというかこう「センス」みたいなものが必要だ、 というのはよくわかります。画家に通じるものもあるでしょう。 山形浩生さんのページからの引用ですが、 http://www.post1.com/home/hiyori13/freeware/hack.html |「ハッカーは、正しいことを雑にやる。スーツどもは、まちがったことを綿密にやる」 間違ったことならいくら綿密にやってもしょうがないですわな。 でも、凄腕ハッカーだけを集めてプログラム開発が出来るなら結構ですが、 実際にはそうはいかないので、大規模プロジェクトは(私のような)ボンクラを 前提としたものでなければならないと思います。 # だから型なし言語は大規模プロジェクトには不向きだと思う。 ところで、凄腕ハッカーに個室を与えたら、ちゃんと仕事しますかね。 日がな一日趣味のプログラムを書いてたり、fjか2chあたりでバトルしてたり することになりかねない気もします。
[この投稿を含むスレッドを表示] [この投稿を削除]
[41] Re:技術レベル
投稿者:(ぱ)
2007/02/20 02:13:25

>私個人は自分の使っている言語、それからツールやミドルウェアについて >勉強をしてくれない人がちょっと困るなとは良く思ったりします。 >マニュアル斜め読みくらいだけでも開発で役立つことが多く書かれていますしね。 あー、正直、定年間近なプログラマ(35才定年説が正しいとして)である 私としては、ツールの使い方などは「隣の席の若い奴に聞く」というのが 最近常態化しています。こんなこっちゃいかんとは思うんですが。 >じゃぁ「何ができれば満足なのさ?」というくらいの軽い意図で質問しています。 満足じゃないですが、最低限のレベルとしては、「そんなやり方は美しくない」 といった意識を持っているかどうかですね。 時間の都合などで美学を曲げるのはアリかもしれませんが(きっと後で後悔しますが)、 最初からそれが通じない人がたまにいます。 また、ツールやミドルウェアに関して言えば、使い方を覚えるのも重要ですが、 外部仕様から動作原理を推測する姿勢があるとよいんじゃないでしょうか。 あるいは「俺だったらこう作る!」とか。
[この投稿を含むスレッドを表示] [この投稿を削除]
[40] Re:技術レベル
投稿者:kei
2007/02/20 02:13:25

こんばんは。 >レベルが高い/低いと思う判断基準って皆さんは何か持っていますか? 僕は技術者として、とても未熟なレベルなんで、こんなことを書くべき人間 ではないのですが。。 プログラマであれば、 ・現状に満足していない ・仕事のレベルだけで満足していない ・コードを書くことが好き ・書いたコードを読んで、「きれいだ」「洗練されている」と感じさせる が満たされていれば、その人のレベルが高い場合が多い、という気がします。 # 1番目と2番目は一緒かも。 ↓それから、ちょっと次元が違う話かもしれませんが、こんな記事を見付けました。 http://www.shiro.dreamhost.com/scheme/trans/gh-j.html
[この投稿を含むスレッドを表示] [この投稿を削除]
[39] 技術レベル
投稿者:れぷ
2007/02/20 02:13:25

こんばんは。 この業界で仕事をしていると「技術レベルの高低」で より良い仕事を優遇してもらえたり、 人間関係が良く、あるいは悪くなったりしますが、 レベルが高い/低いと思う判断基準って皆さんは何か持っていますか? 私個人は自分の使っている言語、それからツールやミドルウェアについて 勉強をしてくれない人がちょっと困るなとは良く思ったりします。 マニュアル斜め読みくらいだけでも開発で役立つことが多く書かれていますしね。 そういう私自身も結構レベル低いって 明に暗に陰口など叩かれたりもしますけどね(^-^;) # もちろん自身でレベルが高いと思っているわけではないです。 # 少なくとも主仕事が遅れて足を引っ張ることはない、程度のレベルです。 じゃぁ「何ができれば満足なのさ?」というくらいの軽い意図で質問しています。
[この投稿を含むスレッドを表示] [この投稿を削除]
[38] メンバーズホームページを完全閉鎖しました
投稿者:(ぱ)
2007/02/20 02:13:25

ごぶさたしております。 Niftyで公開していたページ http://member.nifty.ne.jp/maebashi/ 以下のコンテンツを完全に閉鎖しました。現在は、Niftyによる移転通知が表示され、 @homepageのページ http://homepage3.nifty.com/maebashi/ に飛ばされます。 @homepageのページからは結局kmaebashi.comへ飛ばされるので、2回ジャンプ させられる、というのも気に入りませんし、 今まではGoogleなどで旧ページにアクセスした場合、階層の深いところからでも kmaebashi.comの該当ページに飛べたのですが、現在はトップページに飛ばされて しまう、というのも嫌なのですが、しょうがないです。 また、閉鎖に伴い、Nifty側の裏掲示板も閉鎖しました。 過去ログは吸い上げたので、一応読むことだけは出来ます。 http://kmaebashi.com/bbs/index.html また、アクセスカウンタも使えなくなるので、TwodotsNetが提供しているものに 差し替えました。 282410あたりで移行したのですが、新しいほうのアクセスカウンタは リロードするだけで増えていくようなので、見かけのアクセス数が大幅アップしそうです。
[この投稿を含むスレッドを表示] [この投稿を削除]
[37] Re:全文引用はビジネスマナー
投稿者:れぷ
2007/02/20 02:13:25

> 今までのメールをただ転送されても...読む気が萎えますよねぇ。 > ついつい後回しにしたくなります。 ですね。 本当に自分に関係あるのか!? って見てみると全然関係なかったり・・・ > でも相手によってシグネチャかえるのメンドクサイですよね。 うーん。それはありますね。 メールテンプレート使うと若干楽かも(^-^;) > じゃないとメールの返事書くだけで一日の仕事が終わるくらいの > メールが来る人って確かにいますもの。 いつもメールボックスがパンクしている人もいますよね。 > 幸い、私はそこまで有能でないのでジックリ返事できるのですが(^O^)/ 私もジックリ読める人だったりします。 > それでも箇条書きを無視して一言返事をくれるツワモノもいますが...f(^^;) ある意味、猛者ですね(;_;)
[この投稿を含むスレッドを表示] [この投稿を削除]
[36] Re:長い関数
投稿者:れぷ
2007/02/20 02:13:25

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

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

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

># なので私は転送するときに筋が見えない場合は概要を加筆してます。 これをやってくれるか どうかで、 メールを読もうと思う気持ちが変わりますね。 今までのメールをただ転送されても...読む気が萎えますよねぇ。 ついつい後回しにしたくなります。 >シグネチャは大き目のAAがある人はちょっと疑問ですね。 >長さで言えば会社名や電話番号とか書かれている人は長いですね。 >でもこれって外部に送るeメールなら必須だと思うんですが、 >フロア内で自社の情報って必要ですかね? でも相手によってシグネチャかえるのメンドクサイですよね。 >>途中にある疑問文とか、すっ飛ばされてたりすると >>あんた、ちゃんと読んだの?って問い詰めたくなります(^^;) >それは確かにありますね。 >ただ、リーダークラスの方が会議に忙殺されていると返事もなまくらが多いかも。 忙しい人は「了解」だけで仕方ないって言うのはわかります。 じゃないとメールの返事書くだけで一日の仕事が終わるくらいの メールが来る人って確かにいますもの。 幸い、私はそこまで有能でないのでジックリ返事できるのですが(^O^)/ >私はそれが嫌なので質問事項を箇条書きにして渡してしまいます。 それでも箇条書きを無視して一言返事をくれるツワモノもいますが...f(^^;)
[この投稿を含むスレッドを表示] [この投稿を削除]
[32] Re:長い関数
投稿者:本多
2007/02/20 02:13:25

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

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

こんばんは。寝苦しくて起きてしまいました。(;_;) 全文引用は私も必須だと思っています。 だっていきなり転送されてきても話の筋が見えないですし。 # なので私は転送するときに筋が見えない場合は概要を加筆してます。 シグネチャは大き目のAAがある人はちょっと疑問ですね。 長さで言えば会社名や電話番号とか書かれている人は長いですね。 でもこれって外部に送るeメールなら必須だと思うんですが、 フロア内で自社の情報って必要ですかね? >「わかりました」とだけ書いてあるメールを見ると、 「わかりました。」と書いといてあとで同じことを聞いてくる人もいますね。:-p >途中にある疑問文とか、すっ飛ばされてたりすると >あんた、ちゃんと読んだの?って問い詰めたくなります(^^;) それは確かにありますね。 ただ、リーダークラスの方が会議に忙殺されていると返事もなまくらが多いかも。 # そのためにサブリーダーがいるはずなんですけど、 # リーダーがいないと自分で判断できないって人が多いと思うのは私だけ? 私はそれが嫌なので質問事項を箇条書きにして渡してしまいます。 全文引用で困るのはインデントされるていると 段々下のほうが凄いことになってしまうことですね。
[この投稿を含むスレッドを表示] [この投稿を削除]
[29] Re:全文引用はビジネスマナー
投稿者:(ぱ)
2007/02/20 02:13:25

>でも...そういえば、私何も考えずシグネチャーは取ってしまっていました。 >何の情報も含まないのにむやみにメールが長くなってるなぁって思って。 >発言の主が不明になるから取っちゃまずいのか。そりゃ、そうだなぁ。反省です。 どうでしょうか。メーラが引用時に誰のメールかわかるようにしてくれるのなら 削ったほうがよいとも思いますが。 例によって私の書くものは煽りモードが入ってますので (^^; シグネチャに関する記述は、 「最低でもシグネチャは削れ。他人のシグネチャが入っていると  誰のメールだかわからんじゃないか」 という主張に対する反論なんですよね。 こういう主張をする人が本当にいるわけですが、たいていのメーラで、 どこが引用部分かはわかるようになっているはずで(それがわからないなら シグネチャ以前の問題です)、引用されたシグネチャを見て、 「これは○○さんの発言なのか」などと誤解する人がいるとは考えにくいです。 >ただ、全文引用しておいて、メールの先頭に >「わかりました」とだけ書いてあるメールを見ると、 >「この人は一体、どの部分が『わかった』のだろう?」 >「本当に通じたのか?」と、不安になることって多いですよね? これはそう思います。 JavaHouseで全文引用の是非が問題になるとき、管理者の高木さんが 問題にされるのはたいていその問題でした。 http://java-house.jp/ml/archive/j-h-b/025243.html#body ただ、それこそビジネスのメールなら、読んでいようがいまいが 「わかりました」と書いてあったらわかったとみなしちゃって問題ない気も します。読まずに「わかりました」と書いた人の責任。 >途中にある疑問文とか、すっ飛ばされてたりすると >あんた、ちゃんと読んだの?って問い詰めたくなります(^^;) とはいえさすがに疑問文をすっ飛ばされちゃ困りますね。 私の場合、メールの特定の部分に意見を書きたい場合には、 メール前半でその部分を抜粋して個別に返事をつけた上で、 後ろに全文を引用しています。 今回のネタは、以前JavaHouseに送った話の使い回しなんですが、 ちょうどそこからアーカイブに上がっていないので、こっちに置いときます。 http://kmaebashi.com/zakki/javahouse.txt
[この投稿を含むスレッドを表示] [この投稿を削除]
[28] Re:長い関数
投稿者:(ぱ)
2007/02/20 02:13:25

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

確かにおっしゃる通り。 「全文引用はけしからん」的なことを書いているサイト(人)を見るたび、 様々な立場の人がいる大きな組織で仕事したことないのではないか?と 感じていました。 でも...そういえば、私何も考えずシグネチャーは取ってしまっていました。 何の情報も含まないのにむやみにメールが長くなってるなぁって思って。 発言の主が不明になるから取っちゃまずいのか。そりゃ、そうだなぁ。反省です。 ...たまに長い人いるじゃないですか10行以上の人...あ、私も10行あるや...反省 ただ、全文引用しておいて、メールの先頭に 「わかりました」とだけ書いてあるメールを見ると、 「この人は一体、どの部分が『わかった』のだろう?」 「本当に通じたのか?」と、不安になることって多いですよね? 途中にある疑問文とか、すっ飛ばされてたりすると あんた、ちゃんと読んだの?って問い詰めたくなります(^^;) ま、何事もほどほどってものがあるわけで。 メーリングリストだけでなく、この様な掲示板の類でも ほぼ全員が過去の発言に遡れるので 全文引用はいいことないですけど。
[この投稿を含むスレッドを表示] [この投稿を削除]
[26] Re:長い関数
投稿者:れぷ
2007/02/20 02:13:25

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

掲示板のスクリプトをいくつか改善しました。 ・削除機能をつけました。削除パスワードを入力しておけば、削除が可能です。  ただし、ここまでの発言に関しては(たとえパスワードを入れていても)  削除できません。 ・今まで<PRE>で囲んでいたのを、<TT>で囲むようにしました。  これならソースも崩れず改行もされます。最初からこうしときゃよかった。 不具合等ありましたらご連絡ください。
[この投稿を含むスレッドを表示] [この投稿を削除]
[24] Re:Javaについて
投稿者:(ぱ)
2007/02/20 02:13:25

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

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

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

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

こんにちは。  結局キャンセルしてしまいました。  複数のブログを置いて、毎日どこか更新、という状況になる予定(は未定) だもので、さすがにちょっと怖いな、と。  Twodotsさんの名誉のために言っておきますが、サポートの反応はよかったです。  夜中に入れておいたキャンセルにも、朝一で対応してくださいました。  いつかまた機会がありましたらまたご指導ください。  お騒がせいたしました。
[この投稿を含むスレッドを表示] [この投稿を削除]
[17] Re:こちらの住み心地はいかがですか?
投稿者:(ぱ)
2007/02/20 02:13:25

 ん? 13番さんってひょっとして… それはさておき。 >Message-Id から、スーパープラン用のサーバは Joe's Webhosting の国内高速 >大容量サーバ(server04)の再販であることがわかりました。  ああ、なるほど。  cPanelの障害報告で「国内高速3」とか出るんで、何か関係あるのかなあ、 それともサーバ名としてはこういうのってありがちなのかなあ、ぐらいに 考えていました f(^^;;  今ログインしてhostnameしたところ、 server06.joeswebhosting.net  と出ましたね。情報ありがとうございました。  まあ実のところ使ってて困んないなら問題ないわけでして、 悪名高いfc2webなんかでも結構問題なく使えていたりするのですが(誰が?)。 >   http://www.joeswebhosting.net/down.html > >出ているだけでこれだけの障害報告があります。  どうせハードウェア障害なんて起きるときは起きるのでしょうから、 これが正直な報告であれば、さして問題ないと私は思うんですがねえ。 > しかも、某掲示板レン鯖板の皆さんに言わせると(以下自粛) > ちょっと考え込んでしまっています。  とりあえず、ドメイン持ってれば移転はさほどインパクトが大きくない、 ということで、私の方は気長に構えてみます。
[この投稿を含むスレッドを表示] [この投稿を削除]
[16] Re:こちらの住み心地はいかがですか?
投稿者:ひろ
2007/02/20 02:13:25

(ぱ)さん、ご丁寧なコメントをありがとうございます。  ドメイン・スーパープラン(ドメインは持ち込み)で試用を申し込んでみました。 > これが高頻度なのかどうなのか、私は他を知らないので判断できませんが… >でもパッチは頻繁に当てて欲しいですし、私に関する限り困っていないです。  Nucleus はあっさりとインストールされ、よその業者では苦労させられた文字コード が原因と思われる文字化けも出なかったのですが、ブログのアイテムにコメントが 付いたときに送られてくる通知メールをテストし、届いたメールのヘッダを見ると、 Message-Id から、スーパープラン用のサーバは Joe's Webhosting の国内高速 大容量サーバ(server04)の再販であることがわかりました。    http://www.joeswebhosting.net/down.html 出ているだけでこれだけの障害報告があります。  しかも、某掲示板レン鯖板の皆さんに言わせると(以下自粛)  ちょっと考え込んでしまっています。
[この投稿を含むスレッドを表示] [この投稿を削除]
[15] Re:こちらの住み心地はいかがですか?
投稿者:(ぱ)
2007/02/20 02:13:25

ひろさん、はじめまして。 > ちなみに私も2ちゃんねるのレンタルサーバ板にはいきましたが、おっしゃるとおり >読めば読むほど訳がわかりませんでした(笑)  「嘘を嘘と見抜ける人でないと~」とは言いますけど、ありゃ嘘を嘘と見抜く コストがメリットを上回っているというか、玉石混交とも言うけどいくらなんでも 石が多すぎでまるで役に立たないというか (^^; > おふざけもあるのですが、教育関係の堅いコンテンツを実名で公開しているサイト >なので、滅多に落ちないこと、サポートが真面目なこと(まぁ落ちなければそれほど >サポートの厄介になることもないのですが)が重要なのですが、こちらはいかがで >しょうか。  現状で特に不満はないです。  以前、「ああ、落ちてるなあ」と思ったときは、cPanelXの方に停止の お知らせが出ていましたし。  ひろさんは既に試用されているようですから、似たような情報を見ることが できるのかもしれませんが、最近お知らせにある限りの停止情報は以下の通りです。  7/14 サーバソフトウェア更新作業  6/18 一部ユーザのCGIスクリプト暴走により50分間サービス停止  6/13 サーバソフトウェア更新作業  6/6 サーバソフトウェア更新作業  6/4 サーバ再起動  これが高頻度なのかどうなのか、私は他を知らないので判断できませんが… でもパッチは頻繁に当てて欲しいですし、私に関する限り困っていないです。 ただし、私自身が自分のサイトをそれほど頻繁に見るわけでもないので (更新されてないことは自分が一番よく知っているわけで(^^;)、知らないうちに 落ちていた、ということはあるかもしれません。  うちのページを見ている方で、「えーっ! よく死んでるじゃん」と思われる方は 教えてくださいませ(_o_)  また、最近、MySQLのconnectionが占有されて、この掲示板が見られないことが 数度ありましたが、これはユーザのスクリプトや使用状況次第ですから、 ちょっとサーバ業者を責めるのは酷という気がします。 # ちなみに一時期MySQLが使えなかったことについては、事後報告もありませんでした。 # このへんちょっとサービス悪い? これまた他を知らないのでなんとも言えませんが。
[この投稿を含むスレッドを表示] [この投稿を削除]
[14] Re:こちらの住み心地はいかがですか?
投稿者:ひろ
2007/02/20 02:13:25

自己レスで恐縮です。 > その他(どうせ新規に借りるなら Movable Type でなく複数人のブログを動かし >やすい Nucleus を UTF-8 で使いたい等)、TwodotsNet の方にも直接問い合わせは >送っているのですが、  返信が来まして、UTF-8可、Nucleus の検索最適化のための機能(FancyURL)に必要な .htaccess による設定変更や mod_rewrite も設定上可の筈、だそうです。  とりあえず試用してみますが、引き続きご助言いただけましたら幸いです。
[この投稿を含むスレッドを表示] [この投稿を削除]
[13] こちらの住み心地はいかがですか?
投稿者:ひろ
2007/02/20 02:13:25

 はじめて書き込ませていただきます。プログラミングに関係のない話ですみません。  現在サイトを置いているプロバイダが、手狭なのとperlが古く Movable Type が 置けないため、移転しようとレンタルサーバを探しているうちに TwodotsNet に 行き当たり、ドメイン-プラスかスーパーのレンタルを検討しています。  ネットを検索しても、悪口こそ見当たらなかったものの、ユーザーが少ないせいか 誉めている方も発見できず、いろいろ検索しているうちにこちらの2月14日の雑記に たどりつきました。  ちなみに私も2ちゃんねるのレンタルサーバ板にはいきましたが、おっしゃるとおり 読めば読むほど訳がわかりませんでした(笑)  おふざけもあるのですが、教育関係の堅いコンテンツを実名で公開しているサイト なので、滅多に落ちないこと、サポートが真面目なこと(まぁ落ちなければそれほど サポートの厄介になることもないのですが)が重要なのですが、こちらはいかがで しょうか。  その他(どうせ新規に借りるなら Movable Type でなく複数人のブログを動かし やすい Nucleus を UTF-8 で使いたい等)、TwodotsNet の方にも直接問い合わせは 送っているのですが、ユーザーとしてのこちらの印象をお聞かせ願えれば幸いです。  よろしくご助言のほどお願いいたします。
[この投稿を含むスレッドを表示] [この投稿を削除]
[12] Re:shortとかfloatとか
投稿者:(ぱ)
2007/02/20 02:13:25

いったん返信を書いたのですが、preview画面で投稿された気になってたらしい… 掲示板作った本人が何やってるんだか。 >ただ金融システムの情報系だとlong doubleなどは >積極的に利用したいので必要に応じて、ですね。 ># と、一応言っておきますです。観念を固定しちゃう方もいるので・・・ 確かにそうですね。迂闊でした。失礼しました。 私は金融系のシステムには直接関わったことはないのですが、 たとえばCADなんかだとすごく精度が必要な気がしますが、全長5mの車を 1/100mm単位で刻んだとしてたかだか50万、金融系のシステムの方がずっと 高い精度が必要だ、ということを某所で聞いて納得した記憶があります。 32bit shortじゃちょっとした会社の年間売り上げも入りませんもんね。 >>Javaだと、doubleをfloatに代入できず、かつ実数のリテラルがdoubleなので、 >>floatを使うのはさらに大変です。 >あ、double → floatはダメなんですか。 >ってことは↓ができないんですね。 > >float hoge = 1.0; です。これは float hoge = 1.0f; のように書く必要があります。 ライブラリなんかがfloatを要求してると大変です。 >やっぱり桁落ちしてしまうからなんでしょうか? だと思います。 黙って代入するよりは、妥当な仕様だろうとは思うんですが。
[この投稿を含むスレッドを表示] [この投稿を削除]
[11] Re:shortとかfloatとか
投稿者:れぷ
2007/02/20 02:13:25

>Subjectかえました。 あ・・・気がつきませんですいません。 >ていうかよくおぼえてますね (^^; 私はロクでもないことのほうが良く憶えてたりします(^-^;) >しかし、私も「getchar()の戻り値はなぜintなんだろう?」とか >思ったことはあります。 あ、これは私も思いました。 EOFの理解に結構悩んだ記憶があります。 >結局のところ、Cでは、 > --- 中略 --- >と言ってしまってよいと思っています。 そうですね。それで困るプログラムは意外に少ないですし。 # 今はsizeof int = sizeof longも多いのでなおさら!? ただ金融システムの情報系だとlong doubleなどは 積極的に利用したいので必要に応じて、ですね。 # と、一応言っておきますです。観念を固定しちゃう方もいるので・・・ >Javaだと、doubleをfloatに代入できず、かつ実数のリテラルがdoubleなので、 >floatを使うのはさらに大変です。 あ、double → floatはダメなんですか。 ってことは↓ができないんですね。 float hoge = 1.0; やっぱり桁落ちしてしまうからなんでしょうか?
[この投稿を含むスレッドを表示] [この投稿を削除]
[10] Re:掲示板を移行しました
投稿者:(ぱ)
2007/02/20 02:13:25

どうもです。 この掲示板の仕様を決めるにあたって、apjさんとこの掲示板をかなり参考に させていただきました (_o_) >を,ウチより洗練されてますね。素晴らしい。 恐縮です (^^; >スレッドごとの表示とか,ウチの師匠にも言われてるんだけど >忙しいから放置していた。 スレッドごとの表示というのが「このレスを含むスレッドを表示」の ことでしたら、apjさんとこの掲示板でも「このメッセージにコメントする」で 実現されていると思うのですが… もっとも投稿する気もないのにアレを押すのは勇気が要るかもしれません。 わけわかんない人がいるといけないので貼っておきますが、 apjさんとこの掲示板はこちらです。 http://atom11.phys.ocha.ac.jp/bbs01/list.php
[この投稿を含むスレッドを表示] [この投稿を削除]
[9] shortとかfloatとか
投稿者:(ぱ)
2007/02/20 02:13:25

Subjectかえました。 >C言語を憶えたての頃を思い直してみると >ファイルダンプのときにchar型のデータを%02Xで表示すると >確かに符号拡張されてました。(処理系依存ですけど。) ># ・・・答え聞いてから思い出すなって感じですね(;_;) ていうかよくおぼえてますね (^^; しかし、私も「getchar()の戻り値はなぜintなんだろう?」とか 思ったことはあります。 >shortとfloatは表示コストが余分にかかるんですね。 >最近ではほとんど利用しない型なのですけど・・・ 結局のところ、Cでは、 ・整数型にはintを使え。 ・実数型にはdoubleを使え。 ・charは配列としてだけ使え。 と言ってしまってよいと思っています。 Javaだと、doubleをfloatに代入できず、かつ実数のリテラルがdoubleなので、 floatを使うのはさらに大変です。
[この投稿を含むスレッドを表示] [この投稿を削除]
[8] Re:祝! 新掲示板移行
投稿者:れぷ
2007/02/20 02:13:25

>あります。intより小さい整数型は、可変長引数で渡されるときには無条件で >intに格上げされています。 なるほどー。そういう仕様になっていたのですね。 ご教授ありがとうございます。 C言語を憶えたての頃を思い直してみると ファイルダンプのときにchar型のデータを%02Xで表示すると 確かに符号拡張されてました。(処理系依存ですけど。) # ・・・答え聞いてから思い出すなって感じですね(;_;) >だそうです。%hにでっかい値を渡しても、表示の前に小さくされる shortとfloatは表示コストが余分にかかるんですね。 最近ではほとんど利用しない型なのですけど・・・
[この投稿を含むスレッドを表示] [この投稿を削除]
[7] さっそく・・・
投稿者:apj
2007/02/20 02:13:25

改行入れるの忘れた。 仕様よく嫁>自分。
[この投稿を含むスレッドを表示] [この投稿を削除]
[6] Re:掲示板を移行しました
投稿者:apj
2007/02/20 02:13:25

>仕様について簡単に説明します。 を,ウチより洗練されてますね。素晴らしい。スレッドごとの表示とか,ウチの師匠にも言われてるんだけど忙しいから放置していた。今度は私がここの仕様を参考にさせてもらいまつ。
[この投稿を含むスレッドを表示] [この投稿を削除]
[5] Re:祝! 新掲示板移行
投稿者:(ぱ)
2007/02/20 02:13:25

>そういえば、先日の本多さんの絡みの話になりますが、 >floatをprintf()に渡すと実引数double型へ変換されますけど、 >整数型のほうはこのような格上げってないのでしょうか? あります。intより小さい整数型は、可変長引数で渡されるときには無条件で intに格上げされています。 ># 変換指定子がhd, ld, lldなどフルにサポートされているからかも・・・ じゃあ変換指定子のhはなんなのか、ということですけど、規格によれば | 実引数は汎整数拡張に伴って拡張されている。その値を表示する前に | short int型又はunsigned short int型に戻す変換を行う。 だそうです。%hにでっかい値を渡しても、表示の前に小さくされる、ということですね。
[この投稿を含むスレッドを表示] [この投稿を削除]
[4] Re:祝! 新掲示板移行
投稿者:れぷ
2007/02/20 02:13:25

>この「_no」は文字化けか何かかと思って一瞬焦ってしまいました。 >_| ̄|○ とか orz とかと同系列の1行AAですね。 ギャー。すいません。 変数_noのようなコードの断片みたいに見えますね。 最近、マイブーム(死語)なのですよコレ。 >printfは自作インタプリタ向けに(微妙にサブセットの)実装を書いたことも >ありますし、仕様は何度も読んでいるはずですが、フルに機能を使うことは >まずないし、仕様だけ読んでも忘れるしで、私もやっぱり忘れてました(^^; 自作インタプリタって凄いですね。 私だったら構文解析ルーチン作るだけで挫折しそうです。 忘れている、といえばshort型の変換指定子%hdとかもそうでした。 そういえば、先日の本多さんの絡みの話になりますが、 floatをprintf()に渡すと実引数double型へ変換されますけど、 整数型のほうはこのような格上げってないのでしょうか? # 変換指定子がhd, ld, lldなどフルにサポートされているからかも・・・ >x(またはX)に対する指定は、(ゼロでないときに限り)0x(または0X)を >付け加えるってだけで、あんまり役に立つとも思えませんし... そうですね。必要なら自分で書いても面倒ではないですね。
[この投稿を含むスレッドを表示] [この投稿を削除]
[3] Re:祝! 新掲示板移行
投稿者:(ぱ)
2007/02/20 02:13:25

>というわけで早速テストです。 どうもです。 >変換指定子に「#」があるのを知りませんでした。_no この「_no」は文字化けか何かかと思って一瞬焦ってしまいました。 _| ̄|○ とか orz とかと同系列の1行AAですね。 > printf("%#010x\n", hoge); printfは自作インタプリタ向けに(微妙にサブセットの)実装を書いたことも ありますし、仕様は何度も読んでいるはずですが、フルに機能を使うことは まずないし、仕様だけ読んでも忘れるしで、私もやっぱり忘れてました(^^; x(またはX)に対する指定は、(ゼロでないときに限り)0x(または0X)を 付け加えるってだけで、あんまり役に立つとも思えませんし...
[この投稿を含むスレッドを表示] [この投稿を削除]
[2] 祝! 新掲示板移行
投稿者:れぷ
2007/02/20 02:13:25

というわけで早速テストです。 変換指定子に「#」があるのを知りませんでした。_no #include <stdio.h> int main(void) { int hoge = 4095; printf("%#010x\n", hoge); return 0; } ただ、「0x」の大文字小文字変換もそのうしろの 変換指定子「x」依存なのがちょっと嫌かも。 もっとも普段からリテラルで0X00000FFFなどと書かないから 見慣れないというだけでしょうが・・・
[この投稿を含むスレッドを表示] [この投稿を削除]
[1] Re:掲示板を移行しました
投稿者:(ぱ)
2007/02/20 02:13:25

仕様について簡単に説明します。 ・発言内容は全て<pre>で囲まれます。ソースリストを載せるのに便利にするためです。  適当な位置で改行を入れてください。 ・でもやっぱり改行を入れ忘れる人もいるので、プレビュー表示をつけました。  確認してから「送信」をクリックしてください。 ・タグは全無効です。<font color="red">ほらね</font> ・クリッカブルURLの機能があります。  http://kmaebashi.com  タグは無効なので<a>タグは書けません。 ・現状では削除機能がないので削除用パスワードは単なるお飾りです。 ・スレッド表示時、スレッドトップの「▼」をクリックすると、そのスレッドの  発言を一覧表示します。 ・一画面あたりの表示数は以下の通りです。  - 日付順表示…30  - 日付順インデックス…50  - スレッド表示…20スレッド
[この投稿を含むスレッドを表示] [この投稿を削除]
[0] 掲示板を移行しました
投稿者:(ぱ)
2007/02/20 02:13:25

てなわけで、書き初めです。
[この投稿を含むスレッドを表示] [この投稿を削除]