これは完全に俺の理論なんだが
・例えばメソッド名は「any」とか「do」とか統一でいいと思う。
(引数個数と型によって呼ばれるメソッドが変わるオーバーロードがあるから)
・慣れたプログラマだったらコード読むときにメソッド名はなく引数でとか
静的型付け言語だったら型で処理を判断するだろ。
・メソッド名は同じクラス内で引数の型と個数、戻り値型が
全部被って初めて分けるべきだと思う。
・可読性はそんなに落ちないと思う。
落ちたとしても、print 系コマンドで値を出力する記述の手間が
格段に上がる(メソッド名を変えなくていい)し、
引数のバリエーションを変えて、挙動の確認が
やりやすくなる。デバッガを使えば、中間状態の値なんて簡単に
確認できる。だからメソッド名分ける必要はない。
・反対にメソッド名統一しとけば保守性、互換性、拡張性は格段に上がる。
・さらに特定の意図をもって「methodA」や「methodB」みたいに「グループ化」
するという使い方をすれば、何らかの使い分けできて便利だと思う。
・いちいち長いメソッド名を「メソッド1つ1つ」に割り当てて「意味付け」する
必要が全くない。
「メソッド名」分ける必要なくね?【オーバーロード】 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2017/07/30(日) 12:09:40.60ID:BhqS0uaq2017/07/30(日) 12:12:09.52ID:MHvXlxdG
素直にメソッド名つけるのが苦手です
どうしたらいいんでしょうか?って書けよw
どうしたらいいんでしょうか?って書けよw
3デフォルトの名無しさん
2017/07/30(日) 12:24:05.73ID:BhqS0uaq >>2 違う。
「メソッド名が同じ」なら、「引数変えるだけ」で「挙動が変えられる」
から。
デバッグしながらコーディングがしやすくなるから。
オブジェクトを変えただけでエラー無しで挙動が変えられるようになるから。
「メソッド名が同じ」なら、「引数変えるだけ」で「挙動が変えられる」
から。
デバッグしながらコーディングがしやすくなるから。
オブジェクトを変えただけでエラー無しで挙動が変えられるようになるから。
2017/07/30(日) 12:33:11.18ID:MHvXlxdG
訂正
「メソッド名が同じ」だと、「引数変えなければ」で「挙動が変えられない」
「メソッド名が同じ」だと、「引数変えなければ」で「挙動が変えられない」
5デフォルトの名無しさん
2017/07/30(日) 12:40:12.10ID:BhqS0uaq2017/07/30(日) 12:42:39.38ID:MHvXlxdG
はい訂正w
「引数のシグニチャがかぶった時は」
「メソッド名が同じ」だと、「引数変えなけれ」ば「挙動が変えられない」
「引数のシグニチャがかぶった時は」
「メソッド名が同じ」だと、「引数変えなけれ」ば「挙動が変えられない」
2017/07/30(日) 12:43:42.88ID:MHvXlxdG
引数変更しないといけないなー
あー、シグネチャが他とかぶってしまったー
名前変えなきゃー
最初っから別の名前にしておけば良かったなー
うははははあh
あー、シグネチャが他とかぶってしまったー
名前変えなきゃー
最初っから別の名前にしておけば良かったなー
うははははあh
8デフォルトの名無しさん
2017/07/30(日) 12:49:34.97ID:BhqS0uaq >>7
シグニチャはそんなにかぶらないと思う、
頻繁にかぶるとしたらなんらかの機能が重複してる可能性あるよ
「同じクラス内で全く同じ引数のパターンをとるメソッド」って
統合したほうがいいんじゃないかな? なんらかの設計に無駄があるよ。
(流石にString 1つとか int 1つとかは複数必要になるかもだが。)
シグニチャはそんなにかぶらないと思う、
頻繁にかぶるとしたらなんらかの機能が重複してる可能性あるよ
「同じクラス内で全く同じ引数のパターンをとるメソッド」って
統合したほうがいいんじゃないかな? なんらかの設計に無駄があるよ。
(流石にString 1つとか int 1つとかは複数必要になるかもだが。)
2017/07/30(日) 12:54:00.02ID:MHvXlxdG
Mathライブラリで引数が数値じゃないのって何があったかなーwww
引数がないメソッドって世の中いくつあんだろーwww
引数がないメソッドって世の中いくつあんだろーwww
2017/07/30(日) 12:59:48.91ID:MHvXlxdG
2017/07/30(日) 13:01:23.04ID:MHvXlxdG
こっちのリンクのほうが調べやすかったね
http://api.jquery.com/category/manipulation/
はい。そのメソッド名を一緒にできるとかいう主張を
ほれほれwやってみなさいよwww
お前の理屈だと、全部anyとかにできちゃうんだろう?www
http://api.jquery.com/category/manipulation/
はい。そのメソッド名を一緒にできるとかいう主張を
ほれほれwやってみなさいよwww
お前の理屈だと、全部anyとかにできちゃうんだろう?www
12デフォルトの名無しさん
2017/07/30(日) 13:08:13.85ID:BhqS0uaq >>11
う〜〜んMathもjQueryも「数学」「DOMオブジェクト」って
特化してるからなぁ「手続き(アルゴリズム)」の隠蔽系のメソッド
には確かに対応できないかもな、「ユーティリティ」って感じじゃないか?
でも普段俺ら一般人はこういうライブラリはもっぱら「使う」側で
あまり設計したり定義したりするわけじゃないだろ。
普段定義しているいろんな型のオブジェクトを生成して引数のやり取りが
多様になるアプリケーションなら俺の言っていることも間違っていないはず。
う〜〜んMathもjQueryも「数学」「DOMオブジェクト」って
特化してるからなぁ「手続き(アルゴリズム)」の隠蔽系のメソッド
には確かに対応できないかもな、「ユーティリティ」って感じじゃないか?
でも普段俺ら一般人はこういうライブラリはもっぱら「使う」側で
あまり設計したり定義したりするわけじゃないだろ。
普段定義しているいろんな型のオブジェクトを生成して引数のやり取りが
多様になるアプリケーションなら俺の言っていることも間違っていないはず。
2017/07/30(日) 13:14:08.26ID:Qh6Uum8+
似た機能をまとめるのはいいと思うけど
ぜんぜん違う機能を一緒にしたらあとから見たときにわけわからなくなるだろうな
ぜんぜん違う機能を一緒にしたらあとから見たときにわけわからなくなるだろうな
2017/07/30(日) 13:15:43.11ID:MHvXlxdG
ほーらよ。お馬鹿なお前に付き合って関数を全部anyにしてやったぜww
できるっていうなら、どれがどんな関数なのか判断してみーwww
http://9cguide.appspot.com/r_lib.html
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);
できるっていうなら、どれがどんな関数なのか判断してみーwww
http://9cguide.appspot.com/r_lib.html
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デフォルトの名無しさん
2017/07/30(日) 13:25:06.77ID:BhqS0uaq >>14
これでいい。判断は必要ない。引数値を与えてみて、その場で「結果」
を確認すればいい。
しかもこれC言語の「関数」だろ。
オブジェクト指向のメソッドじゃないだろ。
つまり沢山の「クラス型」が出て来る言語じゃないだろ?
char data[255] = "abcde";
fp = any("foo.txt", 'w');
any(fp, data);
any();
これでいい。判断は必要ない。引数値を与えてみて、その場で「結果」
を確認すればいい。
しかもこれC言語の「関数」だろ。
オブジェクト指向のメソッドじゃないだろ。
つまり沢山の「クラス型」が出て来る言語じゃないだろ?
char data[255] = "abcde";
fp = any("foo.txt", 'w');
any(fp, data);
any();
16デフォルトの名無しさん
2017/07/30(日) 13:31:38.15ID:BhqS0uaq2017/07/30(日) 13:31:56.07ID:MHvXlxdG
2017/07/30(日) 13:32:55.81ID:MHvXlxdG
19デフォルトの名無しさん
2017/07/30(日) 13:51:47.16ID:BhqS0uaq >>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);
}
ごめん、たしかに間違えた、あと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);
}
2017/07/30(日) 13:53:23.54ID:MHvXlxdG
2017/07/30(日) 13:56:29.59ID:MHvXlxdG
> 例えば、Javaですまんがこんな感じだ。「関数型プログラミング」
> に近いかも。
は? どこが?www
関数型プログラミングを知らないくせに
俺、すげーっとか考えてるだろwwww
> に近いかも。
は? どこが?www
関数型プログラミングを知らないくせに
俺、すげーっとか考えてるだろwwww
22デフォルトの名無しさん
2017/07/30(日) 14:01:07.63ID:BhqS0uaq >>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]);
}
}
あとは皆同じ。
えぇ?そこは主題じゃないんだが・・・
まあいいや上の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デフォルトの名無しさん
2017/07/30(日) 14:02:11.28ID:BhqS0uaq 見にくくてすみません。
インデント開けてるけど詰められてしまう。
インデント開けてるけど詰められてしまう。
24デフォルトの名無しさん
2017/07/30(日) 14:03:26.06ID:vTAtodni unko unko
2017/07/30(日) 14:10:59.00ID:MHvXlxdG
>>22
だから関数の中身かけって言ってるんじゃないんだよ。
その関数を使ったコードを書けって言ったんの
代わりにお入れが書いてやるわw
int main() {
if ( any(argv[1]) )
any()
any("a")
} else {
any(["a", "b", "c"]
}
}
こんな感じなんだろ?
んで、これ何するコードだと思う?w
ちなみにここでいうanyは俺が作ったアプリケーションのメソッドな。
だから関数の中身かけって言ってるんじゃないんだよ。
その関数を使ったコードを書けって言ったんの
代わりにお入れが書いてやるわw
int main() {
if ( any(argv[1]) )
any()
any("a")
} else {
any(["a", "b", "c"]
}
}
こんな感じなんだろ?
んで、これ何するコードだと思う?w
ちなみにここでいうanyは俺が作ったアプリケーションのメソッドな。
2017/07/30(日) 14:12:00.01ID:uiXc0u2O
うーんだめだね
ネタとしてつまんない
どれくらい釣れると思ってた?
ネタとしてつまんない
どれくらい釣れると思ってた?
2017/07/30(日) 14:15:51.82ID:MHvXlxdG
せやね。COBOLで関数名がID+連番になってるって
ネタの劣化版
FUNC0001
FUNC0002
FUNC0003
FUNC0004
でコード書くよりもつまらない釣り
ネタの劣化版
FUNC0001
FUNC0002
FUNC0003
FUNC0004
でコード書くよりもつまらない釣り
28デフォルトの名無しさん
2017/07/30(日) 14:21:42.80ID:BhqS0uaq >>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"]
}
}
ちょっと修正した。
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"]
}
}
2017/07/30(日) 14:27:43.55ID:MHvXlxdG
> String型を返すなら、 .toString() ぐらいの命名で全部同じにしちゃえば、
> 関数型プログラミングしやすくなると思ってそう言っただけ。
だからそれは関数型プログラミングと
まーーーーったく関係ない。
> 関数型プログラミングしやすくなると思ってそう言っただけ。
だからそれは関数型プログラミングと
まーーーーったく関係ない。
2017/07/30(日) 14:28:17.81ID:MHvXlxdG
> にはなるだろう。「Fooという型」のfooさんに、「この引数で何かしろ」
> といったら、Foo型の文脈で何かしてくれるイメージ。
何かって引数のファイルでも削除してくれるのかwww
> といったら、Foo型の文脈で何かしてくれるイメージ。
何かって引数のファイルでも削除してくれるのかwww
2017/07/30(日) 14:35:42.35ID:MHvXlxdG
気づいていないかもしれないけど、
俺が作ったアプリケーションもメソッドは、
Fooアプリケーション専用の設定ファイルを
扱うオブジェクトでanyっていうのはその設定ファイルを
削除するメソッドだぞw
any()だったら設定ファイル全削除な
any("a")は、aという名前で設定ファイルを作成するメソッド実行な
foo.any(["a", "b", "c"])は複数の設定ファイルを削除するメソッド実行だ
嘘だけどなw
本当はFooっていうのは(あとで考える)
俺が作ったアプリケーションもメソッドは、
Fooアプリケーション専用の設定ファイルを
扱うオブジェクトでanyっていうのはその設定ファイルを
削除するメソッドだぞw
any()だったら設定ファイル全削除な
any("a")は、aという名前で設定ファイルを作成するメソッド実行な
foo.any(["a", "b", "c"])は複数の設定ファイルを削除するメソッド実行だ
嘘だけどなw
本当はFooっていうのは(あとで考える)
2017/07/30(日) 14:36:23.53ID:MHvXlxdG
引数で区別できるっていうのなら
やってみせろやwww
やってみせろやwww
2017/07/30(日) 14:41:40.30ID:cdQ1+1zX
その制約を持った新しい言語を直ちに作ってリリースしろよ
良いと思った人間が多ければ使われるし、そうでなければ使われない
こんなところに長々と理屈を書いて同意を得ようとしても無意味。物を出せ
良いと思った人間が多ければ使われるし、そうでなければ使われない
こんなところに長々と理屈を書いて同意を得ようとしても無意味。物を出せ
34デフォルトの名無しさん
2017/07/30(日) 14:47:43.24ID:BhqS0uaq MHvXlxdG
あなたはCがメインのプログラマなんだろ
オブジェクト指向とか関数型を勉強すると
俺の言っていることが少しは分かるよ。
ソースから具体名を排除するとモジュール性が高くなって
部品として優秀になるんだよ。
ただ、ファイル出力とかユーティリティ系関数のことは全く考慮して
物事を言っていなかったのは認めるわ。
俺もちょっと考えが甘かった感は否めないな。
あなたはCがメインのプログラマなんだろ
オブジェクト指向とか関数型を勉強すると
俺の言っていることが少しは分かるよ。
ソースから具体名を排除するとモジュール性が高くなって
部品として優秀になるんだよ。
ただ、ファイル出力とかユーティリティ系関数のことは全く考慮して
物事を言っていなかったのは認めるわ。
俺もちょっと考えが甘かった感は否めないな。
2017/07/30(日) 14:49:21.81ID:MHvXlxdG
>>34
だからアプリケーション用の設定ファイルを扱うオブジェクトにしただろ
で、設定ファイルのanyメソッドはどうい動きをするって?
お前さっきから一つも実例出してないよな。
はっきり言おう
オマエ馬鹿だ
だからアプリケーション用の設定ファイルを扱うオブジェクトにしただろ
で、設定ファイルのanyメソッドはどうい動きをするって?
お前さっきから一つも実例出してないよな。
はっきり言おう
オマエ馬鹿だ
2017/07/30(日) 14:54:43.18ID:2zV1cvrd
2017/07/30(日) 15:20:12.26ID:cUhpqgWb
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)
やったぜ!!!!
cos(double)->any(double)
sin(double)->any(double)
tan(double)->any(double)
max(double,double)->any(double,double)
min(double,double)->any(double,double)
やったぜ!!!!
2017/07/30(日) 15:21:19.55ID:uWnLP08p
>>34
ファッ!?このレス上から目線で面白すぎィ!!
ファッ!?このレス上から目線で面白すぎィ!!
2017/07/30(日) 15:23:14.81ID:MHvXlxdG
ぶっちゃけ>>2が答
2017/07/30(日) 16:43:51.79ID:WIdXXLkI
他スレがほんのちょっと静かになったのは、ここに馬鹿が集まってるせいか
2017/07/31(月) 05:56:58.09ID:n54Tb1TV
オブジェクトのメソッドが呼ばれると内部的には、メソッド実行関数と、メソッド名が渡されている。
せっかく生産性上げるために、構文だサポートされてる機能をまた原始的にする必要はない。
せっかく生産性上げるために、構文だサポートされてる機能をまた原始的にする必要はない。
2017/08/01(火) 13:46:19.46ID:3HNK9QLp
オーバーロードって大体の言語で複数の型にヒットすればエラーになるようになってるから普通に実用性無いよ
2017/08/01(火) 15:03:53.64ID:R0nmZVxs
a=1+2*3 を
a=1;
a+=2;
a*=3;
とか書く代わりに
a=1;
a.method('add', 2);
a.method('mul', 3);
だとすっきりしてて気持ちいいな
a=1;
a+=2;
a*=3;
とか書く代わりに
a=1;
a.method('add', 2);
a.method('mul', 3);
だとすっきりしてて気持ちいいな
2017/08/01(火) 20:30:42.91ID:zRlG3ihR
なぜ a=1; の部分だけ残した?
ちゃんと
a.method('mov', 1);
にしろよ
ちゃんと
a.method('mov', 1);
にしろよ
45デフォルトの名無しさん
2017/08/02(水) 18:08:01.72ID:30cVPQS3 >>1
一理ある
一理ある
46デフォルトの名無しさん
2017/08/02(水) 19:49:19.29ID:Z5Qh/rzb 要するに、デバッグ出力する関数名はdebugで統一すればいいじゃんってことでOK?
出力する型に合わせて
debug_int
debug_date
とか関数名変えるのは面倒くさいと言うことだね。
そのとおりだと思う。
出力する型に合わせて
debug_int
debug_date
とか関数名変えるのは面倒くさいと言うことだね。
そのとおりだと思う。
■ このスレッドは過去ログ倉庫に格納されています
