- 【QBASIC互換!?】FreeBasic【GPL】
839 :デフォルトの名無しさん[sage]:2016/10/17(月) 07:54:12.54 ID:ioKnq3J9 - >>838
>これは、かなりメモリーを食う手法なので、重複起動しないタスクにしか使えない。 答えはNOだよ ファイルから文字列を文字列型のバッファに読み込む そのバッファを文字列カウントアルゴリズムに通す その結果を出力する この動作に使用されるメモリは、1つの関数内でやろうが関数を分けようが変わらない なぜなら、何方にしてもバッファは必要であり バッファを参照(あるいはポインタ)としてカウント関数に渡せば良いから >一つのルーチンにまとめた場合「障害があるから、と直してしまう」と、 >どこかのルーチンの方で障害が出ることがある。 これも答えはNOだよ バグを修正したからといって、その関数の使用先の修正の必要性はない なぜなら、その関数の設計段階で期待される結果が決められているから オブジェクト指向言語が主流になって設計の重要性が叫ばれているけれど それに限った話ではなく、手続き型言語であっても同じこと 何を関数として汎化して切り出すか、それを設計段階で疎かにするから 無駄な読み難いコードが出来上がる Staticおじさんの一連の騒動ををしっかりと調べた? 派生した話ではなく、その話題の発端となった話のことね 言っていることがまんまその人と同じなんだけど、危機感を持つべき事案だよ
| - 【QBASIC互換!?】FreeBasic【GPL】
840 :デフォルトの名無しさん[sage]:2016/10/17(月) 08:11:13.23 ID:ioKnq3J9 - >>838
オブジェクト指向の話で申し訳ないが、このスライドを見てよ 少し極端な話ではあるけど、参考になると思うよ ttp://www.slideshare.net/MoriharuOhzu/ss-14083300 この内容を額面通り受け取らず、手続き型言語において、この思考をどう活かせるか 慣れ親しんだ思考を取り敢えず横に置いておいて思考を巡らして下さいよ 理解を「出来る、出来ない」に関してアレコレ言うつもりはないけれど 理解を「しようとする、しない」の姿勢に対しては言わせてもらうわ レガシープログラマは、新しい「もの」に対して拒絶的なのよ そのくせ、新しい「物」を使いたがる だけど、古いままの使い方を無理やりする
| - 【QBASIC互換!?】FreeBasic【GPL】
845 :デフォルトの名無しさん[sage]:2016/10/17(月) 19:34:55.84 ID:ioKnq3J9 - >>842、>>843、>>844
ざっとコード読んでみたけど、そりゃ上手く動かんだろうね >Dim InValLing As Long, RetVal() as Long ここで、RetVal()は動的配列を宣言して、その後関数に渡される 関数内の >If (RetValLong(IBB, ICC) <> DimDataLong2(IBB, ICC)) Then IDD = IDD +1 ^^^^^^^ この部分で配列RetValLong()を参照しているけど RetValLong()の参照元の動的配列RetVal()は、まだ具体的な要素数でメモリを確保していない redim RetValLong(IAA, IAA) as Longの場所が悪いね
| - 【QBASIC互換!?】FreeBasic【GPL】
846 :デフォルトの名無しさん[sage]:2016/10/17(月) 20:05:26.95 ID:ioKnq3J9 - 同様に>>843のグローバル配列も関数内でredimで領域確保していないな
>ReDim DimDataLong2(IAA, IAA) As Long, RetValLong(IAA, IAA) as Long こいつらの宣言場所が悪い まずさ、FreeBASICの言語機能を理解しようよ 言っちゃ悪いが、こんなの初歩だと思うんだけど…
| - 【QBASIC互換!?】FreeBasic【GPL】
847 :デフォルトの名無しさん[sage]:2016/10/17(月) 20:28:00.52 ID:ioKnq3J9 - それとさ
サンプルコードなのだから取り敢えずいらない部分は削ぎ落とそうよ やっていることは至極簡単なのに余計な部分が多々あるから読み難いよ 動くかどうか試していないけど、取り敢えずいらないものを排除したコード 変数iddが何に使うのか知らんけど、一応入れておいた function AS03_AAAA(RetValLong() as long) as long dim as long iaa = AS02_AAAA(RetValLong()) dim as long idd redim DimDataLong2(iaa, iaa), RetValLong(iaa, iaa) for ibb as long = 1 to iaa for icc as long = 1 to iaa DimDataLong2(ibb, icc) = ibb * iaa + icc '' idd += -(RetValLong(ibb, icc) <> DimDataLong2(ibb, icc)) こういう書き方も出来る idd += iif(RetValLong(ibb, icc) <> DimDataLong2(ibb, icc), 1, 0) RetValLong(ibb, icc) = DimDataLong2(ibb, icc) next icc next ibb return iaa end function
| - 【QBASIC互換!?】FreeBasic【GPL】
848 :デフォルトの名無しさん[sage]:2016/10/17(月) 20:47:28.64 ID:ioKnq3J9 - >>847
補足 redimはそれが宣言された時点でその型のデフォルト値で初期化されるから 値を保持したいなら、Preserve使ってな
|
|