関数呼出しはgoto文である
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
垢版 |
2009/01/24(土) 07:30:08
関数fがあったからfを読んでみたらfのなかに関数gがあった。
gを読んでみたら関数hがあった。
これはgoto文だと思った。

しかし、関数に切り出すのは構造化プログラミングだと言われている。
gotoがダメだから構造化プログラミングにパラダイムシフトしたのに
所詮はgotoなのである。
0106デフォルトの名無しさん
垢版 |
2009/09/09(水) 23:03:25
>関数fがあったからfを読んでみたらfのなかに関数gがあった。

関数の中に関数を定義できるのか?
少なくともCではないな。
0109,,・´∀`・,,)っ-○○○
垢版 |
2009/09/11(金) 22:29:21
C++だったら余裕

int main(void) {
  class Hoge {
    void operator () (int n) { /* ほげほげ */}
  };
  ...
}


Cでも配列の中にマシンコード直打ちすればあるいは・・・
0110デフォルトの名無しさん
垢版 |
2009/09/26(土) 21:26:23
余裕で110get!
0111111
垢版 |
2009/09/26(土) 23:25:22
このスレッドは110を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
0112デフォルトの名無しさん
垢版 |
2009/09/26(土) 23:59:33
Pascalも関数内に関数定義できた気が。
そんな狭いスコープの関数で何がうれしいのか俺にはよくわからんが。
0115デフォルトの名無しさん
垢版 |
2009/09/28(月) 15:04:42
使い捨てみたいなその場限りの用途なのに
いちいち関数の名前を考えるのがメンドウやろ
0118デフォルトの名無しさん
垢版 |
2009/09/28(月) 23:36:06
人間がいちいち入力するのでなくて、関数を自動生成して
それを使い捨てするという用途なら有り得るな。
0119デフォルトの名無しさん
垢版 |
2009/09/29(火) 02:20:08
使い捨ての関数なんて、関数型プログラミングをやれば、いくらでも
使うものだということがわかる。
0120デフォルトの名無しさん
垢版 |
2009/09/29(火) 11:40:42
>>119
喩えは悪いけど、関数を無名で作りたいってのはforループに一一名前をつけるのが面倒ってのと同じようなレベル?
0123デフォルトの名無しさん
垢版 |
2009/09/29(火) 19:38:22
同じようなテンポラリ関数をたくさん作る必要があるときに命名が面倒くさいんだよね。
例えば長さを返す関数が複数あったとして

len1() {}
len2() {}
len3() {}
len4() {}

みたいな。
0124デフォルトの名無しさん
垢版 |
2009/09/29(火) 20:49:53
ヘタに名前を付けちゃうとコードの再利用がしにくい。
もっとも、コピペコーディングの温床になる両刃の剣だが
0125デフォルトの名無しさん
垢版 |
2010/12/05(日) 19:23:22
非同期プログラムはgotoと同じくらい読みにくいけど現代では使用を避けられない
0127デフォルトの名無しさん
垢版 |
2010/12/05(日) 21:59:53
>>1
その考え方だと関数呼び出しはgoto文かもしれないけど
関数呼び出しが終わった後に自動的にもとの場所まで戻ってくれるでしょ
これってgoto文でまたもとのところに戻ってるってことだよね

関数呼び出し1回書くだけでgoto文を2回自動的に呼び出してくれるということだから
親切だと思う
単なるgoto文とは違う

すげえ遅レスだしスレも読んでないけど
0128デフォルトの名無しさん
垢版 |
2010/12/05(日) 22:02:31
>>126
名前のない関数というと局所関数?
ローカル変数のスコープを小さくできるとい面でメリットがあるんじゃないの
forループ中で変数を宣言できるのと同じメリットがあるのでは?
0129デフォルトの名無しさん
垢版 |
2010/12/16(木) 23:44:39
親関数が所持しているデェタ
を参照した子関数を書きたいこ
とがあるでしょう。

例えば、qsortを使って、そえじ配列i
がx[i[1]]<=x[i[2]]<=...となるように整列
したいとき、比較関数をどう書けばよいか
を考えると、内部関数の必要性がわかるはず。
0134デフォルトの名無しさん
垢版 |
2011/01/04(火) 17:48:42
LABEL1:
 for ( ; ; ) {
  for ( ; ; ) {
   for ( ; ; ) {
    for ( ; ; ) {
     for ( ; ; ) {
      何かの処理
      if (何かの条件) break LABEL1;
      何かの処理
     }
    }
   }
  }
 }
0136デフォルトの名無しさん
垢版 |
2011/03/27(日) 23:22:10.07
>>1
 お前が言っているのは、包丁も人を殺せるから作っちゃいかんと同程度。
goto以外の制御構文は、入り口と出口が決まっている。例えば、returnは、
必ず関数の呼び出し元に戻る。continueはループブロックの末尾に落ちる。
gotoはネストを完全に無視して出入り口の概念が無いジャンプを書けてしまう。

goto label1:
label2:
goto label3
label1:
goto: label2
label3:

こんなどっから入ってどこに出るか解らんコードが
散らばってたら読んでられるかっ。

>>126
pointLambda = Line(0,0,10,10);

point[0] = pointLambda(0);
point[1] = pointLambda(1);
point[2] = pointLambda(2);
point[3] = pointLambda(3);

はたしてこれがただの手続きと言えるか?
0139デフォルトの名無しさん
垢版 |
2011/05/05(木) 01:13:40.10
>>137
別に継続だろうが、gotoだろうが、出口がはっきりしてりゃいいんだよ解る?
お前は継続で>>136のようなコードを意図的に書くのかよ。deleteしたポインタを
コンパイルエラーにならないからってさらにdeleteするぐらいアホだな。
0140デフォルトの名無しさん
垢版 |
2011/05/05(木) 18:04:55.37
そもそも、ダイクストラの言った構造化の要点は、gotoを禁止しろじゃないからな。
入り口と出口をはっきりしろってのが要点。誰もがgotoを使って入り口と出口がはっきり
したコードを書くのなら別に、breakやreturnじゃなくgotoでもいい。
熟練したプログラマが書いたアセンブリコードだって構造化されてる。

問題とされるのは、入り口と出口がはっきりせず、あるルーチンの中に飛び込んで、
また別のルーチンにとんでいって返ってこない>>136のようなコード。
0141デフォルトの名無しさん
垢版 |
2011/05/05(木) 18:32:58.53
良く言われるスパゲティコードというやつだな
プログラムを格納する領域にすら困る時代にはそういうのも実用になることがあったが
今はコードを削るほどメモリに困ることはあまり無いからね

…って、組み込み機器の分野ではどうなんだろう?
今もスパゲティが散見されたりするんだろうか
それともむしろ、止まったら困るから昔から意外ときちんと書いてた?
0142デフォルトの名無しさん
垢版 |
2011/05/05(木) 19:19:49.74
普通にオブジェクト指向プログラミングしてるだけなのに、
「クラス使うな。スパゲッティコードになるだろ!」
っていうレベル低いプログラマに囲まれて欝。
自分が抽象化されたコードを読み解けないのを、「スパゲッティコード」だと
こちらに押し付けてきやがる。
ラムダとか継続以前に継承も多態もわかんねえ奴らはほんと消えて欲しい。
0143デフォルトの名無しさん
垢版 |
2011/05/05(木) 19:24:43.06
スパゲティかどうかは別として、メソッドの呼び出し地点を探しづれぇってのはある。
メソッドの引数追加するはめになったときは特に悲惨。
0144デフォルトの名無しさん
垢版 |
2011/05/05(木) 19:41:49.15
実際に走らせて試すことができるコードなら例外使ってスタックトレース取得とか
やったことありますねJavaで
0146uy
垢版 |
2011/05/17(火) 12:23:44.94
継承は個人個人が書くコードレベルで書くとスパゲティだと思うけどね
ライブラリの継承や、全体設計者の何らかの法則にしたがって継承していくのはあり
Aクラスでも使う、Bクラスでも使う、関数を、
「自分でかいたCクラス」に定義して、AとBに継承とかはスパゲティだと思ってる 読む気を無くす
0147uy
垢版 |
2011/05/17(火) 12:27:25.87
そういう場合、殆どの場面において、AとBクラスは ちゃんとリファクタリングすれば統一できるか、あるいはCがライブラリになるか、設計そのものに組み込まれて
自分でかいたクラスを自分でかいたクラスに継承する。なんていう例外的な継承は必要なくなるはず
0148デフォルトの名無しさん
垢版 |
2011/05/18(水) 22:15:25.98
継承を>>146みたいに使うのは根本的に誤解しているが、>>147程度の理解で
「スパゲッティだと思ってる(キリッ」
ってヤツが多いから欝なんだよ…
0149デフォルトの名無しさん
垢版 |
2011/05/19(木) 15:11:14.47
しょせん、他人が書いた「俺ライブラリ・俺クラス」はすべてスパゲッティ。
書いた本人が自分にわかりやすいように書いただけであり
他人には理解不能。
0151デフォルトの名無しさん
垢版 |
2011/05/24(火) 22:11:40.94
>>146
 親クラスの増築版として子クラス書くなよバカ。
増築するくらいなら、親に当たるクラスのオブジェクトを内包させて、
Getter,Setterで操作できるようにした方が実装が固定されなくて遥かにまし。
親クラスを利用(参照)しているクラスを子で利用するために書くんだろうが。
0152天使 ◆uL5esZLBSE
垢版 |
2011/07/02(土) 22:02:44.61
これ ; デリミタっていうんだけどさ、これをつけなきゃエラーになるような
そんな言語使ってる奴ってどうみてもゴミだと思うんだけど

もしかして「;」これ打ち忘れてコンパイルエラー出すのが楽しいの?
そうか、二度と話かけんなよ


ほんっとに自覚のないゴミだな
0155デフォルトの名無しさん
垢版 |
2011/09/15(木) 21:38:15.73
10 *MAIN
20 GOSUB *F
30 END
40 RETURN
100 *F
110 GOSUB *G
120 GOTO *R
200 *G
210 GOSUB *H
220 GOTO *R
300 *H
310 GOTO *R
0156デフォルトの名無しさん
垢版 |
2011/09/30(金) 12:37:08.82
アセンブラとbasicしか使ってなかったころ、よくやってた事

# 関数定義部分
func_wrapper:
c = a + b #引数として指定されたa と b を足してcを構築
func:
# ここから関数の本体
# c を利用して複雑な演算を行う
c = ....
return

#関数利用部分その1
a = 1
b = 2
gosub func_wrapper

#関数利用部分その2
c = 10
gosub func

何を言いたいかと言うと、サブルーチンの入り口がfunc と func_wrapperの2つあり、
引数の加工前、加工後のどちらでも共通して同じ関数が利用できるという事。
上記の例の場合、aとbを初期化してfunc_wrapperを呼ぶことができるが、計算過程で
必要なcがすでに完成しているなら、funcを呼んでも良い。という事になる。

これで、出口どころか入口さえ決まっていない関数(サブルーチン)が出来上がるわけだ。
当時は便利だと思ってたんだけどね。
0159デフォルトの名無しさん
垢版 |
2011/11/22(火) 01:37:35.15
だよね
0161デフォルトの名無しさん
垢版 |
2011/12/04(日) 19:02:43.08
最初にそれを言い出したのはwhileもまともなifも無かったFORTRANが主力だった時代。

それを勘違いして教条的に扱った奴がアホ
0162デフォルトの名無しさん
垢版 |
2012/01/27(金) 06:05:39.59
放射能にやられたww
0163デフォルトの名無しさん
垢版 |
2012/01/27(金) 07:37:02.66
Cだが、最近はgotoも使い方次第って風潮だな
多重ループ抜けに余分な変数作らなくていいし、便利
0165デフォルトの名無しさん
垢版 |
2012/02/04(土) 13:42:16.07
近頃の若いもんはgotoの正しい使い方も知らんのか
いったい学校では何を教えてるんだか
0168デフォルトの名無しさん
垢版 |
2012/08/12(日) 01:11:22.40
gotoって内部的にはどうやってんの?
コンパイルしたら行番号もなにもなくない?

小4の頃にWindowsのバッチで使った時あるだけだが
0169デフォルトの名無しさん
垢版 |
2012/08/12(日) 01:31:05.41
>>168
basicのgotoもラベルにジャンプできる。
Cのgotoはラベルにジャンプする。
それはさて、それらのgotoに限らずforやwhileも
コンパイルされた実行オブジェクト内ではCPUの分岐命令になっている。
そのジャンプ先は大抵、前後に何バイト離れたところと言う風に指定される。
0178デフォルトの名無しさん
垢版 |
2013/08/17(土) NY:AN:NY.AN
そんなことはない
0182デフォルトの名無しさん
垢版 |
2013/08/18(日) NY:AN:NY.AN
>>179
ラーメンを4等分するドリフのコントを思い出した。
0183デフォルトの名無しさん
垢版 |
2013/08/18(日) NY:AN:NY.AN
関数呼び出しはgotoであるって粒度が違うよね
人間は原子であるというくらいおかしい
0185デフォルトの名無しさん
垢版 |
2013/08/18(日) NY:AN:NY.AN
> goto有害論のマトモな説明

Knuthの"Structured Programming with go to Statements"がベストだと思うが、
あれ読んで理解できる奴はそもそも読まなくても分かってる、っていうw
0186デフォルトの名無しさん
垢版 |
2013/08/18(日) NY:AN:NY.AN
構造化を学ばなくてもわかってるやつってみたことない
構造化を取り込んだ言語とgoto使うなという標語からそれっぽく書いてるだけで
0187デフォルトの名無しさん
垢版 |
2013/08/18(日) NY:AN:NY.AN
箸は手で使っているので所詮は手であると言うようなもの。
この手のアホは結構多い。
一番多いのはツールは所詮人間が使っているのでツールのパワーは重要ではなく所詮は人力であるという奴。
0189デフォルトの名無しさん
垢版 |
2013/08/18(日) NY:AN:NY.AN
>>188
使える技術はなんでも使ったほうがいいよな。
なぜか標準関数だけで作ろうとするあのバカ。
ライブラリ使えよ。
0190デフォルトの名無しさん
垢版 |
2013/08/23(金) NY:AN:NY.AN
信頼出来るかどうかの見極めがまず第一

車輪の再発明とか言ってよく批判されるが
水平方向じゃなくて垂直方向すなわち
ハシゴを登る時は自作したほうが良い
0193デフォルトの名無しさん
垢版 |
2014/02/14(金) 09:16:12.57
AとBの値を入れ替える、このようなしょうもない手続きを一々関数に切り出してるからダメなんだよ
ブロック化は1つの手続きを別けるのではなく、完結したオブジェクトであるべきだろ
0195デフォルトの名無しさん
垢版 |
2014/05/09(金) 17:00:05.55ID:PiBLeKFf
>>190
梯子の再発明……?
0196デフォルトの名無しさん
垢版 |
2014/05/09(金) 17:13:54.64ID:Mr0Sp7Ii
自分の命を預けるものを再発明してなにがわるい
おまいらはOpenSSLでも使ってろ
0198デフォルトの名無しさん
垢版 |
2014/05/10(土) 01:58:19.36ID:qsRpUawS
>>196
お前の発明力と、それを支える技術力が確かなものであるなら、別にそれでもいいよ?

車輪にしたってあれ、かなり正確な円を作れないと、使う時にいろいろ余計な不具合が出るもんだけど。
荷重計算も当然やってなきゃいけない。
場合によってはタイヤやサスペンションやブレーキなどのアクセサリも必要になるかも知れない。
少なくともWikipediaの車輪のページに書かれてる程度の事は自力で思い付けるくらいじゃないと、再発明なんて危なっかしくてさせられないんだけど。
再発明して何が悪いと主張する人たちに、これができる人はほとんど居ないんだよねえ。

梯子もまた然りで、構造はすごく単純そうにだし、実際そうだけど、あれ自力で考えて作るのすごく大変だよ?
ただのオンボロに見える杉材製農業用梯子に、危険を回避するためにどれだけの対策が必要か、現に施されているか、分析できてる?
0199デフォルトの名無しさん
垢版 |
2014/05/10(土) 10:13:35.23ID:u2Nh4I6f
goto花屋さんのスイートピー
0200デフォルトの名無しさん
垢版 |
2014/05/10(土) 19:50:06.65ID:mKccpFdG
車輪の再発明って火縄銃を分解して国産で作りあげてしまう日本人にしてみれば
実はピンと来ない言葉なんだよな。
分解作りなおすとか当然だろみたいな所あるじゃん。

「少なくともWikipediaの車輪のページに書かれてる程度の事は自力で思い付ける」
のはまさに再発見でありこれは100%意味が無いね
発想しなくても分解して学べばいいわけよ
0201デフォルトの名無しさん
垢版 |
2014/05/10(土) 22:23:26.21ID:m9xHqVTZ
> 火縄銃を分解して国産で作りあげてしまう

そんなことを知っている日本人はごくわずか。

勝手にピンと来ないことにするなよ。

馬鹿じゃねーの?
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況