トップページtech
51コメント17KB

Unit1.pasに全部書いちゃいました。【現在1万行】

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
現在11028行

もうわけらからん!
0002デフォルトの名無しさんNGNG
2ゲットは(・∀・)ギャオが頂いた(・∀・)ギャオ

>>1号車 1番2番スタイルでチェッカー(・∀・)ギャオ
>>2号車 ここは(・∀・)ギャオ(・∀・)ギャオ
>>3号車 ギョウじゃないよ(・∀・)ギャオだよ
>>4号車 前を行く各々方道を開けられーい 常勝(・∀・)ギャオがまかり通ーる
>>5号車 涙チョチョぎれる高配当(・∀・)ギャオ
>>6号車 本命党の皆様おめでとうございまーす(・∀・)ギャオ
>>7号車 針、3秒前、2秒前、1秒前、各車一斉にスタート(・∀・)ギャオ
>>8号車                                                  →北
━―━―━―━―━―━―━―━―━[JR浦田駅(・∀・)ギャオ]━―━―━―━―━―━―━―━―━―




   (・∀・)ギャオの出没地
0003デフォルトの名無しさんNGNG
どのへんを、どう分割したりコンポーネント化するん?
コツ教えれ。
0004デフォルトの名無しさんNGNG
このスレ削除依頼出して初心者スレで聞き直したら教えたげるよ
0005デフォルトの名無しさんNGNG
おいおい初心者扱いかよ。
おまえよか格上だと思うぞ。
0006デフォルトの名無しさんNGNG
まあ、俺はウンチクや技術論、どのコンパイラがいいだの
長々話す暇があったらプログラムする実行派なんだよね。
ゴミソフトしか作らないでぐちゃぐちゃ偉そうに言ってるの馬鹿みたいじゃん。

でも、少しやばくなってきたぜ。
0007デフォルトの名無しさんNGNG
どう分割するか。それはあなたの心の中にあります。

分割する単位は、
 関数・手続 
 クラス 
 ユニット 
 アプリケーション

まず、関数・手続きに分割していますか? 出来るだけ小さくするといいでしょう。
関数、手続きは関数内関数にしてゆくとよいでしょう。関数内関数は簡単にクラスに分割出来ます。
0008デフォルトの名無しさんNGNG
          /""`'・.,
         ,/'   ..::::\.,__,,,.....,,,__
        ,i'    ...::::::::"""    `''・-、.,_   _,,......,,,_
         i'  ...::::"           ":::`・'"~   :|
        /"                 " ::::  ...::,l
       ./'                     "::::::/
      .i'                       ::"i,
       i'         ●             .::::::|
       .i'                       .:::::::|   
      i;             i、.,    ,.    ●...::::::::|
       '、            |  `"~'/      ::::::::ノ
        \           l,    /     .:::::::/   おかねちょうだい!! 
         `/(          i.,_,/     ...:::::ノ'
      ,.-'"~ ~"ー-.,,__          .....:::::::ノ').,
     ./=ー'"~"`ー-.,_~"\-.,_  ,...,_ "";.-、::/ノ::: 'i,
    / ̄    :::::〜`i.():::\`""| `(^);;;;;|;;/;:::::::: 'i,
  . /         ::::::`i |:::::):;;;;;i、,/人_ノ;;;;'i,::::::::::: i
   |          .:::::::|/::::└ー-,;;;\;i;;;;|/;:::::::::::: i
   i.,_,.人       ..::::::/ :::::::::::::/;;;;;;;'i,'i;;;;|\;:::::::::::: i
      `;      .::...:::::/  :::::::::::`- .,_;;;;i,ノ;|;;;/;:::::::::::: /
      `、.,..:::::::::::::::::/   :::::::::::::::;;;;;;\,i ,/;;;;;:::::::::::|/
        `i"`-.,_,.ノ   ::::::::::::::::;;;;;;;;;;;\|;;;;::::::::::::|
        |       :::::::::::::::::::;;;;;;;();;||;;;::::::::: .ノ
0009デフォルトの名無しさんNGNG
とにかく全部アップしろ。
みんなで分析/分割してやるから。
0010デフォルトの名無しさんNGNG
Delphiは皇帝の言語!!!
0011デフォルトの名無しさんNGNG
1万行?まだまだだな。
0012デフォルトの名無しさんNGNG
分割してるのに
一個のファイルCで、8000行行った。
ファイル総数は500ぐらいあるかな
0013デフォルトの名無しさんNGNG
僕はUnit1.pasに10万行入れましたけどどうすればいいですか?
0014デフォルトの名無しさんNGNG
制御構文の入れ子は最深20ぐらいだな。
0015デフォルトの名無しさんNGNG
12,13は使えないグラマー

※しかし本人はエリート意識が強い。
0016デフォルトの名無しさんNGNG
え、10万行も扱えるんですか
あのエディタ
0017デフォルトの名無しさんNGNG
2〜3000ステップで分割して欲しいね。
0018デフォルトの名無しさんNGNG
俺は500行程度が限界だな
おかげで分割しまくったファイルが散乱してるが
0019デフォルトの名無しさんNGNG
>>18
それも非効率だな。
ファイルが多すぎると訳分からなくなる。
一つのファイルにある程度多めに書いて、
見出しつけておくほうが管理しやすい
0020デフォルトの名無しさんNGNG
自分でライブラリを作ってゆく時は(いきなりコンポーネント作れる人は別にして)

1、最初は、MyLib.pas に利用可能なのは全部入れておく
2、関数の数が100くらいになったら、一度整理して機能別に分けてユニットを分割する

って感じでやればいいと思う
0021デフォルトの名無しさんNGNG
Del8のコードエディタはC#みたいな感じ(アウトラインエディタ?)になるのかな?
0022デフォルトの名無しさんNGNG
1ファイル、MAXで何行ぐらいが適当?
0023デフォルトの名無しさんNGNG
>ファイルが多すぎると訳分からなくなる。
Object Pascalもパッケージの概念くらい使えればねぇ
0024デフォルトの名無しさんNGNG
いや、ファイル管理がずさんならネームスペースやパッケージがあっても
一緒だよ。あるていど計画性がないと。
0025デフォルトの名無しさんNGNG
>>23
パッケージの概念はあると思うが?
0026デフォルトの名無しさんNGNG
イベントを別ユニットに分ける方法ないかな、スマートに。
むかしこの疑問に「フレーム使え」とかいう意見があったんだけど、実はいまだに意味がわからないんだ。
もちろんフレームの使い方はわかってるつもりなんだけど、ソース分けられないよねぇ?
0027頭悪い ◆gGTEz68pSM NGNG
1: Unit1.pasに全部書いちゃいました。【現在1万行】 (26) 
2: Delphiばかリやってると馬鹿になる (874) (587)

ワロタ
0028デフォルトの名無しさんNGNG
>>26
イベントは別のユニットに書けるよ。
でも、イベントを別ユニットに書かない方がいい。

効率悪いように見えても、
一旦そのフォームのあるユニット中に、呼び出しコードを書くようにすべき。
そうじゃないと、その分割意味あるのかい? て状況になるし、

0029デフォルトの名無しさんNGNG
>>26
スマートに書くなら、TAction を継承して作っておくといいよ。
次に使う時はそれを RegisterActions でIDEに登録しておけば楽チン
003026NGNG
>イベントは別のユニットに書けるよ。
えっできるの?
イベントをデータモジュールに書いておけばオブジェクトインスペクタに出てくるけど、わざわざデータモジュール作るのも何だかなって感じで
あとは設計時にOnXXX := なんて方法しか思いつかないっす
できれば教えてください
イベントのコードだけで1万行届くんで・・・分割に意味があると思う

次はエディタで折り畳めるようになったらいいなぁ
0031デフォルトの名無しさんNGNG
>>30
出来るというのは
>イベントをデータモジュールに書いておけば
>設計時にOnXXX := なんて方法
の事だよ。

TFormだったかの継承じゃないと、オブジェクトインスペクタに出せないからさ。

でも、
>イベントのコードだけで1万行届

ってのはマズイよ。 イベントには 3行くらいまでとか自分ルール決めて、
それ以上はデータクラスみたいなのを自分で作って、そのクラスのメンバーを呼び出すような格好にしないとね。
0032デフォルトの名無しさんNGNG
どうせなら Project1.dpr に全部書こうよ。
0033デフォルトの名無しさんNGNG
http://member.nifty.ne.jp/yamazaki/doc/code_design/vol03.html

> Javaのコードは1ファイル1クラスであることが基本のようです.
> よって,1つのクラス内のデータ(メンバ)をアクセスするための関数(メソッド)群は
> 1つのファイルに書くことになります.
> そして,筆者のもらったJavaのコードはなぜか1つだったのです.
> 筆者は一瞬,ファイルを開こうとする手を制止する「見えない力」を感じました.
> しかし,筆者はその見えない力を断ち切り,そのファイルを開いたのです.
>  そ,そこに現れたのは,な,なんと,1ファイル14万行のソースコードだったのです.
> 筆者は自分の目を疑いました.
> 「まさか,1クラスではないよな」と調べてみるのですが,
> どうやら1クラスで14万行….その中に複数のメンバ関数があり
> ,1つ1つのメンバ関数もかなり大きい.
> クラスのメンバ変数はグローバル変数のように扱われていました.
0034デフォルトの名無しさんNGNG
14万行のクラス・・・・
ビットマップの各種エフェクトつきコピー(複数色フォーマット対応)メソッドをご丁寧に全部自前でインラインに書いたソースを見たことがあるが、それでも9000行だったぞ。
0035デフォルトの名無しさんNGNG
一つのユニットが数万行になるとデバッガのブレークポイントの動作がおかしくならないか?
0036デフォルトの名無しさんNGNG
万単位って多いの?
0037デフォルトの名無しさんNGNG
デバッガのどっかに16bitの個所があるとか
0038デフォルトの名無しさんNGNG
>>36
満タンです。
0039デフォルトの名無しさんNGNG
↑多分、「俺ってギャグのセンスあるぅ〜」って思っているんだろうね。
0040デフォルトの名無しさんNGNG
38は関西のコテコテ芸人の馬鹿息子だろう。
0041デフォルトの名無しさんNGNG
>>37
どうなんだろ…。最初は自分のコードにバグがあるからと思ったんだけど、適当に
ソースを別々のユニットに分割したら直ったのでそうなのかも。大抵の場合困る事は無い
けど、相互参照を用いたコードは一つのユニットに記述しなきゃならんので問題かもね。
0042デフォルトの名無しさんNGNG
>41
デバッグ情報をつけた .exe の大きさって、どれくらいでした?
0043デフォルトの名無しさんNGNG
>>42
15Mbくらい。かなり大きいのでdllでプログラムを分割とかすべきかも。
0044デフォルトの名無しさんNGNG
それくらいなら日常的に使っているがなぁ...
0045デフォルトの名無しさんNGNG
んじゃ、やめとこ。
0046デフォルトの名無しさんNGNG
相互参照をするユニットを書くときに、

・interface だけまとめて定義するユニットをつくり、
実装は個々のユニットで行う
・抽象クラスだけまとめて定義するユニットをつくり、
継承は個々のユニットで行う

なんてやり方はありですか?
0047デフォルトの名無しさんNGNG
>>46
private をどう処理するつもりなの?
0048デフォルトの名無しさんNGNG
>>46
inner classを保持してるclassがinner classを参照する場合、interface節で
inner classのunitをuses、参照する。inner classからinner classを保持して
るclassへの参照は、とりあえずTObject型にinner classを保持してるclassへの
参照を代入。implementation節でinner classのunitをusesし、as演算子で
down castを行い参照というのはどうよ?

>>47
interface or 抽象classをまとめて定義するだけだからprivateなmemberは無い
んでない?確か仕様上、同一unit間ではprivateなmemberにも参照可能だったっ
け。それをどう表現するかって事?
0049デフォルトの名無しさんNGNG
>>47
ええと、相互に参照しあうクラスを宣言しつつ、かつ実装は
別ユニットにわけたいわけです。private は実装・継承時に
考えればいいんじゃないかなーとおもいます。

>>48
やっぱりそうなりますかね。。。as の嵐になってしまう。

それにしてもなんで同一ユニット内のクラスって private メンバまで
丸見えなんでしょうね。C++ の friend に対する回答?
0050デフォルトの名無しさんNGNG
>>49
>C++ の friend に対する回答?
そんなとこじゃないですか。関数ローカルなstatic変数を実現できるよう、型付
定数に代入可能だったりしますしね。
0051デフォルトの名無しさんNGNG
高級言語ならまだマシだろ。
俺の組み込み機器用アセンブラソース(68K)は14,000行&400KByteぐらいだ。
もう手がつけられん。

■ このスレッドは過去ログ倉庫に格納されています