おまいら!今日からDelphi言語を学んでいくぞー!02
今やってるお題は?
ヒント:
例外発生
↓
例外キャッチ、
例外投げる
↓
例外キャッチ
>>3 今の実力でそれぞれの相談室があるのに、
このスレの存在意義とは一体何でしょうか?
漏れは切磋琢磨だと思っています。事実前スレは「道場破り」ぽくなっていました。
漏れはスクリプト言語では今までそれなりにコードを書いてきましたが、
それはアルゴリズムだけ考えていれば動くものが書けたからなんですが、
アルゴリズムが頭に思い浮かべば、半分は終わったと思っています。
後は、書こうと思っている言語の仕様でそのアルゴリズムを実装していくだけと。
実際、漏れはそのくらいの状態でも、取り敢えずはDelphiをいじることが出来ています。
という訳で、次に初心者が知っておくと楽が出来る情報です。
6 :
デフォルトの名無しさん:2005/11/15(火) 21:07:17
デルファイってまだあったんだ。
前スレ例外処理の答えお願い
果たして、コードを書かなくてうまくなるか?
それについては、半分は正解で半分は間違いだと思っています。
上でアルゴリズムだけ判れば、半分は終わったと書きましたが、
プログラムが書けないと思っている理由の大部分は、まだそれに慣れていないからです。
自分のやりたいと思うことを、日本語でもいいから書き下せればそれが仮に間違っていたとしても、
後は経験を積んで行って補正していくだけです。これは欠かせないことです。これをしないと絶対に上手くなりません。
「もし~ならば」という構文の記法も言語の処理系によっても微妙に違っていますが、それも慣れです。
例えば、Delphiの統合環境エディターIDEでは、^Jを押すことで構文メニューが出てきたりしますが、
これを使えば、「IF文の構文って、ええとどんなだったっけ?」という記憶の無駄を省くことが出来ます。
これは「思考の経済化」であり、「IDEを使えば」純粋にアルゴリズムだけを考えることに専念できます。
その意味で漏れは「レベルアップできる」と書いたのです。言語に普遍なのは、仕様ではなくアルゴリズムだから。
邪道かもしれませんが、初心者にとって最も大事なのは、「どれだけ楽をしてプログラムを書くか」であり、
足りない知識を補う術が初めから用意されているのなら、それを積極的に使ってまずは慣れようというのが
漏れの主張です。
それに慣れたら、窮屈な?統合環境を離れて好きなエディターでバリバリ書いてもいいと思うのです。
でも、今はGUI要素があるから、離れるのは得策じゃないかもしれないなあ。コンソールアプリじゃない限り。
半端者ほど能書きが長く能書きが長いほど含蓄に乏しい件
>>6 情報有難うございました。手持ちのものをそのまま貼ってしまいました。orz
>>10 わざわざご意見いただき、有難うございました。
>>8 答えいっちゃっていいの?
>4がヒントだよ。
>>11-13 こういう情報はDelWikiに投稿すると良いぞ。
2chだとdat落ちしたら見れなくなるからね。
まず、オーナー様にお伺いをたてないと削除されるかもね
>>16 これ殆ど、そこに載っているので意味がないです。
その中で初心者が知ることで楽が出来る情報をまとめただけ。
>>17 だから、書きません・・・。
>>11 更に支援カキコ。前スレにですが、IDEの設定の話を書きました。
01.自分に合った設定をしよう。:
ttp://ww3.tiki.ne.jp/~torigoe/01.html > これが 0とO、 1とl、 ;と:、 .と, あたりの区別が一番しやすい。
> あと横幅が比較的狭いので画面が広く使える。
フォント選択の話が書いてあるのですが、ここで教えていただいた通り、
ちょっと小さめになりますが、「Terminalの10ポイント」がお勧めのようです。
この辺りは全くの好みなので、自分が書きやすいようなフォントを選びましょう。
>>19 ttp://kakinotane.s7.xrea.com/delphi/faq/f004.htmlから抜粋になりますが、引用しておきます。
●IDEの格言
1) アプリケーションをリリースするときは、map ファイルを作るのを忘れずに。
2) たくさんウィンドウを開いているときは ALT+0 を活用せよ。
3) コンパイルオプションは Ctrl+O+O でソースに埋め込むと
IDE のコンパイルオプションの設定に左右されないソースが作れる。
4) デフォルトのコンパイルオプションの変更はトラブルの元。
5) Delphi をインストールしたら
「環境オプション]→[設定]→[自動保存の設定]→[エディタファイル]
をチェックしよう。
改行制限、字数制限もあるので格言の部分だけを取り上げました。
説明は実際に原文を読んでみてください。
> これをチェックしないと、デバッグ中に IDE がハングすると
> 何もかも失います。
あちこちを調べているうちにこれを知ったので、早速この設定をオンにしました。
まだの人はすぐにこの設定を入れておきましょう。大事なソース?を失って悲しむ前に。
>>20 まだまだこの中身がよくわからないことも多いのですが、
残りの部分も内容でまとめて引用しておきます。きっと続けてでしょうね。
●Delphi の格言
1) リソースの取得と解放は try~finally~end を使うべし。
2) Assert を使いまくれ。
3) メソッドを override するとき、override キーワードが抜けていないか常にチェックせよ。
4) Except で例外を処理するとき、raise で例外を再生成する必要がないか常にチェックせよ。
●Object Pascal の格言
5) public で 非virtual なメソッドは極力再定義するな。
6) オブジェクトが上位から継承する仮想メソッドを呼び出すときは
7) デストラクタは、必ず destroy という名にして、必ず仮想メソッドにする。
8) コンストラクタは protected にしてはいけない
解説は同じところです。
ttp://kakinotane.s7.xrea.com/delphi/faq/f004.html
>>21 > 6) オブジェクトが上位から継承する仮想メソッドを呼び出すときは
は抜けてしまいました。正確には以下です。
6) オブジェクトが上位から継承する仮想メソッドを呼び出すときは
inherited をつけて呼び出すか、そうしないかをよく考えよ。
>>21 ●コンポーネントの格言
1) OnExit イベントでダイアログボックスを表示するな。
フォーカスが移動することを示すイベントの中でさらに
フォーカスの移動を引き起こし、かつイベントハンドラを
途中で止めるといろいろなトラブルが起きます。
モーダルダイアログを表示しない別の表示法を
使うか、PostMessage でイベントを遅延させるなどの
処置をしたほうがよいです。
2) コンポーネントの Loaded メソッドが呼ばれることを
仮定したコンポーネントを作ってはいけない。
コンポーネントを実行時に作成するときは Loaded
メソッドは呼ばれないからです。
短いみたいなので、そのまま貼っておきます。
引用元は、
ttp://kakinotane.s7.xrea.com/delphi/faq/f004.html
>>25 続きです。
似たようなことを何度もやっていくのも次第に飽きてくるので、説明を読んで自分でコードを考えながらで。
ここで大事なのは、「その時思いついたことはコメントで残しながら」ということです。そこでコメントの付け方を。
単に頭に「//」を付ければ、そこはただのコメントになるので読んでいて気になったことはどんどん書きましょう。
そして、後でその疑問を突き詰めていけば、更なる学習の大きな推進剤になると思います。
と、偉そうに書いていても、漏れはこれを当時やらずにいました。それが今となっては大きな後悔です・・・。
一度忘れてしまった大事なことを思い出すのは本当に大変なことですから。
そして最後に、体系立てて学ぶために以下のサイトでしっかりと学んで行きましょう。
とまたまた偉そうに書いていても、漏れもまだこの途上です。まだまだこの一部しか読んでいません。
・Seventh Delphi(新旧のDelphi 入門)
ttp://kakinotane.s7.xrea.com/ ・Delphi入門(Web Frontier)
ttp://www.w-frontier.com/delphi/ 下の方は一応は流しましたが、よく読むと色々と勉強になることが書いてあります。
今改めて眺めてみると、なるほどなあと思うことが多いです。この駄文が少しでも参考になれば幸いです。
さて、前スレに比べて随分過疎ってしまいましたが、
漏れが知った便利な?テクニックを紹介していきましょうか。
と言っても、単なる受け売りなだけですが・・・。
●ツールウインドウのドッキング
ttp://www.kanazawa-net.ne.jp/~pmansato/IDE_Tips.htm#ToolDocking このページを読むまでは、この機能を大変鬱陶しいと思うだけでしたが、
これを読んで、早速ツールウインドウのドッキング、勝手に命名「3体合体」
(オブジェクト インスペクタ・オブジェクト ツリー,・プロジェクト マネージャ)してみました。
おお!見通しいいぜ! おや?GExpertsのGrep Resultsも合体できるぞ・・・。
上に付くといいのに、下なのか・・。でも、左右と下に合体できることが確認できました。
勿論、4体合体も出来るので、お好きな方でどうぞ。
>>15 ギブアップです
もうどこが悪いとか何を調べたらいいのかもわからんです
>>30 「質問」と「道場破り」はすぐにわかるように
【質問】を頭にすると質問で、道場破りは【お題】を頭にという感じでお願いしますね。
今わかっているのは、例外処理対応をネストして2回使うヒントが出ています。
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils, Classes;
const
filename='test.txt';
var
sum: double;
fp: TextFile;
str: string;
begin
sum:=0;
try
try
AssignFile(fp, filename);
Reset(fp);
try
while (not Eof(fp)) do
begin
Readln(fp, str);
sum:=sum+StrToFloatDef(str, 0);
コードはこれで全部かな? コメントを付けて書いてみると、頭がすっきりするかもしれません。
>>38 がーん!見事に載っていますね・・・。
ご指摘に感謝いたします。_| ̄|○
DelWikiなんかには頼りませんよ。
下手に書き写して著作権がどうのと難癖つけられないように
すべて自力で検索していきます。
>>40 要不要論と色々な経緯を辿ったこのスレだけど、
こうやって熱い人に支えられているなら、もう大丈夫かな。
漏れの場合は知らなかっただけだけど、不思議と重なるなあ。
ぐぐる場合、利用率が大きい順だから既に知られているんだろうね。
>>41 ええ、ここに紹介しているのは情報提供の積りなので
もし抜けがあるなら、これからはそっちの方にも追加していきますね。
>>43 > これからはそっちの方にも追加していきますね。
よろしく。
>>44 はい。折角、道場破りネタが帰ってきたのに、続かないなあー・・・。
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils, Classes;
const
filename='test.txt';
var
sum: double;
fp: TextFile;
str: string;
begin
sum:=0;
try
try
AssignFile(fp, filename);
Reset(fp);
try
while (not Eof(fp)) do
begin
Readln(fp, str);
sum:=sum+StrToFloatDef(str, 0);
end;
writeln(FloatToStr(sum));
finally
CloseFile(fp);
end;
except
on E: EInOutError do
begin
case (E.ErrorCode) of
2:
begin
writeln(filename);
raise
end;
else
begin
raise Exception.Create('読み込めねー');
end;
end;
end;
end;
except
on E: Exception do Writeln(E.Message);
end;
end.
ヒントをいただいたのですがまだわかりません
今やってることをまとめました
・ResetやReadlnで発生した例外をexceptで処理する
・発生する例外はどちらもEInOutErrorなので
ErrorCodeで例外の内容を判断
・ErrorCodeが2(ファイルを開けない)の場合はwriteln(filename);のあと
例外を再生成して外側のexceptに同じ例外を渡す
・ErrorCodeが2以外の場合はException.Create('読み込めねー');を
外側のExceptに渡す
ファイルがない場合や読み込めない場合を試したところ問題の通り動いています
どこが悪いのか検討もつかず、とっかかりが無い状態です
言語ガイドやKodersで色々なソースを読んでるのですがどうにもわかりません
ヒントの追加をお願いします
//EOF
以上が前スレまでの状況です
>>50 道場破り乙です。漏れは暫く引っ込んでいますので。
じっくりと納得するまで、またーりとどうぞ。そのためにこのスレはまた続いたので。
>>50 これ以上ヒントをだすとなると難しい・・・
どなたかー代わりにヒントをー
>>52 もう一度処理をわかりやすくするために、仕様と要件を整理したらいいかなと思いました。
フローチャートを書くと、後はそれに従ってコーディングすれば、プログラムは書けるはずですよね。
と言っても、漏れは書けないんだけど。状態遷移図も書くと違う気もします。
前スレより問題文を転載
//ここから問題文
次は、例外処理の締めとしてRaiseを使おう。
ファイルが開けないときは
writeln(filename)した後、今の例外処理(Writeln(E.Message);)
を実行するように、
また、読み込みエラーのときは、E.Messageの内容を
"読み込めねー"
に変更してみてみてくれ。どちらも Raise を使えば簡単にできる。
//ここまで問題文
ちなみにこのプログラムに手を加えろという問題です
const
filename='test.txt';
var
sum: double;
fp: TextFile;
str: string;
begin
sum:=0;
try
AssignFile(fp, filename);
Reset(fp);
try
while (not Eof(fp)) do
begin
Readln(fp, str);
sum:=sum+StrToFloatDef(str, 0);
end;
writeln(FloatToStr(sum));
finally
CloseFile(fp);
end;
except
on E: Exception do Writeln(E.Message);
end;
end.
DelWikiにここに貼った情報を反映したよ。
>>56 978 名前:デフォルトの名無しさん[sage] 投稿日:2005/11/13(日) 09:02:05
>>968 やはり例外処理は初心者にとって第一の壁みたいだな。
でも完全に理解すればほんとプログラムの質が上がるのでがんばれ。
ヒント:
try
try
except
end;
except
end;
>57
乙であります
except二回だけだとCloseFileできなくない?
まあ俺も例外処理はなんとなくぐらいの理解なので目から鱗の解答
楽しみにしています。
じゃあもうほとんど正解を・・・・
begin
sum:=0;
try
AssignFile(fp, filename);
try
Reset(fp);
except
:
end;
try
while (not Eof(fp)) do
begin
try
Readln(fp, str);
except
:
end
sum:=sum+StrToFloatDef(str, 0);
end;
writeln(FloatToStr(sum));
finally
CloseFile(fp);
end;
except
on E: Exception do Writeln(E.Message);
end;
end.
えっと、前スレから答えていたひとはいなくなったようなので、弟子役は
僕が引き継ぎましょうか。ちょっと興味ありますものでご指導よろしく。
とはいえ、ほぼ答え出た状態でちょっと気が引けますが...
sum:=0;
try
AssignFile(fp, filename);
try
Reset(fp);
except
writeln(filename);
raise;
end;
try
while (not Eof(fp)) do
begin
try
Readln(fp, str);
except
raise Exception.Create('よみこめねー');
end;
sum:=sum+StrToFloatDef(str, 0);
end;
writeln(FloatToStr(sum));
finally
CloseFile(fp);
end;
except
on E: Exception do writeln(E.Message);
end;
あれ、インデントが全部消えた... 読みづらくてすまん。
delphiのIDEからきちんと字下げした状態をコピペしたんだが。
んで動作は確認したので課題どおり動くと思う。その内容について質問。
・よみこめねーの例外はどういう時に発生するんですか?
多分できたけどどうやって動作確認しよか...と悩んだ。結局Abort使って
確認しました。
・例外処理をネストする目的は?
一箇所でまとめて処理を行うことでソースの可読性をあげる、とどこかで
読みました。でもこれ...正直ネストがやたら深くてかえってややこしくない?
exceptとfinallyのネストはよく使うし目的もわかる。けどexceptのネストが
よくわからんのです。
>>65 > あれ、インデントが全部消えた... 読みづらくてすまん。
半角スペースだと消えてしまって駄目ですね。
特殊文字置換とかで置換すると違うらしいです。
次のような書き方をしていた人が前におられたので。&nbsp(全部半角で)
漏れは全角スペースでインデントは入れています。
それでは頑張ってくださいね。コードを批評されるのは力が付くと思います。
先に、行頭インデントを複数の&nbsp(全部半角で)に置き換えるアプリつくりなよ
専ブラ使っとけ
アドバイスありがと。とりあえず張りなおしてみる。
専ブラ(OpenJane)つかってんだけどなあ。
sum:=0;
try
AssignFile(fp, filename);
try
Reset(fp);
except
Memo1.Lines.Add(filename);
raise;
end;
try
while (not Eof(fp)) do
begin
try
Readln(fp, str);
except
raise Exception.Create('よみこめねー');
end;
sum:=sum+StrToFloatDef(str, 0);
end;
Memo1.Lines.Add(FloatToStr(sum));
finally
CloseFile(fp);
end;
except
on E: Exception do Memo1.Lines.Add(E.Message);
end;
そしていつのまにか再び出力先が変わってしまった...
すまん、何度も張りなおしウザイだろうからそのままにしとくよ。
課題の実行にはたいした問題じゃないよな。
ああ、あと前スレのひと、しばらく出てきてない印象あったけど土曜日にきてるのね。
とりあえず今回はでしゃばってすまなかった。オモシロそうだったもので。
僕に遠慮せずぜひ引き続き頑張ってください。
例外処理は重要だがつまらんな。別の話題にしておくれ
>>72 そう言わずにさ、取り敢えずの区切りは付けさせてあげてね。
気持ちがすっきりしないと 、道場破りさんも次に向かえないだろうし。
>>65 >・よみこめねーの例外はどういう時に発生するんですか?
もし本気でそこを悩んでいるのならソースを見よう。
ほとんどの場合APIにいきつくだけではあるが。
>・例外処理をネストする目的は?
逆に、ややこしくないと思うソースをアップしてみては?
次行く前に絶滅しないように、面白い話題にしてちょ
>>75 漏れは今までその時々の検索単語であちこちのサイトをぐぐって漂流してみたけど、
意外なことに、GExpertsのような超便利なツールは余り紹介されていないんだよなあ。
何もまだ力のない初心者にこそ、こんな便利なツールを知ってもらいDelphiと戯れて欲しい。
と言いつつ、漏れの場合は圧倒的に弄ばれているんだけどね・・・。
それで、更にネタを投下するということで強引に次に続く・・・。
> GExpertsのような超便利なツール
道具を磨いてばかりでいつ使用するつもりですか?
> おまいら!今日からDelphi言語を学んでいくぞー!02
言語の実際の使用例希望。
イベントと普通のプロパティーの違い。
メッセージに捕まえ方。
簡単のマルチスレッドのおきまり。
タイマーの仕組み。
列挙型、集合型の内部構造。
string型
いろいろあると思うけど。
助詞に変なのがあるがタイポ、勘弁
>>79 何故漏れがここで、ドキュメンテーションという話題を振ったのかと言えば、
このDoxygenを読んでいて、TeXの「文芸的プログラミング」に出てくるtangleを
想起したからです。
ご存知の通りtangleとは、「ソースコード+説明」文書から、ソースコード部分を手繰り寄せるツールです。
適切なコメントを的確に付けておいて、それを適切なツールに通せば、
と言葉で書くのは簡単ですがこれは実に大変なことは誰でも承知のことですが、
どのようなことを書いておけば、忘れた後でそのコードを読んでも大丈夫なのかは
保守性を考える上では重要なことだと思うのです。
ちっとも「Delphi言語」じゃないのはわざとスレタイ無視してるからですか?
>>81 漏れが使っているのはDelphi言語じゃなくて、Object Pascal処理系のDelphiだけど。
Doxygen、実際にDelphiでも使えるんだけど。今試していたら、動いて感動していた!
アプローチが違っているように思えるかもしれないけど、
Delphiに役立つ情報という方向性はいつも考えているよ。
そのためになるものなら、何でも取り上げる。
開発者が引き抜かれて作った言語がC#らしいけど、漏れはDelphiが好きだから。
というより、Cは何だか昔から好きじゃない。
C と C# は全く違うんだよ。C# は C より、どちらかといえば Delphi に近い。オレだったら、C# で
ネイティブコンパイルできるんだったら、とっくにそっちに行ってるね。できないから
まだ Del やってるんだけど。
言語としては C# は Delphi のような構造化言語の尻尾を引きずってないぶんだけ、かなりきれい。
後発だから当然ですが。ライブラリに相当する .NET Framework も VCL と驚くほどよく
似ている。規模は多分10倍ちかく充実していますけど。純粋に趣味としてみれば
C# はとてもおもしろいです。.NET の普及がいまいちなので、まだこれからの言語
ですが。すでにユーザ数はDelphiをはるかに上回っています。
>>84-85 Cと違うのは知っているよ。そっくりだというのも漂流中に知った。
既に書籍の数が圧倒的に違う。Delはなくても、C#は必ず置いてある。
略称?のDelというのが悪いのかもしれない。消えるというイメージが漂っていて。
某から開発者を引き抜いて骨抜きにし、なおかつ対抗も作るとは流石はM社とは思ったけど。
言語して何とかというのは昔から何度も言われてきたけど、漏れはスクリプト言語育ちだから、
細かい話は置いといてアルゴリズムだけ考えていればいいというのが気楽で好きだ。型変換も自動だし。
それでも、文字列とか型を意識しないと駄目なことも結構あったけど。
Delphiの良さは、使用レポートを読んでいたら、圧倒的なコンパイル速度とあった。
他の処理系を余りよく知らないから速度的な比較は出来ないけど、Cはmakeして少し待った記憶はある。
昔の記憶だから、DOS時代の記憶だけど。
ボーランドさんも C# の開発環境を出してるでしょう。
Delphi の良さは VCL とコンパイルの速度ですよね、なんと言っても。
C# は IL にコンパイルするんだけど、C なんかよりずっと速いし、他のファイルも
いらなくて、Delphi と同様にコンパイルできます。
Object Pascal(Delphi言語)は、ただの Pascal から引き継いだ負の遺産を背負っていて
OOP としては中途半端でやがて淘汰されるでしょう。
世の中でこんなに旨いものがあったのか、と感激して、それが世界一旨い食い物だと
信じている場合があります。でも、知らないだけで、他の多くの人はもっと旨いものを
食べていた、ということもあり得ますよね。知っていても、本来の意味での「喰わず嫌い」
ということもあります。囓ってみて、試すのも悪くないですよ。Delphi2005以降では
C# も使えますからね。
VC# Express だと無料で最新版が手に入る。
俺の理解はこんなかんじ。趣味プログラマの聞きかじりなんで正しいかどうか
コメント頂けるとありがたい。
C# の弱点;
・実行速度遅い
・実行環境が .NET Framework 依存
ver2が出たら互換性問題、素の環境だと事前にランタイムをインストールしなきゃならん
・Windows限定 (まあ俺には関係ないが)
最初のふたつはネイティブコンパイルじゃないがゆえの課題ですなあ。
ただ将来的にはあらゆる言語がVMでの実行に向かう趨勢といった事を読んだことがある。
なぜなのか俺にはわからん。識者の方教えてくれ。
C#のメリット
・後発だから仕様がきれい
・斜陽のdelphiにくらべてこれからが旬
・ライブラリ充実 VCLにくらべて10倍ちかくですって!?ほんまですか!
C#の仕様が奇麗というのはOOPLとしての部分であって、
「構造化言語」としての仕様は、
Cを引きずってるC#と、構造化の元祖Pascalとでは圧倒的にPascalが上とは思うけどね。
逆にDelphiのOOPL拡張部分は後付けだから汚い。
OOPLとしてのあり方ばかり重視される世の中だけど、
実際の関数の中身の書き方は研究用とか関数型言語とか除けば
構造化言語の頃から大差無い(例外処理が加わった程度)わけで
C#に限らず最近出てきた言語は、その大事な部分が軒並みC並なのを見ると、
OOPL部分ばかり奇麗でもなあ、って感じはチョットする。
正直 .NET Framework は機能が足りなくて Win32 API を呼ばなきゃならないのに、C# で Win32 API 呼ぶのは激しくめんどくさい。
C++/CLI を試そうかなあと思っているけど、C# は試用した上で放棄した。
雑談なら談話室でやったら?
>>85 >すでにユーザ数はDelphiをはるかに上回っています。
M$信者が多い日本ではねw
いや、某信者がMS信者を上回ってる国なんかないだろ。(
>>93は相変わらず頭が変)
世界的にC#がはるかにDelphiユーザ数を上回ってるがな。
それに某もC#開発環境出してるのを忘れてる。
>>94 旧ソ連や中国は、なんかDelphiめちゃくちゃヒットするぞ?
>>87 > Delphi の良さは VCL とコンパイルの速度ですよね、なんと言っても。
漂流していてその記述には何度も出会いました。VBには色々な呪縛があって、
Delphiが出たら、どっとみんなが移ったと。DLL HELLなんて言葉も初めて知りました。
これは公式の使用レポートからなんですが。
> ということもあります。囓ってみて、試すのも悪くないですよ。Delphi2005以降では
> C# も使えますからね。
ご助言に感謝いたします。
言語をあれこれ齧るのはいいとは思っているのですが、
面倒だとawkやPerl等をいじっていた人間には既にお腹一杯なので。
Delphi言語と棒(どの漢字が一般的なのかな?)が呼び始めた頃から、
Delphiの迷走が始まったとどこかに書いてありました。既にDel6pとそれ以降では
利用者の環境が全く違っているように思います。
>>92 そうは言わずに、盛り上げるための燃料と思いませんか?
漏れはこうやって付随する知識も教えてもらえて、今はいい感じだと思っています。
そうやって、道場でまったりやっている中に道場破りが現れる、そんな感じがいいのでは?
取り敢えず、DelWikiの初心者向けリンク情報を無駄に増補・・・。
どうせなら、初めからということで、Doxygenもリンクに追加。
Doxygen専用ページ作ってみた。
良かったら使ってくれ。
>>100 作成ご苦労様です。ところで、今探していますが、URLがわからなくて。
>>102 教えていただき、有難うございました。ここに出るのか・・・。
ページへのリンクも貼っていただいて有難うございます。分けようかな。
ちょっと書き込んでみたけど、
サンプルということで、消して好きに編集してくれて構わないから。
不要ならページごと消してくれ。中身を全部クリアすればページも消える。
>>103 作っていただいたDoxygenページの方にもリンクを貼ってみました。
初心者の方は取っ掛かりということで、一番簡単なところを見つけて貼っておく予定です。
>>104 折角作っていただいたので、残す方向でやりたいと思います。
そうやって分けていただいた方が知らない人が知る手掛かりになりますし。
実際、サンプルで練習していたソースにこの形でコメントを入れて経験を積んでいます。
>>105 どうもです。
ページの作り方・消し方も紹介しておこうかなと思っただけなので
要らないと思ったらバッサリと消してくらさい。
今改めてぐぐって探していましたが、これが一番簡単かな?
Doxygenによるソースドキュメントの機械生成:
ttp://kamakura.cool.ne.jp/oppama/misc/doxygen.html まず整理しておくと、Delphiのコメントの付け方には、2種類あって、
1.//を頭に付けるか、2.{}で囲むかです。
その上で、あと更に必要な目印をつけることで機械的にコメントを取り出すことが出来ます。
ソースプログラムの書き方には、大きく「Qt形式」「JavaDoc互換」の2種類があります。
●Qt形式:
/*!
* こめんと…
*/
●JavaDoc互換:
/**
* こめんと…
*/
これだけ知って書くといいらしいです。さあ、みんなで早速使ってみよう!
>>109 ぐはっ、これはCでの書き方だった・・・。
ええと、Delphiだと//を付けるから、きっと//!?
駄目だ、Delphiでの書き方がよくわからない・・・。orz
いままでGUIのツールつくるのにVBでしたがDelphiに乗り換えました。(3日前・・・)
Tipsがたくさんのってる本とかおすすめの本ありましたら教えてください。
ネットだけだときついっす。
とりあえずOpenDialog,SeveDialogとメニューを使った簡易エディタだけつくったっす。
「はじめてのObjectPascal」買ったっす。
>>112 Delphi使いデビューおめ。
漏れは全部ネット情報だけだけど、それでも行けると思うよ。
上にずっと貼ってきたサイトの情報を読めばそれがよくわかると思うけど。
今日も「Delphi言語」の話はないのか・・・・
117 :
デフォルトの名無しさん:2005/11/23(水) 18:57:07
Delphi 2005にはソースからXMLドキュメントを出力する機能が標準で付いていることにさっき
気づいたんですけど、コメントの書き方がわかりません。
下記のように書いたら、クラスとメソッドのコメントはドキュメント出力されるんですけど、
メソッドのパラメータはどうやって記述するのでしょうか?
そこまではできないんでしょうか?
/// メインフォームクラス
TMainForm = class(TForm)
public
/// メソッド1
procedure Method1(AValue: Intger);
end;
>>116 うーん、今のような状況だと人によってそれが何を指すのか微妙に違うと思います。
ということで、ご自身で話題を振られては? 人任せにするよりは。
121 :
デフォルトの名無しさん:2005/11/23(水) 19:15:47
>>119 ヘルプは見ましたが載っていませんでしたので質問しました。
>>121 上で教えてもらっているページの情報だと、どうも「///」と3つ付けるといいみたいですね。
漏れはフリーの処理系しか持っていないから、後は実際に使っている人の情報待ちですね。
123 :
デフォルトの名無しさん:2005/11/23(水) 19:19:41
>>120 Delphi 2005でWin32プロジェクトに関してだったのですが質問に書き忘れていました。
すいません。
>>122 クラスコメントとメソッドコメントは「///」でいけるのですが、メソッドの引数に個別にコメントが
かきたいのですが分かりませんでした。
126 :
117:2005/11/23(水) 19:45:15
>>125 /// <param name="AValue"></param>
で書けるという意味ですか?
C#ではできますがWin32では無理でした。
128 :
117:2005/11/23(水) 20:58:17
>>127 私もここを見てDelphi 2005でXMLドキュメントが出力できることを知りました。
ここにもメソッドのパラメータのコメントの書き方は載っていませんでした。
C#風やJavaDoc風にもしてみたのですが、やっぱりダメでした。
PasDocとかを使うしかないのでしょうか。。。
>>128 直接、某にメールした方がいい気がします。
ライセンスを持っているなら回答してもらえると思うので。
後は、Delphi MLかなあ。
C# 使えばいいじゃん。どうせ Delphi 言語じゃなくて環境とか便利ツールの
話しかしないんだろ、このスレ。
その点 DelWiki にそっくりだな。
>>117 Delphi2005を持っているならWindows\System32にあるHelp Insight用のXMLファイル
を見れば分かるんじゃないかな。
>>135 こっちもどちらかと言えば過疎っているのにそっちを作ってもなあ。
多分、今のペースだとそっちは落ちてしまうと思う。余程てこ入れしないと。
テンプレも何もないし。関連スレ情報もない。
既にお決まりの言葉が出ているけど、漏れは作ってもいいとは思うけど、
作ってもそれを守るための努力をしないと全く意味がないし、余りに空しい。
ここが暖簾分けしなければいけないほど繁盛したら分ける意味はあると思う。
漏れのプログラミングスタイル自体、コメントを多用する形だったから特に思うけど、
適切なコメントをずっと書いていくというのはプログラミングをする上では軽視できない
重要な技術だと思う。
コードだけ書いていて、後で読み直すとわからないということはよく経験することだし、
だからこそ、Doxygenやpasdocというような自動生成ツールも生まれたのだと思う。
自動生成だと意味のあるものにならないけど
どんなことを記しておくべき?
>>138 違うよ。決まった形式を機械的に読み取って再構成するって意味だよ。
上に貼ったリンク(
>>79)を辿って中身を読んでみて。言いたいことがわかると思うから。
VCL のソースはそんなにコメントないけどね。
その前に分かりやすいコードを書くにはどうしたらいいかを議論したら。
有料のソースコードでもこんなものですか?
コメントなくても解読できてる人は大勢いますけどね。
きれいなソースをかくことのほうが大事だろうね。
コメント行の方がソースコードの行数より多い場合は、かえって非常に読みづらいと感じるな。
どうでもいいコメント大杉。VCL のソースコードは読みやすいと思うけどね。
>>144 必要十分な量のコメントというのは難しいでしょうね。
レベルがどの辺りかによっても違うし、CVS等で共同開発してしている場合は特に。
仰る通り、大杉コメントは邪魔なのも確かです。
コメントが重要、とかはなにも Delphi に限ったことでもあるまい。
Delphi言語自体とは、なにも関係ないと思う
オレの場合、ソース1万行あっても
コメントは50行分にも満たないことがほとんどだな
むしろ、下らんコメントを長々書く奴には是非反省して欲しい
Inc(i); // iをたしておく
とか、もうアボガド
begin end 入れて4行の関数に、作成者・機能、作成日時、とかえんえんとコメント
とか、もうアボガド
>>148 このスレはそういうスレなんだよ。
気にしないで、言語に関係なくどんどん書き込むヨロシ。
>>148 直接関係はなくても、Delphiという言語を学んでいくには必要な知識だと思います。
コメントには何でも書けばいいという訳ではなく、本当に必要な情報を的確に書く、
そして、それを常日頃から心掛けるという日々の実践がプログラム技術を向上させると思います。
>>149 > オレの場合、ソース1万行あっても
> コメントは50行分にも満たないことがほとんどだな
それだと、コメント率は0.5%ということになりますね。
どのくらいが標準的かは存じていませんが、一定範囲にはありそうです。
> Inc(i); // iをたしておく
いつの段階かでも違うと思いますが、時期にもよると思います。
初めての段階なら自分が一度でも使ったことのある表現をコメントしておけば、
見直す時にすぐにわかると思います。そういえば、こういう関数使ったことあるなとか。
これを見て、漏れも初めはコメントを一杯書いていたことを思い出しました。
i = i +1 は別の表現では、i++ というインクリメントを使えば書けたりしますが、
知らないとどうしようもないし、初めのうちはどうしてもそうなると思います。
>>150 > begin end 入れて4行の関数に、作成者・機能、作成日時、とかえんえんとコメント
例えば、こんな感じなのかなあ?
procedure TForm1.ForwardButtonClick(Sender: TObject);
begin
WebBrowser1.GoForward;
end;
どんな感じでコメントしているのかその実物を是非見てみたいなあ。
定型部分はクリップボード支援ツールとか使っていないと漏れは面倒で嫌だけど。
漏れのコメントは多分、一般の書き方と大変違っていると思いますが、
思い込みが大変激しいので自分でそうやっている積りなのにコードがそうじゃない場合も多くて、
自分がやっているはずの処理の流れをコメントの中に入れておきます。後で追うときも楽なので。
それを読むことで、このブロックでは合っているなあと「小さく考える」ことで積み上げていきます。
あと、前のコードをコメントアウトの形で出来るだけ残しておきます。後で思考の流れを追えるからです。
達人レベルの人から見れば「汚いコード」なのでしょうが、そういう試行錯誤の中で漏れは経験を積むのです。
あと、その時やりたいと思ったことをコメントアウトの形で一杯書いておくことも漏れの書き方の特徴でしょうね。
{--------------------------------------
作成者:nanasi
機能:引数x、yの和を返す
作成日時:2005/11/24
コメント:なんだかんだ
--------------------------------------}
function Tasu(x,y:integer): integer;
begin
Result := x+y;
end;
こんなのだろ
>>156 予想実例わざわざ有難うございます。漏れなら、1行にするなあ・・・。
// 関数:引数x、yの和を返す:なんだかんだ by nanasi(2005/11/24)
書いてもこれが限界だ。
>>155 うひょー、きみのコードは読みたくないね。
そんなのだったら、ほんとにコメントは必要かもね。
>>158 この書き方は自分のための書き方なので、
もしこれを人に見せる場合は、全く変えます。
コメントも付け替えますし。
また上に書いたように、習熟度合いで中身も変わっていきます。
あくまでも現時点で一番自分に合った方法を選択するのです。
その意味では全く一般的ではないですね。
でも、自分で考えてコードを書くという目的からはこれが一番楽です。
どうも約一名のチラシの裏のためのスレのようだ
剥げ如何
「駆け出し名無し」で抽出すると70オーバー
これは初心者系スレでなくチラシの裏系スレだな
自分の部ログがわりにつかわれてもね・・・・
別にいいじゃん。なんか問題あるんか?
問題ないと思ってることが問題だな
役に立つリンク貼ってくれたから別にいい。
> という感じで、ぼちぼちと使ってみます。詳細ブロックは「/*! */」で行けるのかな? 「//*! */」でないと駄目な気が。
doxygenが認識してくれるかはともかく、pascalではコメント文として認識されないので
コンパイルできなくなっちゃうね。
>>169 そのために噛ませるのがpas2doxなんですが、
どう書けばいいのか、公式サイトを見てもよくわからなくて。
取り敢えず、「//! コメント」しか使っていないです。これはどうも通るみたいなので。
>>170 ソース自体は(*! *)で書いてpas2doxを噛ませてDoxygenで認識できる/*! */に変換するわけだよね。
/*! */でいけるかな?っていってるのは変換後の話?
>>171 どうも、Delphiで通るコメント形式を実例豊富なC形式で見てわかるような形にするのが、
pas2doxのような感じのようです。そのままでは、Doxygenを通らないようなので。
(*! *)で書いてというのが、よくわからないんです。Delphi上では、これもコメントとして認識されるし。
結局、「//」と「{}」と「()」と3種類がコメント形式として認識されるということになりますね。
> /*! */でいけるかな?っていってるのは変換後の話?
これだと、pas2doxを通した後の話ですね。Delphi上では、コメント扱いしてくれないので。
まだまだ試行錯誤の状態です。常用者の情報を待ちたいと思っています。
>>172 > 結局、「//」と「{}」と「()」と3種類がコメント形式として認識されるということになりますね。
当然、()はコメントにはならない。コメントになったら関数もかけないからね。
Cの/* */から置換しやすいように(* *)が使用できるようになっている。
>>173 なるほど、移行の関係で「(* *)」が使える訳ですね。ご教示有難うございました。
>>174 だったらなんで/* */を使えるようにしないんだって気がするんだけどね。
ちなみにうまくいかないというのは具体的にどんな風に書いてどんな風に駄目なんだい?
ちょっと試してみたけど、うまく動いてるような気がする。
デフォルトではqtスタイル(JAVADOC_AUTOBRIEF = NO)だけど、
168にあるように
//! 一行説明
{*
簡略説明
@param param1 パラメータの説明
@return 戻り値
}
function hoge(param1:integer):integer;
という感じで出力できる。「{* }」は「(* *)」でもいい。
JavaDocスタイル(JAVADOC_AUTOBRIEF= YES)の場合は
{*
簡略説明
詳細説明
@param param1 パラメータの説明
@return 戻り値
}
function hoge(param1:integer):integer;
といった形で書ける。簡略説明の最後にはピリオドが必要。
何故かわからないけど、「(* *)」だとうまく簡略説明が認識されなかった。
馴れかもしれないけどJavaDocのほうが書きやすいかな。
間違えた。175はこうね。
//! 簡略説明
{*
詳細説明
@param param1 パラメータの説明
@return 戻り値
}
function hoge(param1:integer):integer;
>>179 @fileがついているということはユニットの説明用?
とりあえず@briefを使うのであれば、//!は不要なはず。
それと@briefの要約の行と次の詳細説明の間には空の改行が必要になる。
>>180 > @fileがついているということはユニットの説明用?
レスが遅れてすみません。必ずしも、というわけではないのですが、
不要なら消せばいいと思って。まだまだ使い始めて間もないので・・・。
> とりあえず@briefを使うのであれば、//!は不要なはず。
> それと@briefの要約の行と次の詳細説明の間には空の改行が必要になる。
詳細コメントと簡略コメントと2つ記述しなければいけないように思っていたのですが、
@briefは//!と同様な扱いということでしょうね。空行が必須なんですね。補足有難うございます。
まだまだ嘘が一杯あるかと思いますが、あくまでも参考ということで。
Delphi6のTMediaPlayerコンポーネントについて質問します。
MIDI演奏終了時のTMPModesがmpStoppedなのに対し、
MP3演奏終了時はmpPlayingが発火するのは
コンポーネント側の仕様でしょうか?
183 :
デフォルトの名無しさん:2005/12/31(土) 17:22:17
プログラミングを覚えようと思うんですが
Delphiって大丈夫?
絶滅するなんて話も聞くんですが。。。
C&C++とDelphiで悩んでまつ
メジャーな言語をひとつ覚えとけば
他に移るときは違いを覚えるだけで済む
だから最初に選ぶ言語はとっつきの良さで選べばいい
その三つなら全部フリー環境あるから触ってから選べば確実
185 :
デフォルトの名無しさん:2005/12/31(土) 21:01:44
DelphiユーザーはC#に移行してまつよ。
Delphiの開発者がC#の開発に携わっていますし、Bolandの統合開発環境からして明らかにC#を意識している。
中村先生も激賞!!
Delphiユーザも是非試すべし!
>># マイクロソフト(株)は15日、統合開発環境“Visual Studio”シリーズの最新版
>># となる「Visual Studio 2005」日本語正式版を“MSDN”会員向けにダウンロードでの
>># 提供を開始し、同時に、同製品の機能限定版である「Visual Studio 2005 Express
>># Edition」日本語正式版の、一般向けの無償公開を開始した。
>
>今日来てました(^^
>
>しかし、VS2003 も VSExpress もとても軽いですね。安定してるし。
187 :
デフォルトの名無しさん:2006/02/03(金) 04:47:01
あげ
188 :
デフォルトの名無しさん:2006/02/03(金) 05:09:25
>>184 Delphi(=Pascal)はメジャーな言語かな?
C&C++のほうがよいと思われるが。
190 :
デフォルトの名無しさん:2006/02/03(金) 07:57:22
何かお題出してほしいのよね
>>183 つ BDS2006(Del/C++/C丼)
192 :
デフォルトの名無しさん:2006/02/03(金) 20:25:14
DelphiにGC搭載してくれたらいいのにと思うぞ
193 :
デフォルトの名無しさん:2006/02/04(土) 01:20:09
まぁ、そういうことだな
Delphi.NETでもBoehm GCでも
196 :
デフォルトの名無しさん:2006/02/09(木) 13:53:58
GCなんかに頼る奴は2流
Delphiがここまで広がっているので、完全消滅という事はないと思うが、
BDS2006を買った身としては、今後のアップデートがとても心配だ。
もしやこのままサポート打ち切り?やめてくれーまだバグバグなのに・・・
200 :
デフォルトの名無しさん:2006/02/09(木) 22:31:34
VIPなにげに続いてるな
おまいら!今日からDelphi言語を見捨てるぞー!
にスレタイ変更すべし
>>202 見捨てはしないな。趣味だから今のをそのまま使っていれば良いだけ
だから(と言うことでまだバージョン3)。
うひょー、Delphi3 はバグバグだったんですぐ 3.1 が出たんだよな。
パッチ全部当てると 3.1 相当になるんだっけ?
3.1 は、安定バージョンとして有名だよね。
205 :
203:2006/02/10(金) 20:53:36
>>204 パッチは当ててあるから3.1相当になっているのか。安定しているから
もしかしたらそうかも。これで何の問題もないからバージョンアップする
必要性を感じないんだよな。
次のバージョンからデータベースが外されたから、バージョンアップ
は止めたんだったっけかな。
Delphi3 なら、まだ、Object Pascal だろ。
だから、「おまいら!今日からDelphi言語を見捨てるぞー! 」でもOK
207 :
デフォルトの名無しさん:2006/03/02(木) 22:41:41
これだからデルピー厨は低脳って言われるんだよ
重複しすぎ
今日は変数宣言とメッセージボックスの表示について勉強しました。
明日は例外処理を勉強することにします。