「メソッド名」分ける ..
[2ch|▼Menu]
2:デフォルトの名無しさん
17/07/30 12:12:09.52 MHvXlxdG.net
素直にメソッド名つけるのが苦手です
どうしたらいいんでしょうか?って書けよw

3:デフォルトの名無しさん
17/07/30 12:24:05.73 BhqS0uaq.net
>>2 違う。
「メソッド名が同じ」なら、「引数変えるだけ」で「挙動が変えられる」
から。
デバッグしながらコーディングがしやすくなるから。
オブジェクトを変えただけでエラー無しで挙動が変えられるようになるから。

4:デフォルトの名無しさん
17/07/30 12:33:11.18 MHvXlxdG.net
訂正
「メソッド名が同じ」だと、「引数変えなければ」で「挙動が変えられない」

5:デフォルトの名無しさん
17/07/30 12:40:12.10 BhqS0uaq.net
>>4
それもちょっと違う。
だから>>1で、「引数のシグニチャがかぶった時だけ」メソッド名を
変える必要があるって言ってるし。
どのみちメソッド名変えても「引数が適合していなければエラーになる」
同じ名前にしておけば、「引数が適合するメソッドが自動的に選ばれる」。
こういうことをいいたんだよ。
つまり、一見ソースの可読性が悪くても、コンソール出力で引数ごちゃごちゃ
いじって動作を確認しているうちに、偶然「欲しかった結果」が何故か出てくる
って感じで呼び出し側でコーディングできる。
(返り値voidの内部状態変更系メソッドは厳しいかも。メソッド名必要かも)

6:デフォルトの名無しさん
17/07/30 12:42:39.38 MHvXlxdG.net
はい訂正w
「引数のシグニチャがかぶった時は」
「メソッド名が同じ」だと、「引数変えなけれ」ば「挙動が変えられない」

7:デフォルトの名無しさん
17/07/30 12:43:42.88 MHvXlxdG.net
引数変更しないといけないなー
あー、シグネチャが他とかぶってしまったー
名前変えなきゃー
最初っから別の名前にしておけば良かったなー

うははははあh

8:デフォルトの名無しさん
17/07/30 12:49:34.97 BhqS0uaq.net
>>7
シグニチャはそんなにかぶらないと思う、
頻繁にかぶるとしたらなんらかの機能が重複してる可能性あるよ
「同じクラス内で全く同じ引数のパターンをとるメソッド」って
統合したほうがいいんじゃないかな? なんらかの設計に無駄があるよ。
(流石にString 1つとか int 1つとかは複数必要になるかもだが。)

9:デフォルトの名無しさん
17/07/30 12:54:00.02 MHvXlxdG.net
Mathライブラリで引数が数値じゃないのって何があったかなーwww
引数がないメソッドって世の中いくつあんだろーwww

10:デフォルトの名無しさん
17/07/30 12:59:48.91 MHvXlxdG.net
はい、jQueryのドキュメント
URLリンク(api.jquery.com)
これのメソッド名統一してみーwww

11:デフォルトの名無しさん
17/07/30 13:01:23.04 MHvXlxdG.net
こっちのリンクのほうが調べやすかったね
URLリンク(api.jquery.com)

はい。そのメソッド名を一緒にできるとかいう主張を
ほれほれwやってみなさいよwww
お前の理屈だと、全部anyとかにできちゃうんだろう?www

12:デフォルトの名無しさん
17/07/30 13:08:13.85 BhqS0uaq.net
>>11
う〜〜んMathもjQueryも「数学」「DOMオブジェクト」って
特化してるからなぁ「手続き(アルゴリズム)」の隠蔽系のメソッド
には確かに対応できないかもな、「ユーティリティ」って感じじゃないか?
でも普段俺ら一般人はこういうライブラリはもっぱら「使う」側で
あまり設計したり定義したりするわけじゃないだろ。
普段定義しているいろんな型のオブジェクトを生成して引数のやり取りが
多様になるアプリケーションなら俺の言っていることも間違っていないはず。

13:デフォルトの名無しさん
17/07/30 13:14:08.26 Qh6Uum8+.net
似た機能をまとめるのはいいと思うけど
ぜんぜん違う機能を一緒にしたらあとから見たときにわけわからなくなるだろうな

14:デフォルトの名無しさん
17/07/30 13:15:43.11 MHvXlxdG.net
ほーらよ。お馬鹿なお前に付き合って関数を全部anyにしてやったぜww
できるっていうなら、どれがどんな関数なのか判断してみーwww
URLリンク(9cguide.appspot.com)
FILE *any(const char *filename, const char *mode); // ファイルを開く
int any(FILE *fp); // ファイルを閉じる
int any(FILE *fp); // ファイルから1文字読み出す。
int any(FILE *fp); // ↑と全く同じ
char *any(char *s, int n, FILE *fp); // 面倒だからあとはシグネチャで判断しろよ?w
int any(int c, FILE *fp);
int any(int c, FILE *fp); ↑と全く同じ
int any(const char *s, FILE *fp);
size_t any(void *ptr, size_t size, size_t nelem, FILE *fp);
size_t any(const void *ptr, size_t size, size_t nelem, FILE *fp);
int any(FILE *fp, const char *format, ...);
int any(FILE *fp, const char *format, ...);
long any(FILE *fp);
int any(FILE *fp, long offset, int ptrname);
int any(FILE *fp, fpos_t *ptr);
int any(FILE *fp, const fpos_t *ptr);
int any(FILE *fp);
int any(FILE *fp);
void any(FILE *fp);
int any(FILE *fp);
FILE *any(const char *filename, const char *mode, FILE *fp);
int any(const char *oldname, const char *newname);
int any(const char *filename);
int any(void);
int any(char c);
char *any(char *s);

15:デフォルトの名無しさん
17/07/30 13:25:06.77 BhqS0uaq.net
>>14
これでいい。判断は必要ない。引数値を与えてみて、その場で「結果」
を確認すればいい。
しかもこれC言語の「関数」だろ。
オブジェクト指向のメソッドじゃないだろ。
つまり沢山の「クラス型」が出て来る言語じゃないだろ?
char data[255] = "abcde";
fp = any("foo.txt", 'w');
any(fp, data);
any();

16:デフォルトの名無しさん
17/07/30 13:31:38.15 BhqS0uaq.net
>>11
もう1ついうとこれらもさっきのjQueryと同じで
Cの根幹を成す基本の関数だろ?
俺らが普段「設計」し「定義」するのはこういうのじゃなくて
アプリケーションのメソッドだよ。

17:デフォルトの名無しさん
17/07/30 13:31:56.07 MHvXlxdG.net
>>15のコードの意味
fp = rename("foo.txt", 'w');
fsetpos(fp, data);
getchar();

18:デフォルトの名無しさん
17/07/30 13:32:55.81 MHvXlxdG.net
>>16
> 俺らが普段「設計」し「定義」するのはこういうのじゃなくて
> アプリケーションのメソッドだよ。
具体的の10行(10メソッド)ぐらいの意味があるコードを書いてみやがれ

19:デフォルトの名無しさん
17/07/30 13:51:47.16 BhqS0uaq.net
>>18
ごめん、たしかに間違えた、あとCはそんなに詳しくないのに書いた。
でも実際に実行してみれば「ファイルストリーム」ができたのでなく、
「リネームされた」ってその場で気付ける。
例えば、Javaですまんがこんな感じだ。「関数型プログラミング」
に近いかも。
public abstract Foo{
public abstract void any();
public abstract void any(String arg);
public abstract void any(String[] args);
public abstract void any(int arg);
public abstract void any(Foo arg);
public abstract String toString();
public abstract String toString(String arg);
public abstract String toString(String[] args);
public abstract String toString(String arg1, String arg2);
public abstract String toString(String str, int i);
}

20:デフォルトの名無しさん
17/07/30 13:53:23.54 MHvXlxdG.net
>>19
それは只の関数定義。
それを使って意味があるコード掛けって言ってんの

21:デフォルトの名無しさん
17/07/30 13:56:29.59 MHvXlxdG.net
> 例えば、Javaですまんがこんな感じだ。「関数型プログラミング」
> に近いかも。
は? どこが?www
関数型プログラミングを知らないくせに
俺、すげーっとか考えてるだろwwww

22:デフォルトの名無しさん
17/07/30 14:01:07.63 BhqS0uaq.net
>>19
えぇ?そこは主題じゃないんだが・・・
まあいいや上の3つだけ書くよ。
public void any(){
System.out.println("Hello");
}
public void any(String arg){
System.out.println("Hello" + arg);
}
public void any(String[] args){
for(int i = 0; i < args.length; i++){
System.out.println("Hello" + args[i]);
}
}
あとは皆同じ。

23:デフォルトの名無しさん
17/07/30 14:02:11.28 BhqS0uaq.net
見にくくてすみません。
インデント開けてるけど詰められてしまう。

24:デフォルトの名無しさん
17/07/30 14:03:26.06 vTAtodni.net
unko unko

25:デフォルトの名無しさん
17/07/30 14:10:59.00 MHvXlxdG.net
>>22
だから関数の中身かけって言ってるんじゃないんだよ。
その関数を使ったコードを書けって言ったんの
代わりにお入れが書いてやるわw
int main() {
  if ( any(argv[1]) )
   any()
   any("a")
  } else {
   any(["a", "b", "c"]
  }
}
こんな感じなんだろ?
んで、これ何するコードだと思う?w

ちなみにここでいうanyは俺が作ったアプリケーションのメソッドな。

26:デフォルトの名無しさん
17/07/30 14:12:00.01 uiXc0u2O.net
うーんだめだね
ネタとしてつまんない
どれくらい釣れると思ってた?

27:デフォルトの名無しさん
17/07/30 14:15:51.82 MHvXlxdG.net
せやね。COBOLで関数名がID+連番になってるって
ネタの劣化版
FUNC0001
FUNC0002
FUNC0003
FUNC0004
でコード書くよりもつまらない釣り

28:デフォルトの名無しさん
17/07/30 14:21:42.80 BhqS0uaq.net
>>25
ちょっと修正した。
cとJava混ざっちゃっているけど、まあ雰囲気で捉えてくれ。
「fooというオブジェクトの範囲」であれば、なんとなく理解可能
にはなるだろう。「Fooという型」のfooさんに、「この引数で何かしろ」
といったら、Foo型の文脈で何かしてくれるイメージ。
あと、関数型プログラミングって言ったのにはあまり深い意味はない。
関数型では引数の型と戻り値の型が同じならチェーンできていい関数になるから、
じゃあメソッド名からは「戻り値の型」だけわかりゃいんじゃないかって思っただけ。
String型を返すなら、 .toString() ぐらいの命名で全部同じにしちゃえば、
関数型プログラミングしやすくなると思ってそう言っただけ。
int main() {
Foo foo = new Foo();
  if ( foo.any(argv[1]) )
   foo.any()
   foo.any("a")
  } else {
   foo.any(["a", "b", "c"]
  }
}

29:デフォルトの名無しさん
17/07/30 14:27:43.55 MHvXlxdG.net
> String型を返すなら、 .toString() ぐらいの命名で全部同じにしちゃえば、
> 関数型プログラミングしやすくなると思ってそう言っただけ。
だからそれは関数型プログラミングと
まーーーーったく関係ない。

30:デフォルトの名無しさん
17/07/30 14:28:17.81 MHvXlxdG.net
> にはなるだろう。「Fooという型」のfooさんに、「この引数で何かしろ」
> といったら、Foo型の文脈で何かしてくれるイメージ。
何かって引数のファイルでも削除してくれるのかwww

31:デフォルトの名無しさん
17/07/30 14:35:42.35 MHvXlxdG.net
気づいていないかもしれないけど、
俺が作ったアプリケーションもメソッドは、
Fooアプリケーション専用の設定ファイルを
扱うオブジェクトでanyっていうのはその設定ファイルを
削除するメソッドだぞw
any()だったら設定ファイル全削除な
any("a")は、aという名前で設定ファイルを作成するメソッド実行な
foo.any(["a", "b", "c"])は複数の設定ファイルを削除するメソッド実行だ

嘘だけどなw
本当はFooっていうのは(あとで考える)

32:デフォルトの名無しさん
17/07/30 14:36:23.53 MHvXlxdG.net
引数で区別できるっていうのなら
やってみせろやwww

33:デフォルトの名無しさん
17/07/30 14:41:40.30 cdQ1+1zX.net
その制約を持った新しい言語を直ちに作ってリリースしろよ
良いと思った人間が多ければ使われるし、そうでなければ使われない
こんなところに長々と理屈を書いて同意を得ようとしても無意味。物を出せ

34:デフォルトの名無しさん
17/07/30 14:47:43.24 BhqS0uaq.net
MHvXlxdG
あなたはCがメインのプログラマなんだろ
オブジェクト指向とか関数型を勉強すると
俺の言っていることが少しは分かるよ。
ソースから具体名を排除するとモジュール性が高くなって
部品として優秀になるんだよ。
ただ、ファイル出力とかユーティリティ系関数のことは全く考慮して
物事を言っていなかったのは認めるわ。
俺もちょっと考えが甘かった感は否めないな。

35:デフォルトの名無しさん
17/07/30 14:49:21.81 MHvXlxdG.net
>>34
だからアプリケーション用の設定ファイルを扱うオブジェクトにしただろ
で、設定ファイルのanyメソッドはどうい動きをするって?
お前さっきから一つも実例出してないよな。
はっきり言おう
オマエ馬鹿だ

36:デフォルトの名無しさん
17/07/30 14:54:43.18 2zV1cvrd.net
>>34
オブジェクト指向も関数型も、そしてCも
ちゃんと理解できていないのは君の方だと思うけど

37:デフォルトの名無しさん
17/07/30 15:20:12.26 cUhpqgWb.net
exp(double)->any(double)
cos(double)->any(double)
sin(double)->any(double)
tan(double)->any(double)
max(double,double)->any(double,double)
min(double,double)->any(double,double)
やったぜ!!!!

38:デフォルトの名無しさん
17/07/30 15:21:19.55 uWnLP08p.net
>>34
ファッ!?このレス上から目線で面白すぎィ!!

39:デフォルトの名無しさん
17/07/30 15:23:14.81 MHvXlxdG.net
ぶっちゃけ>>2が答

40:デフォルトの名無しさん
17/07/30 16:43:51.79 WIdXXLkI.net
他スレがほんのちょっと静かになったのは、ここに馬鹿が集まってるせいか

41:デフォルトの名無しさん
17/07/31 05:56:58.09 n54Tb1TV.net
オブジェクトのメソッドが呼ばれると内部的には、メソッド実行関数と、メソッド名が渡されている。
せっかく生産性上げるために、構文だサポートされてる機能をまた原始的にする必要はない。

42:デフォルトの名無しさん
17/08/01 13:46:19.46 3HNK9QLp.net
オーバーロードって大体の言語で複数の型にヒットすればエラーになるようになってるから普通に実用性無いよ

43:デフォルトの名無しさん
17/08/01 15:03:53.64 R0nmZVxs.net
a=1+2*3 を
a=1;
a+=2;
a*=3;
とか書く代わりに
a=1;
a.method('add', 2);
a.method('mul', 3);
だとすっきりしてて気持ちいいな

44:デフォルトの名無しさん
17/08/01 20:30:42.91 zRlG3ihR.net
なぜ a=1; の部分だけ残した?
ちゃんと
a.method('mov', 1);
にしろよ

45:デフォルトの名無しさん
17/08/02 18:08:01.72 30cVPQS3.net
>>1
一理ある

46:デフォルトの名無しさん
17/08/02 19:49:19.29 Z5Qh/rzb.net
要するに、デバッグ出力する関数名はdebugで統一すればいいじゃんってことでOK?
出力する型に合わせて
debug_int
debug_date
とか関数名変えるのは面倒くさいと言うことだね。
そのとおりだと思う。

47:デフォルトの名無しさん
17/08/02 20:53:32.06 trs+oWK4.net
書くときはだろ。
読むときは具体的なコードのがマシ。
抽象馬鹿が書いたコードが一番邪魔。

48:デフォルトの名無しさん
17/08/02 23:15:01.68 Kt8sLKWk.net
>>46
> 要するに、デバッグ出力する関数名はdebugで統一すればいいじゃんってことでOK?
>>1が言ってるのは、関数名を一つにして引数で切り替えろと言ってる。
だからデバッグ出力する関数名もanyとかで
any(なんたら)ってやったらデバッグ出力させたいということ。
any("文字列") で、puts("文字列")
any("文字列")で、debug("文字列")
という風に、引数で関数名を見分けたいらしい。どうやって?(大爆笑)

49:デフォルトの名無しさん
17/08/03 07:04:32.69 FgpTsL69.net
>>48
「見分ける」って言うより、「結果が得られればOK」ってことじゃない?
中で何かやるvoid型や外部や永続化機構とやり取りするAPIだと危ないな。

50:sage
17/08/03 10:10:40.78 OdVXAC/k.net
なんで車輪を再発明したがるん?

51:デフォルトの名無しさん
17/08/03 12:10:06.37 0AtlPHCv.net
>>48
それは>>43-44で解消されてる

52:デフォルトの名無しさん
17/08/03 13:05:59.57 VGeKeN5L.net
全部 void* で、アセンブラコーディングすればいいと言ってるようなもの。
>・さらに特定の意図をもって「methodA」や「methodB」みたいに「グループ化」
> するという使い方をすれば、何らかの使い分けできて便利だと思う。
>・いちいち長いメソッド名を「メソッド1つ1つ」に割り当てて「意味付け」する
> 必要が全くない。
結局、「意味」だろうと抽象的な枠だろうと「グループ化」という括りで
考えてみて、整理するってのが大事ってのが本質だろう。
関数型だろうがオブジェクト指向だろうが結局はどのように整理してまとめるのか
ってのが本質なわけだから。

53:デフォルトの名無しさん
17/08/03 19:35:48.68 FgpTsL69.net
>>50
いろんな車輪が必要だからやで、
チャリンコの車輪とロードローラーの車輪は「違うもの」やからやで。

54:デフォルトの名無しさん
17/08/03 20:15:48.36 qN63KjBr.net
メソッド名はモデル化の重要な要素だよ
これは何をやってるのかを端的に表せる
それをDOやANYにするのは愚かすぎる

55:デフォルトの名無しさん
17/08/03 20:46:34.72 jHHWrU0N.net
>>51
> それは>>43-44で解消されてる
関数名を全部anyにして、第一引数に関数名を入れるってこと?
それ何の意味があるの?

56:デフォルトの名無しさん
17/08/03 20:49:33.79 Wy5AX0em.net
しいて言えば呼び出し先を決定するのが動的になる
が、どちらかというとディメリットだな

57:デフォルトの名無しさん
17/08/03 20:53:42.35 jHHWrU0N.net
こんな感じのコードになるんですかね?
function any(name, arg1, arg2, arg3, ...) {
 switch(name) {
 case 'add' :
   元add関数の中身
 case 'sub'':
   元sub関数の中身
 case 'mul':
   元mul関数の中身
 case 'div':
   元div関数の中身
 case:
  :
  :数万行
 }
}

58:デフォルトの名無しさん
17/08/03 20:55:41.17 9rdLVHxU.net
汎用性を上げれば上げるほど何もしないクラスになる

59:デフォルトの名無しさん
17/08/03 20:58:08.12 9rdLVHxU.net
どんな設計書を記述して
それをどんな実現方法で実現して欲しいのか
思想が見えない
ただ、奇をてらっただけのアホなアイディア

60:デフォルトの名無しさん
17/08/04 11:57:57.58 JMApPqgm.net
>>55
エントリポイントが1個で済むからリロケータブルで配布する時に楽

61:デフォルトの名無しさん
17/08/04 13:09:10.75 d3YpkD+n.net
アホか
IDEの支援が受けれない
コンパイル時にエラーチェックされない
実行にエラーがでるまでバグが隠れる

62:デフォルトの名無しさん
17/08/04 14:32:21.58 lij57f0O.net
同じ型を取ってもオーバーロードしたいときがたまにあるんだが
しかも総称型のときは引数1つ余計に増えるんだが

63:デフォルトの名無しさん
17/08/04 14:56:56.48 +Pl+SuD3.net
メソッド名は動詞だけで十分、引数が目的語を担うからメソッド名に目的語を入れるのは邪道
という話に勝手に勘違いしてた

64:デフォルトの名無しさん
17/08/05 14:24:06.15 pAL2FsqO.net
a.add(b)
add(a,b)
(add a b)
lisp使えば全部引数っぽいぞ
オブジェクト指向の文法はperlやpython見ればわかるが1番目の引数をオブジェクトとして必ず渡すってルールと変わらない
関数、メソッド名をarg0と考えれば要素の羅列でしかない
>>1
人と話す時、全ての引数を読み上げるのか?
ドキュメントにいちいち長い引数羅列するのか?
ぼっち趣味プログラマなのか

65:デフォルトの名無しさん
17/08/07 19:39:07.98 KYx8Kn3i.net
とりあえずなんか具体的なもん出してくれりゃいいのに
FOOとかBARじゃわからんわ

66:デフォルトの名無しさん
17/08/08 11:57:17.43 lBJjevEI.net
なんかこの手の人の思考としては
具体的なもの書いたらそれに引きずられるから書かないみたいなことを
思ってるんじゃないかね。
実際はそれだとまったく中身のないコードになってしまうわけだが。
確かに具体的なものがだらだら書かれるのはよくないけれど、
重要なことは抽象概念と具体的なものがどこでどうつながっているかが
明確なことだと思う。
明確ならばリファクタリングするなりで抽象部分を抜き出すのはそう難しいことじゃない。

67:デフォルトの名無しさん
17/08/08 12:50:57.21 m8GLf68F.net
でもプログラミング言語なら四則演算ぐらいは出来ないと話にならないから
その方面から攻めていけば?
例えば「足し算」と「掛け算」の記号やメソッド名が同じだった場合
どうやって区別すればよい?
型で区別するっつっても、その型の場合は常に引き算になるとか
意味わからないことになるよ

68:デフォルトの名無しさん
17/08/19 00:53:40.52 WAJdahb2.net
do(print ”helo” print)
こうですか?


最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

2340日前に更新/23 KB
担当:undef