プログラミング雑談スレ++
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2013/11/14(木) 18:55:43.66■前スレ
プログラミング雑談スレ
http://toro.2ch.net/test/read.cgi/tech/1363792124/
0002デフォルトの名無しさん
2013/11/14(木) 18:57:39.82,,イ`" 、-' `;_' ' ..::::::::::::::...
,-、 _.._ ( (,(~ヽ'~ ..:::::::::::::::::::::::
)'~ レー' 〉 ヽ i`'} .:::::::::::::::::::::::
~つ '-ー、 i | i' ...:::::::::::::::::::::::
/ < / 。/ ! ......::::::::::::::::::::::::: これは>>1乙じゃなくて
/ ~^´ /},-'' ,●::::::::::::::::::::::::::::::::::::
i、 ,i' _,,...,-‐-、/ i :::::::: .:::::::::::::
..ゝ <,,-==、 ,,-,/ .::::::::::: 放射能がうんたら
) {~''~>`v-''`ー゙`'~ ..::::::::: ........::.
{ レ_ノ ..::::::::. ......:::::::::
ノ '' ..::::::: ...::.:...:::::::::
.::::::::: ...:......:::::::::::: .
.:::::::::::. ..... .. ..:::::::::::::::::::::::: :::.
::::::::::::::::.::::::....:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::.. :: ::..
.:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::: ::.
::::::::::::::::: :::::::::::::::::::::::::::::: :::::
.:: ::. :::
0003デフォルトの名無しさん
2013/11/14(木) 19:17:26.04乙
3スレ目は、
「プログラミング雑談スレ#」
になるんだろうか
0004デフォルトの名無しさん
2013/11/14(木) 19:36:24.30>>3に俺が言いたかった事言われた
0005デフォルトの名無しさん
2013/11/14(木) 19:53:24.78その次はDだな
0006デフォルトの名無しさん
2013/11/14(木) 20:01:28.20++++にならない事を願う
0007デフォルトの名無しさん
2013/11/14(木) 20:57:58.060008デフォルトの名無しさん
2013/11/14(木) 20:58:58.190009デフォルトの名無しさん
2013/11/14(木) 21:25:34.860010デフォルトの名無しさん
2013/11/14(木) 21:26:45.75どんな知識が必要?ExcelVBAとUNIX系とSQLを少しずつできる程度です
Javaでのアプリ開発の参考書で作れるようになる?
0011デフォルトの名無しさん
2013/11/14(木) 21:27:34.570012デフォルトの名無しさん
2013/11/14(木) 21:27:35.43皆さん正座して待ちましょう。
0013デフォルトの名無しさん
2013/11/14(木) 21:28:53.49それぞれのロジックを簡単に説明して下さい
0014デフォルトの名無しさん
2013/11/14(木) 21:29:43.47{
static void Main(string[] args)
{
int プログラミング雑談スレ = 1;
Console.WriteLine(プログラミング雑談スレ++);
}
}
0015デフォルトの名無しさん
2013/11/14(木) 21:32:56.76Javaのうすい参考書かるーくやって
Androidの参考書を書いたまえ。
飽きてやめることのないよう、わからない事はおまじないとしてどんどんスルーしたまえ。
作ってたらそのうち詳しくなってくる。
0016デフォルトの名無しさん
2013/11/14(木) 21:36:16.73単純ソートとバブルソートって同じじゃね?
0017デフォルトの名無しさん
2013/11/14(木) 21:37:09.71おまじないが肝なのだと読みました。アドバイスありがとうございます!
0018デフォルトの名無しさん
2013/11/14(木) 21:55:00.46いきなり執筆しろとはハードルたけえな
0019デフォルトの名無しさん
2013/11/14(木) 22:29:11.77に
#include <stdio.h>
double f(double d) { return d + 1.0; }
int main() {
if (f(0.1) == f(0.1)) {
printf("equal\n");
} else {
printf("not equal\n");
}
return 0;
}
が
>次のプログラムをx86上のGCC 4.6.3でオプションなしでコンパイルすると、「not equal」が出力される。
とあるように手元にあるgccでビルドしたところ「not equal」が表示されました。
これはなぜなんでしょう。怖くて夜も眠れません。
0020デフォルトの名無しさん
2013/11/14(木) 22:56:11.600021デフォルトの名無しさん
2013/11/14(木) 23:00:30.99double f(double d) { return d + 1.0; }
int main() {
if (f(0.1) - f(0.1)) {
printf("not zero\n");
} else {
printf("zero\n");
}
return 0;
}
0022デフォルトの名無しさん
2013/11/14(木) 23:03:10.81ってのは浮動小数点問題で普通にあるけど>>19は初めて知った
0023デフォルトの名無しさん
2013/11/14(木) 23:16:04.600024デフォルトの名無しさん
2013/11/14(木) 23:23:25.470025デフォルトの名無しさん
2013/11/14(木) 23:25:26.22だから両者で行われている演算の内容が異なると見るしかない
最初の f(0.1) の結果はいったんメモリに格納されるために 64 ビットの精度に落ちて
2度めの f(0.1) の結果はレジスタに載ったまま 80 ビットの精度が維持され
それを比較したために結果が異なるんではないかと推測するがどうか
0026デフォルトの名無しさん
2013/11/14(木) 23:34:02.20http://0xcc.net/blog/archives/000164.html
0027デフォルトの名無しさん
2013/11/14(木) 23:37:32.620028デフォルトの名無しさん
2013/11/14(木) 23:45:01.680029デフォルトの名無しさん
2013/11/14(木) 23:47:02.670030デフォルトの名無しさん
2013/11/14(木) 23:52:11.87バグだろ
0031デフォルトの名無しさん
2013/11/15(金) 00:09:26.61> thereby omitting rounding errors implied by the source code and the expression evaluation method.
とあるから規格で認められている挙動になるのでは?
0032デフォルトの名無しさん
2013/11/15(金) 00:14:11.250033デフォルトの名無しさん
2013/11/15(金) 00:14:59.470034デフォルトの名無しさん
2013/11/15(金) 00:15:44.95目的に応じてその値を定めるのが設計
0035デフォルトの名無しさん
2013/11/15(金) 01:04:25.730036デフォルトの名無しさん
2013/11/15(金) 02:03:53.94え?
今はなに?
0037デフォルトの名無しさん
2013/11/15(金) 02:06:07.76Number.EPSILON = 2.2204460492503130808472633361816E-16
ただしdouble同士の誤差
0038デフォルトの名無しさん
2013/11/15(金) 02:37:12.18ちょっと小さ過ぎる
0039デフォルトの名無しさん
2013/11/15(金) 07:55:48.21マージソート
0040デフォルトの名無しさん
2013/11/15(金) 10:11:09.82abs(a-b) < max(a,b) * 2 * EPSILON
0041デフォルトの名無しさん
2013/11/15(金) 10:56:51.63どういう意味?
0042デフォルトの名無しさん
2013/11/15(金) 12:04:58.65計算する式だった希ガス
左辺って何だっけ
0043デフォルトの名無しさん
2013/11/15(金) 16:20:41.63微妙に低くていいね
入りやすいよ
0044デフォルトの名無しさん
2013/11/15(金) 16:25:29.550045デフォルトの名無しさん
2013/11/15(金) 16:28:32.25Σ(-1)^(n-1)・1/(2n+1)の四倍が
3.14159265に近づいていかないのは
丸め誤差が原因
0046デフォルトの名無しさん
2013/11/15(金) 16:43:51.280047デフォルトの名無しさん
2013/11/15(金) 16:52:19.17何言語で質問したり答えたりしてるのか
よくわからん
0048デフォルトの名無しさん
2013/11/15(金) 16:55:00.35自分の経験したことある言語でのふと思った事をただ書いてるだけじゃないのん
0049デフォルトの名無しさん
2013/11/15(金) 17:04:55.15マイナーな言語はレスが減るかもしれないが
0050デフォルトの名無しさん
2013/11/15(金) 17:18:20.17やたらEXCEL推しが凄かったんだが
その中でINDIRECT関数が凄い便利ってレスしてる奴が居たんだが
使ってみたけどそんなに2chで喧騒するほどでもないと感じたんだが
俺が思うより便利な使い方があるのだろうか?
ただ単にプログラムしない奴がEXCELで
多少動的な処理出来たから感動したってだけなのかな?
0051デフォルトの名無しさん
2013/11/15(金) 17:21:59.73N+ってどんな言語なんだ!?って思った
0052デフォルトの名無しさん
2013/11/15(金) 17:35:44.04× 解答
○ 回答
キミのレベルも微妙……じゃないけど低くていいね。
0053デフォルトの名無しさん
2013/11/15(金) 17:39:36.66すまんな
関数型言語出身だから
解答のがしっくりくる
プログラムの実行じゃなくて評価みたいなもんで
0054デフォルトの名無しさん
2013/11/15(金) 18:58:16.83これ始めてから充分食えるだけの利益出るようになった。
0055デフォルトの名無しさん
2013/11/15(金) 19:07:58.78そういうのは秘密にしとかなきゃいけませんよw
0056デフォルトの名無しさん
2013/11/15(金) 19:12:36.32実はそれ逆なんです。
おおっぴらに書くと仕手筋認定されるので書けないだけで、自分が何を買ったか
何を買うべきか公表できるなら公表したほうが儲かるんですよ。
0057デフォルトの名無しさん
2013/11/15(金) 19:14:29.50なんだその程度のプログラマなんですか。忠告した僕がバカでした。
0058デフォルトの名無しさん
2013/11/15(金) 19:21:47.870059デフォルトの名無しさん
2013/11/15(金) 20:02:44.18自分が売買する量が増えていくと
0060デフォルトの名無しさん
2013/11/15(金) 20:52:51.550061デフォルトの名無しさん
2013/11/15(金) 21:19:52.22わかります
0062デフォルトの名無しさん
2013/11/15(金) 21:35:22.91種あかしをすれば、ビッグデータ解析で株取引のハブをみつけたんだな。
そんなビッグデータを扱えるのは大会社のコンピュータだけなんだが・・・
インサイダー取引か、業務上背任で通報しとくよ。
#ハブはどこだYO,こっそり教えろよw
0063デフォルトの名無しさん
2013/11/15(金) 21:38:33.23800
600
400
400
400
200
ってデータがあった時に
1000
800
600
402 (更新)
401 (更新)
400
200
っていう処理が必要なんだけど、思ってたより凄い面倒。思いつかん。
要するに降順ソートしたい際に、値をユニークにしたいだけなんだが。センス無いのかね
0064デフォルトの名無しさん
2013/11/15(金) 21:40:08.910065デフォルトの名無しさん
2013/11/15(金) 22:14:18.150066デフォルトの名無しさん
2013/11/15(金) 22:18:33.57そうやると・・・
200と400。何もしない
400と400。上を401にする
401と400。何もしない
って動いて、
1000
800
600
400
401
400
200
ってなるって、30分考えて気付いた
0067デフォルトの名無しさん
2013/11/15(金) 22:21:13.020068デフォルトの名無しさん
2013/11/15(金) 22:27:01.54同じなら n足す
小さいなら n=n+1してからn足す
大きいなら n=1する
0069デフォルトの名無しさん
2013/11/15(金) 22:38:20.52だめだ
0070デフォルトの名無しさん
2013/11/15(金) 22:40:43.040071デフォルトの名無しさん
2013/11/15(金) 22:45:14.380072デフォルトの名無しさん
2013/11/15(金) 22:49:10.44上からまわしてるの?下からまわしてるの?
0073デフォルトの名無しさん
2013/11/15(金) 22:50:31.000074デフォルトの名無しさん
2013/11/15(金) 22:52:01.15ユニークにできないくらい詰まってたらどうすんだよ
0075デフォルトの名無しさん
2013/11/15(金) 23:04:22.58もともとは新しい奴を上、古い奴を下と、エポックタイム降順でソートしていた
仕様変更でこの順序を手動で並び替えできるようにする必要があった
ソートインデックスをカラムに追加するのは面倒なので、エポックタイプをあれこれして手動ソートできるようにしたい
という最悪の設計思想の結果これが必要になった。
ユニークにできないくらい詰まってるほどのデータ件数はない
0076デフォルトの名無しさん
2013/11/15(金) 23:06:04.79OpenCL関係なくね。
それにクイックソートとかは初回が終われば問題が分割されるから並列化は余裕。
バブルの方は良く分らんが・・・
バブルで回すようなサイズの問題が出てきて並列の速度求める状況なら、
問題自体を並列に回せるだろうから実用上問題ないとかじゃないかな。
>>39
マージはワークエリアが要るんじゃなかったか。
0077デフォルトの名無しさん
2013/11/15(金) 23:10:05.15どうしてそうなる
200と400。何もしない
400と400。上を401にする
401と400。上を402にする
ってなるだろよく読め
百の位以上の桁、つまり/100したのが等しいかで確認すればいいんだよ
0078デフォルトの名無しさん
2013/11/15(金) 23:14:02.55メインが同じ数だったら、サブの数値で比較するのが普通だけどな。
0079デフォルトの名無しさん
2013/11/15(金) 23:23:07.61だな。
1足していって突き抜けないかどうかのケアがいるし、
足すことに対する整合性で早速困ってるじゃないか。
0080デフォルトの名無しさん
2013/11/15(金) 23:25:15.77当然同じ数値は100個以下でなくちゃいけないけど
arr = [1000,800,600,400,400,400,200]
arr.reduceRight((r,l,i,a)=>((r/100|0)==(l/100|0))?(a[i]=r+1):l)
arr //[1000,800,600,402,401,400,200]
0081デフォルトの名無しさん
2013/11/15(金) 23:32:52.49arr.reduceRight((r,l,i,a)=>(r-l)/100|0?l:a[i]=r+1)
0082デフォルトの名無しさん
2013/11/15(金) 23:43:55.86御託はいいからOpenCLで並列クイックソートと
バブルソートはよう。並列化に耐えるんだろ。
0083デフォルトの名無しさん
2013/11/16(土) 01:22:38.05連続した重複行を1行にまとめるのは、よくある
sort | uniq
1行にして書くと、
400,200,400,600,400が、
600,400,200になる
また逆に、uniqで、重複行だけも取り出せる
sortにも、重複をなくすオプションもあるかも
0084デフォルトの名無しさん
2013/11/16(土) 08:10:52.730085デフォルトの名無しさん
2013/11/16(土) 09:21:48.83valueのデフォを0として、
int uniqval(int key ){
int ans = map[ key ] + key
map[ key ] = map[ key ] + 1
return ans; }
でいける気がするけど。
0086デフォルトの名無しさん
2013/11/16(土) 09:51:17.53どうやったらいいの?
0087デフォルトの名無しさん
2013/11/16(土) 09:59:10.480088デフォルトの名無しさん
2013/11/16(土) 11:09:25.390089デフォルトの名無しさん
2013/11/16(土) 12:01:03.33setつかえよ
0090デフォルトの名無しさん
2013/11/16(土) 12:22:32.380091デフォルトの名無しさん
2013/11/16(土) 12:37:49.37と宣言すればおk
0092デフォルトの名無しさん
2013/11/16(土) 12:52:11.950093デフォルトの名無しさん
2013/11/16(土) 13:14:00.47Base64
uuencode
ISH
なんなりと
0094デフォルトの名無しさん
2013/11/16(土) 13:37:07.530095デフォルトの名無しさん
2013/11/16(土) 13:58:14.33・メンバ関数の引数に指定する
・関数内でメンバ変数からとるようにする
のってどう使いわければいい?
入力がクラスのメンバ変数として妥当かどうか?
0096デフォルトの名無しさん
2013/11/16(土) 14:06:44.070097デフォルトの名無しさん
2013/11/16(土) 14:09:50.87みんなそうしてる
0098デフォルトの名無しさん
2013/11/16(土) 15:21:29.19なるべく引数にした方がいいってこと?
>>97
まじで・・・
そもそも設計の知識不足なだけかもしれん
0099デフォルトの名無しさん
2013/11/16(土) 15:25:21.66前スレ 711より
#define ___ /* empty; インデント用 --- 掃除したけりゃ %s/___ /\t/g とかで */
___ int i;
___ for (i = 0; i < 100; ++i) {
___ ___ fizzbuzz(i);
___ }
0100デフォルトの名無しさん
2013/11/16(土) 15:39:49.68データの性質による。
例えばよく変化するデータならコピーをとるのはバグでしかないし
プログラムの終了まで不変ならいちいち引数を取るのはムダ。
何にしてもそのインスタンスにどの程度の責任を与えるかという話なんで、
デザパタの本でも読み直して考えた方が良い。
0101デフォルトの名無しさん
2013/11/16(土) 16:31:09.43クラス名を見て
こういうメンバがありそうだなと容易に推測できる場合はメンバ
関数名を見て
こういう引数がありそうだなと容易に推測できる場合は引数
そこから先は経験
0102デフォルトの名無しさん
2013/11/16(土) 17:41:11.96マジレスすると
引数なら呼び出し側が値を指定するため
その値は呼び出し側の箇所だけの影響となるが
メンバ変数はオブジェクトの状態なので
クラスの設計とクラスの使い方に影響する。
どっちのほうが見通しがいいかで決めるのがいい。
この見通しの判断もチームメンバー構成や立場などによっても変化する。
0103デフォルトの名無しさん
2013/11/16(土) 18:02:01.35>>101
>>102
ありがとう すごい参考になった
たぶん悩んでる原因はクラスの規模が小さいせいで
入力がメンバ変数でも引数でも大きな違いがでなくてわかりづらいからだと思う
とりあえず他のチームメンバにも相談してみるわ
0104デフォルトの名無しさん
2013/11/16(土) 21:17:37.34OpenCLなんて条件どっから湧いて出てきたんだよ
0105デフォルトの名無しさん
2013/11/17(日) 09:45:56.97実用に耐えるんだろ
グダグダ言って逃げ回らないで
はよ書けよ
0106デフォルトの名無しさん
2013/11/17(日) 11:53:11.21それに俺は前スレ>>993ではないので知ったこっちゃありません。
0107デフォルトの名無しさん
2013/11/17(日) 13:21:35.100108デフォルトの名無しさん
2013/11/17(日) 14:24:52.30っ鏡
0109デフォルトの名無しさん
2013/11/17(日) 14:42:26.660110デフォルトの名無しさん
2013/11/17(日) 15:08:23.49お前は赤ちゃんか?
自分の顔くらい自分で見ろ
0111デフォルトの名無しさん
2013/11/17(日) 15:41:19.97普段は相手を許し認めて自分も許され認められてるんでしょ
いつもの感じでやろうよ中高生じゃないんだし
0112デフォルトの名無しさん
2013/11/17(日) 15:55:07.12お前も随分と喧嘩腰だな
0113デフォルトの名無しさん
2013/11/17(日) 17:14:26.44明日が月曜日であるという事実は変わらない
0114デフォルトの名無しさん
2013/11/17(日) 18:52:22.070115デフォルトの名無しさん
2013/11/17(日) 18:55:34.22俺も月曜に休みたいよ
0116デフォルトの名無しさん
2013/11/17(日) 18:56:40.050117デフォルトの名無しさん
2013/11/17(日) 18:59:27.33コネを持ってたり、技術を持ってるのと同じ水準で
0118デフォルトの名無しさん
2013/11/17(日) 19:23:50.25現実の用途で使えるから実用性があると言うんだろ。
今並列化したソートで意味がある速度出せるつったらGPUだ。
CPUで並列化させるぐらいなら単一コアで実行させた方がよっぽど現実的。
CPUで並列化ソートなんて遊びの範疇で実用的じゃない。
0119デフォルトの名無しさん
2013/11/17(日) 19:30:56.64マルチコアのご時世でそうなるのか?
0120デフォルトの名無しさん
2013/11/17(日) 19:35:07.05自分でそのレス書きながら、そんな事言い切れるわけがない。って気づいてるだろwww
0121デフォルトの名無しさん
2013/11/17(日) 19:36:29.910122デフォルトの名無しさん
2013/11/17(日) 19:40:41.444コアあるだけで3倍になる
0123デフォルトの名無しさん
2013/11/17(日) 19:43:15.10なにがしたいのか書いてみ。ちっさいクラスでもメンバーで
値を持つ意味がある場合は多いぞ。
例えば、こんな例。
FloatConvertor value1( 1.5 )
StringConvertor value2( "10" );
const ToDoubleConvertor *convertor;
convertor = &value1;
double x = convert->AsDouble();
convertor = &value2;
double y = convert->AsDouble();
ただベタ書きではあまり意味はないが、
convertorが引数の場合は、引き数に与える値を、
FloatConvertor型の値にしたり
StringConvertor型にしたりして処理を切り替えられる。
0124デフォルトの名無しさん
2013/11/17(日) 19:44:40.11お前は、はようコードを出せ。
0125デフォルトの名無しさん
2013/11/17(日) 19:45:52.38ならねぇよロックやらスレッドコストやらで2倍いけば御の字だろうが。
0126デフォルトの名無しさん
2013/11/17(日) 19:48:44.75クイックソートとか最初の方どうしても単一コアで処理する必要があるから3倍なんて(ヾノ・∀・`)ムリムリ
0127デフォルトの名無しさん
2013/11/17(日) 19:50:39.59あ、お前上のほうのレスでコード出せだせ言ってた奴か
俺はその相手じゃないよ。
ただどんなGPUとCPUを使ってるかによって話は全然変わるのに
言い切るのは乱暴だなーってだけ。
とっても並列処理が早いGPUと、遅いCPUなら、お前の言ってる通りになるんだろ
0128デフォルトの名無しさん
2013/11/17(日) 21:51:36.82言い訳ばかりで何もしない社会のクズ
0129デフォルトの名無しさん
2013/11/17(日) 21:57:35.95マージソートの並列化でロックなんか必要ないぞ、この馬鹿
0130デフォルトの名無しさん
2013/11/17(日) 22:01:58.210131デフォルトの名無しさん
2013/11/17(日) 22:13:25.33一般人だとそもそもそんな大規模なデータがない
0132デフォルトの名無しさん
2013/11/17(日) 22:21:44.34チューニングしたDBのSQLロジックより早いソートが自前で書けるなら別だが
0133デフォルトの名無しさん
2013/11/17(日) 22:23:53.98お前がマージソート並みに実用性のある並列処理ができるっていってたのはクイックソートだろボケ
マージソートでロック不要なのはわかりきっとるわ
話ごまかして楽な方に逃げようとすんなクズ
0134デフォルトの名無しさん
2013/11/17(日) 22:33:44.66ソートする対象が大体分かってるものだし、
最初から全て用意されてることよりも徐々に追加されることのほうが多いから
まず追加される度に適当そうな位置に挿入してその後ソートする
0135デフォルトの名無しさん
2013/11/17(日) 22:36:24.56クイックソートみたいに2分割を繰り返すソートだと
それに加えコアに分割されたキャッシュが響く
ソート済みのキャッシュを全コアに反映せにゃならんからな。
>>130
クイックソートするときソート結果を何処に保持させる気だ
同じ書き込み先の配列を共有しない場合は、
毎回メモリーの再確保が発生するぞ。
当然その場合もメモリー確保コストに加え、
メモリー管理の排他が発生するから、
どのみち排他する事になるんだがな。
0136デフォルトの名無しさん
2013/11/17(日) 22:40:58.67大体ソートアルゴリズム自体が問題になる事は少ない。
それより如何にソート対象の値の比較を効率化させるかが
問題になる。
例えば文字列の比較をくそ真面目にやると遅いんで、
特殊な要約値(hash)に変換するなり工夫が必要になる。
0137デフォルトの名無しさん
2013/11/17(日) 22:41:26.200138デフォルトの名無しさん
2013/11/17(日) 22:45:44.58とりあえず逃げ回ってる奴がソースコードを出せば済む話
0139デフォルトの名無しさん
2013/11/17(日) 23:07:18.35初回も絶対分割できないというわけじゃないけど初回を分割すると面倒ではあるな。
それとソート対象が大きいほど初回が占める比率は下がるから、状況次第で効果が違う。
だからって3倍4倍になるとは思わないけどな。
ただの予想だがメモリアクセスの限界の方が先に来るケースの方が多いだろう。
>>135
> どのみち排他する事になるんだがな。
分割した後左右を別のスレッドに振っても同じ領域にはアクセスしないからロックは不要。
なんでアクセスしない領域までロックする前提なんだ?
>>138
クイックソートの並列化(初回分割除く)でロックが居るとかアホな理屈に突っ込みいれてるだけだぞ。
0140デフォルトの名無しさん
2013/11/17(日) 23:29:36.79> お前がマージソート並みに実用性のある並列処理ができるっていってたのはクイックソートだろボケ
いやいや、「クイックソート」なんて言葉はここでは一回も書いたことないし
幻覚ほざくやつ気持ち悪いな
0141デフォルトの名無しさん
2013/11/17(日) 23:36:50.18理論上では定数時間でソートできる
0142デフォルトの名無しさん
2013/11/17(日) 23:47:48.31データが10億件あれば、最初の方にかかる処理は全体の30分の1程度だ。その程度のことは気にしなくていい。
0143デフォルトの名無しさん
2013/11/18(月) 00:10:50.480144デフォルトの名無しさん
2013/11/18(月) 00:14:27.75マージソートでロック不要なのは分かってるのに
クイックソートの場合分からないなんて
どういうバカなんだよ
0145デフォルトの名無しさん
2013/11/18(月) 00:26:56.33Scanlineを作る際の頂点並び替えとかSQL使っとられんのだが。
あと並び替えに速度が必要なのは大規模情報に限らん。
Graphicsや幾何学分野は基本的に高速な並び替えが必要になる。
0146デフォルトの名無しさん
2013/11/18(月) 00:29:38.06>>9
>>12
0147デフォルトの名無しさん
2013/11/18(月) 00:32:42.48じゃあ早く書いて実測させろよ
0148デフォルトの名無しさん
2013/11/18(月) 00:35:02.20ソース書いてロック不要な事を証明してくれ
0149デフォルトの名無しさん
2013/11/18(月) 00:42:28.07他の奴が書いたものまで書いたことあるうちに入れるなよ
0150デフォルトの名無しさん
2013/11/18(月) 00:45:40.211億件のレコードをオンメモリーでソートすればあっという間だが、
わざわざSQLでDBに入れてたら何十分もかかるんじゃないか?
0151デフォルトの名無しさん
2013/11/18(月) 00:46:03.960152デフォルトの名無しさん
2013/11/18(月) 00:49:21.49まずお前がコテ付けな
0153デフォルトの名無しさん
2013/11/18(月) 01:08:06.63その鈍くさい方法ならロックは要らんが、
基準値との比較をコア数分同時に行う場合は、必要になる。
0154デフォルトの名無しさん
2013/11/18(月) 01:10:21.38お前何言ってんだ?
0155デフォルトの名無しさん
2013/11/18(月) 01:13:46.21partitionの並列化か?
0156デフォルトの名無しさん
2013/11/18(月) 01:17:18.65あれは時間を使うアイデアはすごかったが
実質はただのビンソートだぞ
0157デフォルトの名無しさん
2013/11/18(月) 01:22:29.984コアの場合
対象配列: 987654321
基準値: 5
1回目の振り分け
1回目:1 2 9 8
2回目:1324 9786
1回目終了:132459786
0158デフォルトの名無しさん
2013/11/18(月) 01:24:43.00どう見てもクイックソートの動きじゃない
0159デフォルトの名無しさん
2013/11/18(月) 01:27:27.25クイックソートを並列化する際に、最初の一回目を並列化なんかするわけないだろ。
そんなバカなことしたら無駄に重くなるだけだ。
0160デフォルトの名無しさん
2013/11/18(月) 01:31:04.84全てのタスク(ジョブ)が終了した事をどうやって調べるんですかねぇ。
まさかfork-join?
0161デフォルトの名無しさん
2013/11/18(月) 01:34:02.26swapだけで処理しないと駄目だよ
だから振り分けは1コアになる
0162デフォルトの名無しさん
2013/11/18(月) 01:34:34.60なんで重くなんだよ
クイックソートは基準値を元に左右に分散してれば、
左右の値がどう並んでても良い。
1回目1コア2回目2コアよりよっぽど速いわ。
0163デフォルトの名無しさん
2013/11/18(月) 01:36:29.31左右配列への代入はどうするんだ?
同期処理入るんじゃないか?
0164デフォルトの名無しさん
2013/11/18(月) 01:39:12.79お前、入力データと同じ大きさのバッファを用意してるだろ?
0165デフォルトの名無しさん
2013/11/18(月) 01:40:12.92クイックソートはロックが必要。
と言ってる奴はマジキチ。
0166デフォルトの名無しさん
2013/11/18(月) 01:41:34.541コアで100万件左右に振り分けるのと
4コアで100万件左右に振り分けるのどっちが速いか
多少考えりゃわかるだろうに
0167デフォルトの名無しさん
2013/11/18(月) 01:42:58.50最初の振り分けは1コアでやらないと、ロックだらけで大変遅くなる
0168デフォルトの名無しさん
2013/11/18(月) 01:45:07.552コアならそれもできるが
最初から4コア振り分けって言ってるからそれも無理じゃねって言ってんだよ
0169デフォルトの名無しさん
2013/11/18(月) 01:48:03.22クイックソートは、データが10億件あればネストは30以上になるんだぞ。
そのうちの最初の一層を4コアにしても1コアにしても、全体の時間は変わりはしない。
ロックまみれにしながら第一層からスレッド分ける意味がない。
0170デフォルトの名無しさん
2013/11/18(月) 01:48:17.50ていうか、マージソートの方がクイックソートより条件悪いぞ。
クイックソート
・初段の並列化に制限がある(並列化の方法によってはロックが必要)
・ソート完了判定で終了待ちが発生する
・作業領域を用意せずに破壊的にソート可能
マージソート
・最終段の並列化に制限がある(並列化の方法によってはロックが必要)
・各段ごとに、依存する前段の終了待ちが発生する
・作業領域の用意が必須
クイックソートは分割時にタスクを生成するが、マージソートは結合時に同期を待つ。
初段ないし最終段の並列化でロックが居る云々なんぞよりよほど致命的
少なくとも教科書的な実装で分割されたタスクを並列化するだけだとそうなる。
解決するなら改良しないとな。
0171デフォルトの名無しさん
2013/11/18(月) 01:48:41.57マジキチすぎて議論になりません
0172デフォルトの名無しさん
2013/11/18(月) 01:52:18.16じゃあ最初から4コアで振り分けるquicksortのアルゴリズムを
きちんとコードで説明してくれ
0173デフォルトの名無しさん
2013/11/18(月) 01:55:07.80シャワートイレ板で和式派と洋式派で醜い争いが発生してるみたいな
0174デフォルトの名無しさん
2013/11/18(月) 01:55:42.50俺はマージソートに同期不要とは思ってない
0175デフォルトの名無しさん
2013/11/18(月) 01:55:52.634コアで10億件あった場合、マージソートで並列化すると
スレッドの生成は何回あるという考えなんですか?
0176デフォルトの名無しさん
2013/11/18(月) 01:59:33.23御託はいいからソースを書けよ
0177デフォルトの名無しさん
2013/11/18(月) 02:00:57.792コアでも駄目だろ。
ハードウェアなら入力2系統出力1系統にして入力を並列化できるが、
出力が1系統だからソフトウェアに落とすと1コアもしくは同期処理だ。
ハードウェアで同期取るのは簡単だけどソフトウェアでそれはちょっと…
CPUだと直列で書いて命令やパイプラインで並列化させる方が簡潔。
GPUだと並列に書けるかもしれんがCPUの話だよなコレ?
0178デフォルトの名無しさん
2013/11/18(月) 02:05:39.11B氏「マージソートもクイックソートも並列化にはロックが必要」
どちらが頭悪い?
0179デフォルトの名無しさん
2013/11/18(月) 02:06:17.442コア&inplaceなら最初の一回からできるよ
同一の大きさの配列作る
ピボットよりそれぞれ小さいもの、大きい物だけ選別するスレッドを生成
後は普通のinplaceクイックソート
0180デフォルトの名無しさん
2013/11/18(月) 02:08:08.860181デフォルトの名無しさん
2013/11/18(月) 02:09:14.90> ピボットよりそれぞれ小さいもの、大きい物だけ選別する
という行為が何をすることなのか全く意味が分からない
0182デフォルトの名無しさん
2013/11/18(月) 02:09:24.69訂正
最初の一回はinplaceなら、じゃなくinplaceじゃないなら
0183デフォルトの名無しさん
2013/11/18(月) 02:12:09.66振り分けの並列化の話だよ
0184デフォルトの名無しさん
2013/11/18(月) 02:12:56.81何のメリットもない俺様アルゴリズムを前提に
意味不明な理論を語る馬鹿が一名
0185デフォルトの名無しさん
2013/11/18(月) 02:13:48.96具体的にどうやれば振り分けの並列化ができるんですか?
0186デフォルトの名無しさん
2013/11/18(月) 02:13:49.86無理ってのはマージソートの最終段だろ。
0187デフォルトの名無しさん
2013/11/18(月) 02:19:21.67クイックソートは親スレッドは生成スレッドを待つ必要はないけれども、でも最終段まで全部終わったことは検知しないといけないよね
0188デフォルトの名無しさん
2013/11/18(月) 02:19:57.94マージソートに排他が要らんがクイックソートには排他がいるつう話しじゃなく
>>118から続くCPUでの並列化なんて大して速くならんつう話しの流れだ
0189デフォルトの名無しさん
2013/11/18(月) 02:20:04.710190デフォルトの名無しさん
2013/11/18(月) 02:22:12.01inplaceじゃなく、同じ大きさの空配列を作る前提なら
ピボットより小さい物は前から、大きい物は後ろから入れればいいだけ
このままだと容量がn*n必要になるから、2回目以降はinplace必須だろう
ちなみに俺もinplaceじゃないquicksortにあまり意味はないと思ってるよ
0191デフォルトの名無しさん
2013/11/18(月) 02:22:42.64マージだとどのブロックも負荷はほとんど同じだから待ちはほとんどない
0192デフォルトの名無しさん
2013/11/18(月) 02:22:58.94待ってる間CPUは他のスレッド処理してるわけで
遊んでるわけじゃないけどな
0193デフォルトの名無しさん
2013/11/18(月) 02:23:40.25まあ今回のお題では、データに分割にしたがってスレッド生成を連発すると、そのスレッド生成コストが結構ありそうだね
決め打ち生成(物理コアだけしか生成しない)の場合の書き方がちょっと想像できないが‥‥
0194デフォルトの名無しさん
2013/11/18(月) 02:24:58.25ピボットより小さい値を探すスレッドと、ピボットより大きい値を探すスレッドに分かれて、
両方のスレッドが全ての値に対して比較をする(比較回数はデータ数の2倍になる)
ということ?
0195デフォルトの名無しさん
2013/11/18(月) 02:26:18.47ブロックを2分割したあと、それぞれをソートするスレッドを生成したら、それが終わるまで自分は待たないといけないだろう?
0196デフォルトの名無しさん
2013/11/18(月) 02:27:28.53> 決め打ち生成(物理コアだけしか生成しない)の場合の書き方がちょっと想像できないが‥‥
さすがにここまで馬鹿な事を言う人は珍しい
0197デフォルトの名無しさん
2013/11/18(月) 02:28:16.34スレッド生成や待ちに結構コストを食いそうだ
手持ちの6コアでも、他のお題での今までの経験からするとせいぜい2倍くらいじゃないか?
0198デフォルトの名無しさん
2013/11/18(月) 02:31:08.31前段階の1要素目が決まったら次の段階はそっから1要素ずつ取り出して処理すりゃいい
いくら排他がいるといっても、クイックソートとはCPU使用率の効率が違う。
0199デフォルトの名無しさん
2013/11/18(月) 02:33:23.65> スレッド生成や待ちに結構コストを食いそうだ
食うわけねーだろ馬鹿
百万件だろうが一億件だろうが、4コアしかなけりゃ生成も合流も3かいずつしかないんだから
そんなもの表面化するコストにならない。
> 手持ちの6コアでも、他のお題での今までの経験からするとせいぜい2倍くらいじゃないか?
2倍とか言ってる馬鹿はそういう考え方の奴ばかりなんだな。
0200デフォルトの名無しさん
2013/11/18(月) 02:33:59.35ここでスレッドとか書いてても文字通りスレッド使うわけ無いだろ
計算用途ならスレッドプール使うのが普通
だからスレッド生成コストなんてプロセスの初期化時しか発生せん
0201デフォルトの名無しさん
2013/11/18(月) 02:34:09.49>前段階の1要素目が決まったら
それが決まるまで待たないといけないよね
それが決まるのは最終段まで分割した「後」だよね
つまり最後まで待たないといけない点は、大枠でかわらないよね
0202デフォルトの名無しさん
2013/11/18(月) 02:35:11.74あ、確かにそのままだとそうなるな
凄く馬鹿なこと言ってた
並列で比較回数も下げるには一旦マージか同期が必須になるのか
0203デフォルトの名無しさん
2013/11/18(月) 02:35:49.39バカなの?
0204デフォルトの名無しさん
2013/11/18(月) 02:36:39.63今頃になって何を言ってんだ
お前の言ってることは全てが馬鹿なことなのに
0205デフォルトの名無しさん
2013/11/18(月) 02:37:26.57>食うわけねーだろ
それが結構食うんだね
win32api で CreateThread() を for() でぶんぶん廻すと、そのチャイルドスレッドがsleep(10秒)だったとしても
「もうスレッド作れません」に到達するよ
0206デフォルトの名無しさん
2013/11/18(月) 02:38:07.05これは恥ずかしい
馬鹿だったと認めるよ
0207デフォルトの名無しさん
2013/11/18(月) 02:39:08.010208デフォルトの名無しさん
2013/11/18(月) 02:42:25.65いや、もしかしてあれも俺なのか・・?
0209デフォルトの名無しさん
2013/11/18(月) 02:45:10.94自スレッドが、上からもらったデータを二つに分割した後、スレッドをひとつ生成して半分(のポインタ)をそいつにわたす
残りの半分は次の段階で自スレッドで2分割する
としても、ある段階で「第一要素が決定する」ためには、それより下の段階の分割と統合は終わっていないといけないよね
0210デフォルトの名無しさん
2013/11/18(月) 02:49:08.77最終段階手前ブロック1構築
158…
79…
最終段階手前ブロック2構築
46…
23…
最終段階手前ブロック1
15789…
最終段階手前ブロック2
2346…
最終段階ブロック
123…
この状態だと最終段階ブロック1の1と最終段階ブロック2の2がわかった時点で、
最終段階ブロックの構成を開始できる
残りの3456…が整列できてる必要がない
0211デフォルトの名無しさん
2013/11/18(月) 02:51:46.821億件ずつ4つのブロックに分けて、それそれABCDと呼ぶ。
最初の入り口の関数がバッファを用意してコア数も確認。
再帰用の関数に全部の情報を渡す。
再帰用の関数は普通のマージソートのように半分に割って、最初はブロックABとCDに割って、
それぞれ再帰でマージソートをやらせるのだが、
ここで子スレッドを生成して子スレッドにはCDのマージソートをやらせて自スレッドはABを担当して、終われば合流してシングルスレッドでマージをする。
ABを担当することになったスレッドはこれをAとBに分けて、またスレッドを一つ生成して、子スレッドにBをやらせて、自スレッドはAを担当する。
再帰でAだけを担当する処理が開始されるが、この段階では合計4スレッドが動いてる状態なので、
これ以上はスレッド分けが不要となるため、ブロックAを担当するスレッドは普通のマージソートを使ってブロックAを処理する。
4つのブロックに対して4つのスレッドが並列でマージソートをするが、
それぞれ異なる領域を処理しているので一切のロックがない。
そして大きさが同じなので、ほぼ同時に処理が終わる。
それらが終われば、ABとCDそれぞれのjoinが行われて2スレッドになり、
ABを担当するスレッドはAとBのマージを
CDを担当するスレッドはCとDのマージをする。
最後は一つのスレッドに戻ってABとCDのマージをする。
0212デフォルトの名無しさん
2013/11/18(月) 02:52:30.28スレッドの生成回数はコア数より少ないから、そんな負荷は無視しろ
0213デフォルトの名無しさん
2013/11/18(月) 02:52:53.00説明がよくわからん
[3, 1, 4, 5, 9, 2, 6, 8]
で説明してくれ
0214デフォルトの名無しさん
2013/11/18(月) 02:55:35.83あったまわりぃ
マージソートのオンライン特性利用しろよ
マルチコアの使用効率最大に活かせるんだぞ
0215デフォルトの名無しさん
2013/11/18(月) 02:57:39.54ちなみにクイックソートの場合も、
マージソートとは逆に最初に共通処理を終わらせて、そのあとからスレッド分割で小さい領域を分担する(ただし、4コアなら最初の4分割までスレッド分け)
ということなので、
マージソートとあまり変わらない。
数に偏りがあった場合はスレッド分けずに通常処理をするというやり方でも全然速度稼げる。
ということなので、マージソートもクイックソートも並列化をする際にロックは必要ない。
0216デフォルトの名無しさん
2013/11/18(月) 02:57:54.79>スレッドの生成回数はコア数より少ない
ライトウェイトプロセス方式のネイティブスレッドのことをいってるのか?
0217デフォルトの名無しさん
2013/11/18(月) 02:58:12.58キューの方が遅い
0218デフォルトの名無しさん
2013/11/18(月) 02:58:20.57ムリ
最終段階手前ブロックがキューであると
思ってよく考えてくれ
0219デフォルトの名無しさん
2013/11/18(月) 02:59:55.45残念ながら実測だと待機時間が他の処理に使われるから
待ち時間が殆ど発生しない
0220デフォルトの名無しさん
2013/11/18(月) 03:02:41.96もっと具体的に言うとキューの待ち時間にブロック構築が進むからCPUが処理待ちにならない
0221デフォルトの名無しさん
2013/11/18(月) 03:17:12.990222デフォルトの名無しさん
2013/11/18(月) 03:26:30.720223デフォルトの名無しさん
2013/11/18(月) 03:27:44.47使える情報が流れてきたことを知るためにmutexとか使うの?
0224デフォルトの名無しさん
2013/11/18(月) 03:33:15.06これってリソースどれぐらい使うの?
0225デフォルトの名無しさん
2013/11/18(月) 06:04:28.810226デフォルトの名無しさん
2013/11/18(月) 06:45:16.73エラー行参照したらクラスの終わりカッコだった時の、どこのカッコが閉じてないや感は異常
0227デフォルトの名無しさん
2013/11/18(月) 06:53:28.10こってりソースに見えた
0228デフォルトの名無しさん
2013/11/18(月) 07:57:58.860229デフォルトの名無しさん
2013/11/18(月) 08:05:17.77C/C++ なら } の後ろに(ホワイトスペースのぞいて) ; が来るケースは
クラス(構造体)の終わりカッコ以外はほとんどないんじゃね
0230デフォルトの名無しさん
2013/11/18(月) 08:39:52.06普通mq_sendとかOSのapiかchannelみたいな言語機能つかうだろ
0231デフォルトの名無しさん
2013/11/18(月) 09:21:23.28今時気の利いたエディタなら括弧の対応付けしてそれらしく表示くらいしてくれるだろう
0232デフォルトの名無しさん
2013/11/18(月) 10:04:51.63それで、このマージソートのリソースはどれぐらい使うの
0233デフォルトの名無しさん
2013/11/18(月) 10:39:55.42そのやり方はすげー遅い
0234デフォルトの名無しさん
2013/11/18(月) 14:38:08.98どれが最適かは変わるんだから議論しても仕方ないよ
まあ自分はインサートを推しとくが
0235デフォルトの名無しさん
2013/11/18(月) 14:56:01.61今日の低脳君はこれだ
0236デフォルトの名無しさん
2013/11/18(月) 18:49:08.20C++/CLIというキメラ言語を生業にしているとVisualStudio2008までしか使えないんだわ
それ以降のVSはC++/CLIのインテリジェンスは対応してないっていうクソっぷり
んで2008は{から}へジャンプ機能が多分ない。もちろん強調表示もない
0237デフォルトの名無しさん
2013/11/18(月) 18:54:35.12かわいそう
0238デフォルトの名無しさん
2013/11/18(月) 18:59:33.210239デフォルトの名無しさん
2013/11/18(月) 19:41:47.65C++/CLIに対応しないVS2010以降がクソなのか、
VS2010以降に匙を投げられるC++/CLIがクソなのか…
0240デフォルトの名無しさん
2013/11/18(月) 19:47:48.07C#やればよかったー
0241デフォルトの名無しさん
2013/11/18(月) 19:50:32.980242デフォルトの名無しさん
2013/11/18(月) 19:52:24.490243デフォルトの名無しさん
2013/11/18(月) 20:02:21.390244デフォルトの名無しさん
2013/11/18(月) 20:12:38.580245デフォルトの名無しさん
2013/11/18(月) 21:49:17.32意味が分かりまへん
手続き型言語やってきて初めてオブジェクト思考やるから参考にとか?
0246デフォルトの名無しさん
2013/11/18(月) 22:10:07.69ただC#マンセーしてる奴はレベルが低いのが多い
0247デフォルトの名無しさん
2013/11/18(月) 22:13:12.11> JavaよりはC#の方がいい
どういう点で? 興味本位で聞いてるだけだが。
0248デフォルトの名無しさん
2013/11/18(月) 22:15:10.35まさにそれ
0249デフォルトの名無しさん
2013/11/18(月) 22:31:15.85コンテナにプリミティブ型格納するにはラッパークラス使ってください
関数を引数で渡すときはリスナークラス使ってください
0250デフォルトの名無しさん
2013/11/19(火) 07:56:39.67総称、atomic、劣化using、lambda、etc. と、
導入が数年から10年遅れる上に、個々もクソ機能に変更する言語ですよ?
C#と比較して褒めるとか無茶ですわ。
JVMだけならまだしも。
0251デフォルトの名無しさん
2013/11/19(火) 11:57:23.36意味が分かりまへん
Java や C# が手続き型言語じゃないと?
0252デフォルトの名無しさん
2013/11/19(火) 12:04:00.37相手の意図を理解した上で、揚げ足を取っているだけでは無かろうか
0253デフォルトの名無しさん
2013/11/19(火) 18:02:00.61もちろん手続き型のような書き方はできるけど
0254デフォルトの名無しさん
2013/11/19(火) 18:27:34.65まさにマルチバラダイムな言語なんだな
0255デフォルトの名無しさん
2013/11/19(火) 19:02:38.69C#「やるため」にJava勉強してるって言ってるだろ
0256デフォルトの名無しさん
2013/11/19(火) 20:16:13.37OOPLとの対義語としてつかうのは間違っとるようにわしは思う
0257デフォルトの名無しさん
2013/11/19(火) 20:25:41.93そういった場合得てして漠然とした名前がついちゃうんだよ
スマホが出てきてケータイがフィーチャーフォンになったみたいな。
手続き型言語ってのもそんな感じなんじゃないの?
0258デフォルトの名無しさん
2013/11/19(火) 20:33:10.16pascalにおいてはそのままfunctionとprocedureがあったように。
…これひょっとしてそういう話じゃなかた?w
0259デフォルトの名無しさん
2013/11/19(火) 20:36:19.34OOPLのループ
a := 1 to: 100.
a do:
[ :each |
Transcript
show: each asString;
cr.
].
C#やCやjavaのループ
for( int i = 0; 100 > i ; ++i )
{
System::Console->WriteLine(
"{0}", i );
}
0260デフォルトの名無しさん
2013/11/19(火) 20:46:21.47上の例は何て言う言語?
0261デフォルトの名無しさん
2013/11/19(火) 20:46:48.93小さくねえよ
純粋に近い関数型は引数の評価順序が不定で、
引数でしか処理を書けないから手続型の様に、
処理を手続的に書けない。
逆に引数の評価順序が保証されないという特性のお陰で、
並列処理につよいがな。
0262デフォルトの名無しさん
2013/11/19(火) 20:51:30.42ブレインファックじゃね?
0263デフォルトの名無しさん
2013/11/19(火) 20:52:10.830264デフォルトの名無しさん
2013/11/19(火) 20:53:25.74そして例示はC++マネージ拡張系とかか?
0265デフォルトの名無しさん
2013/11/19(火) 20:55:16.50| a b |
a := 1 to: 100.
b :=
[ :each |
Transcript
show: each asString;
cr.
].
a do: b.
0266デフォルトの名無しさん
2013/11/19(火) 20:56:48.33そのループの例が何を示してるのか…。
0267デフォルトの名無しさん
2013/11/19(火) 21:00:03.82何も意味のあることは言ってないと思うよ
彼の脳内のループバック通信がここに漏れ出ただけ
0268デフォルトの名無しさん
2013/11/19(火) 21:07:43.940269デフォルトの名無しさん
2013/11/19(火) 22:02:08.93{
java.collection.List<java.lang.Integer>
filled = new java.collection.Vector<java.lang.Integer>();
for( int i = begin; i < end; ++i ) filled.add( new java.lang.Integer( i ) );
return result;
}
public java.collection.List<java.lang.Integer> filledList( java.collection.Collection<java.lang.Integer> values )
{
result new java.collection.ArrayList<java.lang.Integer>( values );
}
java.collection.List<java.lang.Integer>
list0 = this.filledList( 1, 3 ),
list1 = this.filledList( new java.lang.Integer[]
{
new java.lang.Integer( 1 ),
new java.lang.Integer( 2 ),
new java.lang.Integer( 3 )
} );
java.lang.System.println( java.lang.String.valueOf( list1.equals( list2 ) ) );
-------------------------------------------------------
| filledList list0 list1 |
filledList :=
[ :aCollection |
OrderedCollection from: aCollection.
].
list0 := filledList value: ( 1 to: 3 ).
list1 := filledList value: #( 1 2 3 ).
Transcript
show: ( list0 includeAll: list1 ) asString;
cr.
0270デフォルトの名無しさん
2013/11/19(火) 22:07:08.21そこまでかたくなにimportしない理由はなんなんだ
0271デフォルトの名無しさん
2013/11/19(火) 22:12:30.52System型は既にユーザー定義しててimportできないからに決まってるだろ。
0272デフォルトの名無しさん
2013/11/19(火) 22:19:32.26どんだけ基本クラス拡張したいんだよwww
0273デフォルトの名無しさん
2013/11/19(火) 22:22:22.69{
java.collection.List<java.lang.Integer>
filled = new java.collection.Vector<java.lang.Integer>();
for( int i = begin; i < end; ++i ) filled.add( new java.lang.Integer( i ) );
return filled;
}
public java.collection.List<java.lang.Integer> filledList( java.collection.Collection<java.lang.Integer> values )
{
result new java.collection.ArrayList<java.lang.Integer>( values );
}
java.collection.List<java.lang.Integer>
list0 = this.filledList( 1, 3 ),
list1 = this.filledList( new java.lang.Integer[]
{
new java.lang.Integer( 1 ),
new java.lang.Integer( 2 ),
new java.lang.Integer( 3 )
} );
java.lang.System.println( java.lang.String.valueOf( list0.equals( list1 ) ) );
-------------------------------------------------------
| filledList list0 list1 |
filledList :=
[ :aCollection |
OrderedCollection from: aCollection.
].
list0 := filledList value: ( 1 to: 3 ).
list1 := filledList value: #( 1 2 3 ).
Transcript
show: ( list0 includeAll: list1 ) asString;
cr.
0274デフォルトの名無しさん
2013/11/19(火) 22:28:33.770275デフォルトの名無しさん
2013/11/19(火) 22:30:48.040276デフォルトの名無しさん
2013/11/19(火) 22:31:26.57腹たって全角スペース・半角スペース・タブをエディタ設定で見やすくするようにしたら
それだらけでさらに腹たつ
0277デフォルトの名無しさん
2013/11/19(火) 22:41:07.300278デフォルトの名無しさん
2013/11/19(火) 22:46:22.690279デフォルトの名無しさん
2013/11/19(火) 22:56:22.700280デフォルトの名無しさん
2013/11/19(火) 22:58:05.110281デフォルトの名無しさん
2013/11/19(火) 23:00:04.21レガシコードの移植はもいいやだやめたcomなんか死んじゃえ
0282デフォルトの名無しさん
2013/11/19(火) 23:01:09.020283デフォルトの名無しさん
2013/11/20(水) 01:57:40.34関数型は宣言型の一部。
0284デフォルトの名無しさん
2013/11/20(水) 02:06:34.77クラス作れるのがオブジェクト型言語だと思ってたら、どうも違うらしいね
0285デフォルトの名無しさん
2013/11/20(水) 03:20:25.73プロトタイプベースとか言うだろう?
0286デフォルトの名無しさん
2013/11/20(水) 06:26:07.860287デフォルトの名無しさん
2013/11/20(水) 09:03:35.630288デフォルトの名無しさん
2013/11/20(水) 11:42:47.37手続き型オブジェクト指向なんて言い方はしない
狭義がデフォ
0289デフォルトの名無しさん
2013/11/20(水) 13:19:33.52選べる手を一つ増やしたというだけ
オブジェクト指向に閉じ込められたわけじゃない
0290デフォルトの名無しさん
2013/11/20(水) 14:10:58.80誰もそんな話をしてない
0291デフォルトの名無しさん
2013/11/20(水) 14:35:48.91OCaml
0292デフォルトの名無しさん
2013/11/20(水) 15:01:37.810293デフォルトの名無しさん
2013/11/20(水) 15:54:13.330294デフォルトの名無しさん
2013/11/20(水) 16:30:36.40フレームワーク用の指向であってプログラミング言語にそんな指向を入れる余地はないと思う。
0295デフォルトの名無しさん
2013/11/20(水) 17:06:44.590296デフォルトの名無しさん
2013/11/20(水) 17:26:58.33AOPは使いどころが限られてるからな
0297デフォルトの名無しさん
2013/11/20(水) 17:30:04.000298デフォルトの名無しさん
2013/11/20(水) 18:49:57.31関数型と手続き型だって、互いの関数呼び出しが不可能って訳じゃないだろ。
0299デフォルトの名無しさん
2013/11/20(水) 20:05:55.910300デフォルトの名無しさん
2013/11/20(水) 21:45:45.04最悪、関数型のプログラムを手続き型の言語から起動して標準出力読めばよくね?
相互呼び出しのAPIが十分整っていないってのと、それが構造上不可能であるかってのは別の問題かと。
0301デフォルトの名無しさん
2013/11/20(水) 22:46:53.260302デフォルトの名無しさん
2013/11/21(木) 07:51:22.56言語のパラダイムの話だから ABI の話は関係ない。
0303デフォルトの名無しさん
2013/11/23(土) 04:37:42.62ハッキリ分かれててしかもそれは単純な学力とは違う問題だという話だけど本当?
数学バリバリ出来て結構良い大学行ってる理系の奴でも
何故かC言語の初歩の初歩(簡単な計算と入出力とか)で躓いて
なかなか覚えられない事があるらしい…
高等数学出来るくらいの論理力があればそんな初歩で躓くとかあり得ないような気がするけど…
0304デフォルトの名無しさん
2013/11/23(土) 04:44:18.14へえ
訓練メソッドしだいでなんとでも思う、というか教育体制の問題じゃない?
すずめの学校ぴーちくぱーちく、ではどうにもならないのがプログラミング
>>303 と同じく不思議に思うが、それが適性というものなのかもしれない‥
プログラミングを習得するために必要な思考手段/思考の作法はなにだろうか?
0305デフォルトの名無しさん
2013/11/23(土) 04:51:58.57まぁ確かに質問サイトとかでよく
「大学生ですがこの前PHPの入門書買って読んだんですが全然わかりません」
「どうやったらプログラムできるようになりますか?」
とか山ほど投稿ありますもんねぇ…
変な話これはただプログラミングが本当に好きかどうかという問題なんじゃないのかなとか思うけど…
ヘタクソでも情熱があれば少しは進歩するよね?
人間やりたくない事はなかなか覚えられないからなぁ。
0306デフォルトの名無しさん
2013/11/23(土) 05:02:00.95例えば
【問題】
int a = 10;
int b = 5;
a = a + b;
さてaは何になるでしょう?
という問題をプログラミングの知識が無い人間に見せて
時間をおいて何度もさせてみて間違いでも良いから
常に自分の中で一貫したモデルから答えを導ける人間は単位を落とさないとかなんとか…
でもこれも単に自分の中で幾つかのパターンの
モデルが構築出来てて A→X B→Y みたいな複数の論理的帰結が単純に分かったら良いだけだと思うんだけど。
結局数学が分かるくらいの論理力があれば問題ない気がするけどな。
0307デフォルトの名無しさん
2013/11/23(土) 05:27:17.19割と本当。そういう環境に居たけど、「適正ってあるんだなあ」って思ったよ
そういう奴でも、ステートメントを一行書けと言われたら書ける
変数が解らないとか、ポインタが解らないとかじゃないらしい(多分)
構造化出来ない(forとかwhileとか使わずに、同じステートメントをコピペで何度も書いちゃう)とか
関数が自作出来ない(全部main関数にだらだら書いて、後からメンテ出来なくなる)とか
俺の周囲だとそういうのが結構居た
0308デフォルトの名無しさん
2013/11/23(土) 05:57:35.59なんというかあれなのかね。
整理整頓能力みたいな。
本棚の整理が苦手な奴がダメみたいな。
自分で把握して改変しやすいコードを構築できる能力が無いと
全体の流れが分からなくなって混乱してしまうのかも。
結構プログラムも奥が深いよね。
ここは後々面倒になりそうだから効率よりも分かりやすさ重視でとか
ここは速度が要求されて中身が分かり辛くても機能さえ使えるようにしとけば
問題無いから最適化重視でとか
そういうケースバイケースで尚且つ全体の整理が出来ないと
保守管理しやすいプログラムって難しいもんね。
0309デフォルトの名無しさん
2013/11/23(土) 06:10:17.13ある程度の努力で改善される事もあるだろうけど
でもやっぱし元々の資質もあるからねぇ…(脳に必要な機能が無ければどうしようもない場合もあるんじゃなかろうか…)
筋肉が付きやすい奴は何もやってなくても結構マッチョだったりするし。
プログラミング全然やった事ない奴でも直ぐにちょっとしたアプリ作ってたりするし。
0310デフォルトの名無しさん
2013/11/23(土) 06:49:55.59さん散らかしのデスクから直ぐに必要な書類が出せるやつみたいに綺麗である必要がないんだ
0311デフォルトの名無しさん
2013/11/23(土) 06:50:20.860312デフォルトの名無しさん
2013/11/23(土) 06:50:49.800313デフォルトの名無しさん
2013/11/23(土) 07:03:34.46一般論として部屋の整理整頓が行き届いてるやつって記憶力悪いだろ。
0314デフォルトの名無しさん
2013/11/23(土) 07:19:04.17どんな汚いコードでも自身が把握出来て完成させる事が出来て
改変可能なら問題ないよね。
でも前の方で所謂プログラム出来ない奴の例で上がってるのは
自分自身でも把握困難になって結局破綻してしまうから問題なんだろうな。
この場合は努力して自分が管理し易い形に持って行く技術を磨く必要があるし
元々資質が無いなら無理な場合もあるだろうね。
要するに自分自身が把握可能な形に出来る能力があるかどうかが問題点で
自分自身が分かりやすい形に出来ており尚且つ一人だけの開発なら
他人が見てどんなにスパゲティコードでもこの場合はプログラミング能力があるという事になるんじゃないのかね。
0315デフォルトの名無しさん
2013/11/23(土) 07:34:51.48よく分からないのは
頭良い奴はスパゲティーの方が分かりやすいのか?
それとも結局頭良い奴でも整理整頓されたコードのが分かりやすいのか?
もし後者ならば、やっぱし自分がより分かりやすい形にコードを整える能力を養う方が後々も有利なので
総合的に頭が良い奴は結局、コードを整理する努力をするものじゃないのかな?
もちろん後者ならそういう努力は無駄だが、しかし
それならば、単純にそういう形のコードが(スパゲティーコードが)脳に記憶されやすいという
特異な脳構造を持っているだけであって頭が良いというのとは違うんじゃないのかという疑問が出るな。
0316デフォルトの名無しさん
2013/11/23(土) 07:35:13.54誰もが読めるコードが書けるけど
自分しか読まないからあえて効率優先できたないソースにしてる。ってんなら能力があるんだろうね
でもそんな奴はめったにいない
0317デフォルトの名無しさん
2013/11/23(土) 07:54:13.58ブロック構造化されている最近の言語ではスパゲッティーコードというのは無い。
オブジェクト指向を間違った使いかたしてスパゲッティになっているのはスパゲッティというよりバカコード。
0318デフォルトの名無しさん
2013/11/23(土) 08:03:03.84スパゲッティといえるのかわからないがこれはスパゲッティと言ってもいいかも。
イベントドリブンを使わずjsp上でイベント処理してるのも同様だ。
0319デフォルトの名無しさん
2013/11/23(土) 08:07:29.91状態遷移表を使いたいのか知らんが全変数を配列の要素にしているのもアホコード
0320デフォルトの名無しさん
2013/11/23(土) 08:19:39.740321デフォルトの名無しさん
2013/11/23(土) 08:21:17.93単純に世の中の大多数が読み難いと思うコードって意味じゃない?
0322デフォルトの名無しさん
2013/11/23(土) 08:21:33.711つの関数やファイルが異様に大きいのは、糞コード
0323デフォルトの名無しさん
2013/11/23(土) 08:22:10.01判ります
道に迷うときってどの分岐入っても同じような景色が続いてるようなところで迷う
0324デフォルトの名無しさん
2013/11/23(土) 08:23:56.23それはエディタがヘボく多数のファイルを扱えない自己責任。
0325デフォルトの名無しさん
2013/11/23(土) 08:27:36.22KVSで使われるのはレコード
おやじの頭はバーコード
0326デフォルトの名無しさん
2013/11/23(土) 08:37:41.67>あとHashtableをツリー構造にしてるのはアホコード
くわしく
チェイン法でのリスト以外にもツリー構造をとることもあるのでは?
0327デフォルトの名無しさん
2013/11/23(土) 08:51:19.75もちろん衝突を考慮した場合はそこにリストやツリーが絡むけど
0328デフォルトの名無しさん
2013/11/23(土) 10:20:34.03いろんなもんをイッパイ積み上げていく競技?趣味?
があるけどプログラミングってそれに近いものがある。
下から順に、カッチリ、かつ出っ張りのない単純な形でつくって、
またその上にそういうの作っていかないと、上まではとてもじゃないけど無理。
ましてや、下のほうからグラグラだったりフニャフニャだったり、
なんか別のもんとネッチャリと癒着してたりすると、
上まで作っていくまでに相当息苦しい思いをするし、
悪い部分を交換することも補強することも難しい。
ノイズとかリスクの増大を、抑えて抑えて行くのが大事。
0329デフォルトの名無しさん
2013/11/23(土) 10:31:04.49プロは特に理由がない限りできるだけ標準のライブラリを使って車輪の再発明はしない。
無いならしょうがないけど。
0330デフォルトの名無しさん
2013/11/23(土) 10:33:38.87ちなみに聞くが、きみは中学生?高校生?
0331デフォルトの名無しさん
2013/11/23(土) 10:48:21.320332デフォルトの名無しさん
2013/11/23(土) 11:02:37.97これ勘違いしてるやつ多いけど、車輪がどういう仕組みなのかを勉強するのは必須な。
0333デフォルトの名無しさん
2013/11/23(土) 11:06:39.320334デフォルトの名無しさん
2013/11/23(土) 11:11:23.370335デフォルトの名無しさん
2013/11/23(土) 11:16:12.160336329
2013/11/23(土) 11:22:00.62ファミコンやゲームボーイでアセンブラでゲーム作ってたおっさんだよ。
いまはC++でSTLやboost使ってる。
0337デフォルトの名無しさん
2013/11/23(土) 11:26:17.66中学か高校のころに一度は言ったことがあるはず。
最初の頃ってそういうの言いたくなっちゃうからね。
0338デフォルトの名無しさん
2013/11/23(土) 11:28:29.53初心者は最初からそんなところ手を出せないが
車輪の再発明ってうるさいやつはフレームワークとかそこらへんで連呼してるイメージ
0339デフォルトの名無しさん
2013/11/23(土) 11:32:40.640340デフォルトの名無しさん
2013/11/23(土) 11:33:30.24受験数学は数学センス無くてもそこそこ取れる
0341デフォルトの名無しさん
2013/11/23(土) 11:39:08.60物理エンジン自前で書いてて自分の力学の理解のなさに驚いた。
試験や勉強とそれを使って何かするというのはまったく別次元なのだろう。
0342デフォルトの名無しさん
2013/11/23(土) 11:46:26.33時間軸って知ってる?
0343デフォルトの名無しさん
2013/11/23(土) 11:49:10.470344デフォルトの名無しさん
2013/11/23(土) 11:50:46.75処理落ちを気にしなきゃならん様な、ピーキーなゲームばかりじゃないからな
ゲーム用途だと速度が云々とか言い出す奴は、
ACT・FTG・STG・FPSしかやらんのかと
(まあSTGは多少処理落ちしても良いっちゃ良いんだけど)
0345デフォルトの名無しさん
2013/11/23(土) 11:52:17.960346デフォルトの名無しさん
2013/11/23(土) 12:13:15.100347デフォルトの名無しさん
2013/11/23(土) 12:17:17.170348デフォルトの名無しさん
2013/11/23(土) 13:03:39.99四則演算のみで論理演算作る方が難しいよね
0349デフォルトの名無しさん
2013/11/23(土) 13:13:39.03じゃ100行超える関数がざらのLinuxやWindowsは糞コードか。
まぁコード哲学語る前にまともに使えるソフト作ってから語れよw
hellow world量産してる場合じゃねえぞ
0350デフォルトの名無しさん
2013/11/23(土) 13:16:49.92ゲームの話がしたいんじゃなく、
速度要求が厳しい場合の話がしたいんだろ
アスペかよ
0351デフォルトの名無しさん
2013/11/23(土) 13:20:15.36確かにな。既存のロジック自作すんのはお勉強の時だけ。
実用目的のソフトに車輪の再発明入れまくる奴は間抜けだわ。
0352デフォルトの名無しさん
2013/11/23(土) 13:28:02.96>>351
確かにな。コーラを飲んだらゲップが出るよな?
太陽見つめるとまぶしいよな?
0353デフォルトの名無しさん
2013/11/23(土) 13:40:56.83おーばーへっどによっておそくなりまする
0354デフォルトの名無しさん
2013/11/23(土) 13:47:38.42100行で多いと思ってるおまえは相当なカスだな。
0356デフォルトの名無しさん
2013/11/23(土) 13:51:11.37いうても200行300行ざらなんだが
お前の見てきた長い関数って何行なんだ?
0357デフォルトの名無しさん
2013/11/23(土) 13:54:11.07実際には分岐の多いswitchと分岐あたりのコード量がそこそこあると
分割するほうが面倒なことも多いけど。
まあ書いてて分割が面倒でもスコープくらい付けてもいいな。
0358デフォルトの名無しさん
2013/11/23(土) 13:55:53.88関数ができるのに同じコードをベタベタ貼るヤツが糞って言えば良いんだよ。
0359デフォルトの名無しさん
2013/11/23(土) 13:56:58.800360デフォルトの名無しさん
2013/11/23(土) 14:00:55.38ブロックで変数が区切られてりゃかまわんな。
vimやらjvmとかpostgressとか有名どころはそうだし、
1度きりしか呼ばれない関数作られるのも読みにくいし。
0361デフォルトの名無しさん
2013/11/23(土) 14:01:48.75コピペしまくる奴はもっと問題
0362デフォルトの名無しさん
2013/11/23(土) 14:03:46.27いや意味ないね。
重複が良くないと思うなら最初からそう言うべきで、
行数で語る奴はステップ数で見積もりだす奴と同じく
蔑まされるだけ
0363デフォルトの名無しさん
2013/11/23(土) 14:03:52.89(グローバルやメンバ変数使わなきゃの話だが)
名前付けて分けたほうが構造化が進むし検索もしやすい。
0364デフォルトの名無しさん
2013/11/23(土) 14:04:43.790365デフォルトの名無しさん
2013/11/23(土) 14:04:55.46完全コピペですまないコードの、コピペ後の修正漏れが多い
その時問題なくてもコメントの修正漏れとかがあって、後任者に迷惑かけることもある
短いコードなら手書きにすべきだね
0366デフォルトの名無しさん
2013/11/23(土) 14:05:43.780367デフォルトの名無しさん
2013/11/23(土) 14:05:48.75だからfor文も手動で展開していたらしい
0368デフォルトの名無しさん
2013/11/23(土) 14:07:42.810369デフォルトの名無しさん
2013/11/23(土) 14:07:53.88今でもステップ数で労力を測ってるとこあるけど、なんの意味あるの?って感じだわ
0370デフォルトの名無しさん
2013/11/23(土) 14:08:41.34ブロックとIDEでできるよ
IDE無くても大体それ用のpragmaあるしね
0371デフォルトの名無しさん
2013/11/23(土) 14:09:05.890372デフォルトの名無しさん
2013/11/23(土) 14:09:57.27なはしがかみ合ってない
0373デフォルトの名無しさん
2013/11/23(土) 14:10:27.92重複しない処理だと読みづらいだけだろ
0374デフォルトの名無しさん
2013/11/23(土) 14:11:34.92>いやブロックよりも関数のほうが引数と戻り値が明確になるし
>(グローバルやメンバ変数使わなきゃの話だが)
ここが伝わっていないと思われる
0375デフォルトの名無しさん
2013/11/23(土) 14:14:40.17ブロックにマーカー置いとくとそこにすぐ飛べる機能があったりする
例えばXcodeとかgnu系で使える
#pragma mark 名前
実際関数で識別するより関数と独立できるんで便利
処理より仕様に近い名前を付けられる
0376デフォルトの名無しさん
2013/11/23(土) 14:17:33.87ブロックだと変数をスコープに区切れるし、
引数戻り値になる値が一貫して明瞭だろ。
それに広域変数の問題も発生しない。
0377デフォルトの名無しさん
2013/11/23(土) 14:18:53.81>>374
ちなみに
>(グローバルやメンバ変数使わなきゃの話だが)
もブロックだとしても同じことだからデメリットになるわけではない。
近辺にコードがないのはデメリットだが100行以上であればすでに近辺の意味は薄い。
0378デフォルトの名無しさん
2013/11/23(土) 14:19:44.54引数はともかく戻り値明瞭にするいみあんの?
0379デフォルトの名無しさん
2013/11/23(土) 14:20:40.45>(グローバルやメンバ変数使わなきゃの話だが)
ブロックは外のブロックを参照できるから意味が異なる。
0380329
2013/11/23(土) 14:23:04.86構造化が上手いからな。
関数100行までという制限を設けるのは職場のアホ対策として有効。
どんなにアホでも関数を分ける時はそれなりに機能で分けようと頑張るからな。
0381デフォルトの名無しさん
2013/11/23(土) 14:24:56.170382今日のまとめ
2013/11/23(土) 14:27:21.610383デフォルトの名無しさん
2013/11/23(土) 14:28:38.22面白いww
0384デフォルトの名無しさん
2013/11/23(土) 14:31:13.390385デフォルトの名無しさん
2013/11/23(土) 14:35:48.14一度しか使わない関数の短所
・前後の処理と分離されてるため、一度しか使わないにも変わらず、
呼び出し元と定義先の往来が発生する
・一度しか使わないにも変わらず、初めて見た人は、他の箇所から
呼び出される可能性を考える必要がある。
・関数名の名前付が微妙。名前付専用の構文と異なり、
普通は処理に基づいた名前をつける必要がある。
逆に仕様に近い名前を、付けると他の関数と一貫性が無くなる。
・別ファイルに置かれた場合、どこのファイルに
置かれたか探す手間がかかる。
共通の関数ならその手間も許せるものの1回しか
使われてなかった場合のムカつき具合は異常。
・引数が独立してて変数の名前変更に手間がかかる。
広域変数は良くないが、関数内でブロックを跨る
局所変数の場合、広域変数で問題となる、
どこで値が書き換えられたか分からず難解になる問題が
発生しない。
0386デフォルトの名無しさん
2013/11/23(土) 14:40:37.51・前後の処理と分離されてるため、一度しか使わないにも変わらず、
おれは気にならない(後続の理由による)
・一度しか使わないにも変わらず、初めて見た人は、他の箇所から
static関数やメンバ関数なら必要十分な限定ができる
・関数名の名前付が微妙。名前付専用の構文と異なり、
おれは気にならない
・別ファイルに置かれた場合、どこのファイルに
static関数にすれば気にならない(C/C++だけかな?・・・)
・引数が独立してて変数の名前変更に手間がかかる。
必要なコストと考える
よくまとまっていて助かる。
おれは持論を変えるまでには至らない。
0387デフォルトの名無しさん
2013/11/23(土) 14:42:54.53・他の関数名の中に名前が交じる。
ブロックを探したいんじゃ無く、
純粋に関数を探したいときに邪魔。
・関数内スコープで飛べない。
特定の関数内で目的の処理をちょくちょく飛びながら
探すときに、関係のない関数名も並ぶ。
0388デフォルトの名無しさん
2013/11/23(土) 14:43:47.28主観だらけだなw
0389デフォルトの名無しさん
2013/11/23(土) 14:44:49.51お前みたいな周りを気にしない奴と仕事したくないわ
0390デフォルトの名無しさん
2013/11/23(土) 14:45:54.77・他の関数名の中に名前が交じる。
名前の規則で気にならないレベルまで解決できる
・関数内スコープで飛べない。
エディタの検索機能は必須と考えてるので問題ではないと考える。
0391デフォルトの名無しさん
2013/11/23(土) 14:47:32.01だったら最初から関数で代用せずIDEと連携する機能つかえよ
0392デフォルトの名無しさん
2013/11/23(土) 14:48:21.32いやいや行数気にしないほうが可読性低いと思うぞ。
俺の論点は一点で「変数スコープ」。
しかもそのために「100行限定」とするわけではなく
なるべくスコープ小さくしてね。目安として100行ね。って話。
プロジェクトによってはもっとゆるくするし。
0393デフォルトの名無しさん
2013/11/23(土) 14:48:43.600394デフォルトの名無しさん
2013/11/23(土) 14:49:12.40>>392
0395デフォルトの名無しさん
2013/11/23(土) 14:50:22.44なんでこいつこんな糞理論をこんなドヤ顔で披露してるの?
0396デフォルトの名無しさん
2013/11/23(土) 14:51:31.97しなくて良い苦労をして何がそんなに嬉しいの?
0397デフォルトの名無しさん
2013/11/23(土) 14:52:49.24新たな問題点指摘は具体的に。
>>386の内容自体が気に食わないならそれは意見の相違。
0398デフォルトの名無しさん
2013/11/23(土) 14:53:10.46ほとんどの言語はブロックでスコープ限定できるぞ
0399デフォルトの名無しさん
2013/11/23(土) 14:57:11.42外部ブロック変数の参照も限定できるの?
できるんだったら処理として独立してるんだから分けていいよね?
別に3行でも分けろと言ってるわけじゃなく
例えば100行くらい以上なら分けたほうが読みやすくね?って話し。
0400デフォルトの名無しさん
2013/11/23(土) 15:00:40.31どういう理由で限定すんの?
使うから参照できる位置にわざわざ宣言するんでしょ。
あと不必要にソースを飛び回るほうが読み辛え
0401デフォルトの名無しさん
2013/11/23(土) 15:02:30.12誰も無名関数がほしいなんて言わないつーの
0402デフォルトの名無しさん
2013/11/23(土) 15:02:48.67一度しか使わない関数の短所
・前後関係が分離され、見通しが悪い。
・定義だけでは、単回呼び出しとわからない。
・別ファイルでさらにイライラ。
・分離する際に名称がつけにくい。難読性が増す。
これってこういう意味?
>>387に至っては、何がいいたいんだかわからん。
0403デフォルトの名無しさん
2013/11/23(土) 15:05:01.37俺の論点は一点で「変数スコープ」。
100行超えるようなコードが直線的である確率は低い。
であれば直線部分は関数に切り出されていたほうが見通しがいい。
かつ変数スコープは変数の変化状況を限定してくれるので見通しがいい。
逆にいろいろな変数を触るような関数は
設計に問題があることが多いのでその判断基準にもなりえる。
0404デフォルトの名無しさん
2013/11/23(土) 15:07:46.00例え1度しか使わなくても、見通しは悪くならないよ。
そんな固着した頭じゃ、初心者御用達のMVCなWEBフレームワークすら使えない。
0405デフォルトの名無しさん
2013/11/23(土) 15:08:03.74プログラム云々より国語の教科書や道徳の教科書よんで読解力つける方が先じゃ…
0406デフォルトの名無しさん
2013/11/23(土) 15:09:51.32しなくても良い苦労としなけりゃならん苦労は違うだろ
0407デフォルトの名無しさん
2013/11/23(土) 15:11:14.77冗長すぎてわかりにくいだけだと思うよ。
プログラマとは思えない。
0408デフォルトの名無しさん
2013/11/23(土) 15:14:40.52関数が小さくまとまっているので処理内容を一瞬で理解できる。
その関数以外に影響範囲が及ばないことを簡単に確認できる。
関数が完成したあとはブラックボックスにできる。
呼び出し元関数を読む時にブラックボックスになっている関数を読み飛ばせる。
呼び出し元関数が小さくなって可読性が高まる。
同様の関数が現れる可能性が高く、1つにまとめられる。
関数をまとめて行くと総コード量が減る。
全く別のところでそのコードを流用できる可能性が高まりますます総コード量が減る。
コード量と不具合の量には統計的に相関関係があるので、一般的にコードが減れば不具合も減る。
デマルコの構造化分析からやり直しだな。
その前にCプログラミング診断室を読んだ方がいいかもな。
0409デフォルトの名無しさん
2013/11/23(土) 15:15:17.03そういや中身空っぽな構造体同然のモデル書くやつと、
一度しか書かない関数を分離するやつって往々にして同じ奴だな。
何のためか批判的に考えず形だけやってる感じ。
あと行数指定する奴も同類だ。
0410デフォルトの名無しさん
2013/11/23(土) 15:18:51.700411デフォルトの名無しさん
2013/11/23(土) 15:18:55.46共通の処理が出てくるのは別問題だろ
そうなった時に初めて分離すりゃいい話。
むしろ既存の関数の分離の仕方が悪いと更に時間が掛る。
典型的なDRYの失敗例じゃん。
0412デフォルトの名無しさん
2013/11/23(土) 15:19:06.39・関数切り出しは面倒
と言う厳然たる事実と
・既存のほとんどの言語は関数を切り出しても
副作用がないことを保証するわけではないのでいまいち達成感がない
と言う厳然たる事実は指摘したい。
0413デフォルトの名無しさん
2013/11/23(土) 15:20:14.35一度しか使わなくても、例えばbusyboxのように、
完全に機能が分かれている場合なんかは、分けた方が見通しがいいよ。
そういう事も含めて、適当に「〜な感じ」なんて批判する方こそ中身がない。
0414デフォルトの名無しさん
2013/11/23(土) 15:23:15.93ダイクストラの構造化プログラミングを
単純否定するようなレスが散見するのはどうかと。
0415デフォルトの名無しさん
2013/11/23(土) 15:23:26.08全部関数は小さくって書いてある。
色々読んだけど、少なくとも一度しか使わない関数を作らないほうがいいなんて書いてある本は見たことない。
0416デフォルトの名無しさん
2013/11/23(土) 15:24:57.33ブラックボックス化は最初から、再利用可能なものにだけすべきで、
全く再利用を意図しないものにすべきじゃない。
モノリシックとマイクロカーネルの失敗とか、
昔から良くわかってる話だろ。
Linuxで数百業の関数になっても一度しか使われない関数が忌避されてる理由をよく考えろ。
0417デフォルトの名無しさん
2013/11/23(土) 15:25:16.87静的解析やide使ってないのか?
0418デフォルトの名無しさん
2013/11/23(土) 15:27:12.43初耳
ソース
0419デフォルトの名無しさん
2013/11/23(土) 15:28:05.13批判ってのは批(付き合わせ)判(判断する)って意味だぞ
非難と間違えてないか?
0420デフォルトの名無しさん
2013/11/23(土) 15:29:39.78今度は言葉遊び?悪いけど付き合わないよ。
0421デフォルトの名無しさん
2013/11/23(土) 15:30:56.61ダイクストラの構造化プログラミングは、
ブロックをgotoで跨るなという話で今までの話とは全く関係ない。
ループからループの真ん中に飛び込むとか、
ifからループに飛び込むとか、そんな話一度も出てないだろ?
0422デフォルトの名無しさん
2013/11/23(土) 15:31:16.02モジュールとかブート部分とか
一度しか使わないコードばっかりなんですがそれは・・
0423デフォルトの名無しさん
2013/11/23(土) 15:31:40.55ごめんキミとは会話できない
0424デフォルトの名無しさん
2013/11/23(土) 15:32:08.40書いてなくてもLinuxやWindows 2000カーネルや
PostgreSQLとかはそうじゃん
0425デフォルトの名無しさん
2013/11/23(土) 15:33:26.450426デフォルトの名無しさん
2013/11/23(土) 15:33:53.88そこにコールバック以外で一度しか呼ばれない関数はあった?
あったら貼ってくれ。
0427デフォルトの名無しさん
2013/11/23(土) 15:34:43.56そのまま返そう。
0428デフォルトの名無しさん
2013/11/23(土) 15:34:49.18ごめんgoto禁止論の話してたわ
0429デフォルトの名無しさん
2013/11/23(土) 15:35:26.650430デフォルトの名無しさん
2013/11/23(土) 15:35:41.73なんで俺たちこの構造化もオブジェクト指向も理解できないアホを一所懸命教育してんの?
0431デフォルトの名無しさん
2013/11/23(土) 15:37:03.74でもその内容って反復とか分岐の話で局所変数の話は、出てこないよな。
モジュールの概念も無いし。
0432デフォルトの名無しさん
2013/11/23(土) 15:39:14.58構造化とはgotoを使わないことだ、という話はない。
関数を細かい構造に分けるのは構造化プログラミングの基本の1つだな。
関数を細かく分けると、関数呼び出しがツリー構造になってく様子が見えてくるだろ?
gotoを使うとこの関数のツリー構造が壊れる。
0433デフォルトの名無しさん
2013/11/23(土) 15:40:00.23goto禁止の論文に書いてある内容だよ
それに基づいていgoとかはブロック間で行き来したり、
上に戻れない限定されたgotoが搭載されたよね
0434デフォルトの名無しさん
2013/11/23(土) 15:40:23.68では今適当に調べた知らない関数を
http://lxr.linux.no/linux+v3.12.1/+code=deinit_rsq
0435デフォルトの名無しさん
2013/11/23(土) 15:40:36.09I 構造化プログラミング論
12 プログラムのモデルについて
で
局所的な変数について言及してる
0436デフォルトの名無しさん
2013/11/23(土) 15:42:40.69抜粋よろしく
0437デフォルトの名無しさん
2013/11/23(土) 15:42:51.64次にすぐ上にあった関数を
http://lxr.linux.no/linux+v3.12.1/+code=init_rsq
0438デフォルトの名無しさん
2013/11/23(土) 15:44:32.45お前ふざけんなw
これはつぎの2つの重要な面を反映していました。
第1番目は、”有効範囲(scope)”の概念です。
。。。
0439デフォルトの名無しさん
2013/11/23(土) 15:45:16.57>>438>>は>>436だった・・・
0440デフォルトの名無しさん
2013/11/23(土) 15:50:46.41では次にあなたの感想をどうぞ
0441デフォルトの名無しさん
2013/11/23(土) 15:52:41.33機能として必要になったときそこで分割すれば、十分だよ。
あとで必要になるかもしれないで作っていたらゴミだらけになるじゃないか。
そんなもの品質を落とすだけの蛇足だ。
0442デフォルトの名無しさん
2013/11/23(土) 15:52:53.92関数が小さくなるだけでもレビューやトレースがかなり捗る。
0443デフォルトの名無しさん
2013/11/23(土) 15:52:57.440444デフォルトの名無しさん
2013/11/23(土) 15:54:39.97契約プログラミングまで身につけるには100年くらいかかりそうだなこりゃ。
0445デフォルトの名無しさん
2013/11/23(土) 15:58:09.68バックってそういう・・ってバカ!
0446デフォルトの名無しさん
2013/11/23(土) 16:00:21.27ひとつのレスは3行まで(キリっ
0447デフォルトの名無しさん
2013/11/23(土) 16:00:27.53そのコードも200行超がザラだな。
あと確かに一度しか呼ばれない関数もあったな。
ただその関数は将来再利用すること前提の関数だな。
0448デフォルトの名無しさん
2013/11/23(土) 16:01:13.42構造化された関数は?
0449デフォルトの名無しさん
2013/11/23(土) 16:02:08.620450デフォルトの名無しさん
2013/11/23(土) 16:02:50.62でかいからって壊すの?
0451デフォルトの名無しさん
2013/11/23(土) 16:05:25.41だから書いてるときに分割できるならそれに越したことはない。
もちろん時間の関係上常にできるわけじゃない。
0452デフォルトの名無しさん
2013/11/23(土) 16:05:56.430453デフォルトの名無しさん
2013/11/23(土) 16:06:24.56オブジェクト指向でも再利用できんコードの分離は望まれてないよ。
例えばSmalltalkはブロックを多用し、出来るだけ1箇所に書く。
長いメソッドよりまとまらない処理の方が嫌われる。
0454デフォルトの名無しさん
2013/11/23(土) 16:07:23.27ソース
0455デフォルトの名無しさん
2013/11/23(土) 16:08:44.240456デフォルトの名無しさん
2013/11/23(土) 16:09:01.07上のほうでだれかが言っていたが、
関係する変数を関数内に隠せる場合、
その分だけでも片付いているのは事実。
0457デフォルトの名無しさん
2013/11/23(土) 16:13:18.481箇所しか呼ばれない関数を分離する事と、プロトコルにあわせてメソッドを分離することは違うぞ。
0458デフォルトの名無しさん
2013/11/23(土) 16:14:06.06200超は一つで、200前後で見積もっても3ぐらいしかない
コードは2.4.16から変わってない上にstatic定義だから
将来の再利用性というよりは機能の分割目的だろう
0459デフォルトの名無しさん
2013/11/23(土) 16:16:40.69言い方が違うだけで、言ってること同じじゃないか。
何を今更。
0460デフォルトの名無しさん
2013/11/23(土) 16:23:17.01PharoのSmalltalkクラスオブジェクト
Smalltalkの中じゃかなり長いメソッドが多いが、
再利用できないメソッドはおいてない。
サードのコードが入ってないSystem系はだいたいそんな感じ。
あるとすればExample系位だよ
間違えて再利用できないメソッドにメッセージ送っても危険だしな。
0461デフォルトの名無しさん
2013/11/23(土) 16:24:21.20>間違えて再利用できないメソッドにメッセージ送っても危険だしな。
少なくともprivateのある現在の言語には関係ないな
0462デフォルトの名無しさん
2013/11/23(土) 16:26:41.04確かに、呼び出してはないがプロトコルに使われてるわけで、
プロトコルに必要とすらされない単なる分離された関数とは違うだろ。
それ言い出したら、コールバックも割り込みも同じ扱いじゃねえか。
0463デフォルトの名無しさん
2013/11/23(土) 16:27:30.700464デフォルトの名無しさん
2013/11/23(土) 16:28:38.27メソッドにprivateなんて要らんけどな。
それこそOOが出来てない。
0465デフォルトの名無しさん
2013/11/23(土) 16:29:54.22ハイ終了
0466デフォルトの名無しさん
2013/11/23(土) 16:31:54.560467デフォルトの名無しさん
2013/11/23(土) 16:32:29.35何を主張するつもりなんだよw
0468デフォルトの名無しさん
2013/11/23(土) 16:32:30.560469デフォルトの名無しさん
2013/11/23(土) 16:33:41.28申し訳ありませんでした。
コールバックではなく
かつ
プロトコルで要求されていない
かつ
再利用される予定もなく
かつ
一度しか呼ばれない関数は読みづらいだけ
0470デフォルトの名無しさん
2013/11/23(土) 16:34:19.75変数用だろアレ
0471デフォルトの名無しさん
2013/11/23(土) 16:34:40.83内部的な設計分離をプロトコルと言ってるのかと。
なら違う扱いであってると思うよ。
きちんと、別物の前提で話してるだろう。
0472デフォルトの名無しさん
2013/11/23(土) 16:35:56.20幾つかの言語はデフォでprivateなのは変数だけ
0473デフォルトの名無しさん
2013/11/23(土) 16:36:48.26・privateは変数専用である
0474デフォルトの名無しさん
2013/11/23(土) 16:37:20.35Cとjavaとアセンブリ言語しか必修じゃないけどこんなもん?
選択でRubyもあるけど
0475デフォルトの名無しさん
2013/11/23(土) 16:37:41.09よくないよなアレは
publicとかprivateとか恣意的に変えられないようにすべき
0476デフォルトの名無しさん
2013/11/23(土) 16:38:37.93インターフェースとかAPIとかと同じ意味合いだよ
主に実装の抽象化を目的としたやつ
0477デフォルトの名無しさん
2013/11/23(土) 16:39:47.78処理委譲したいならインターフェース渡せばいいだけや
0478デフォルトの名無しさん
2013/11/23(土) 16:40:55.43ならやっぱり同じだろ。
レイヤでの分離以外に、分離する理由がないだろ。
0479デフォルトの名無しさん
2013/11/23(土) 16:42:09.400480デフォルトの名無しさん
2013/11/23(土) 16:43:34.88Smalltalk系統はそうだよ。
Selfやjavascriptに関してはprivateすらないけど。
そもそもC++系統のコンパイラーの実装がめんどかったんで、
スコープ修飾子は関数か変数か区別しません系とは
考え方が違うからな。
0481片山博文MZコスモ ◆T6xkBnTXz7B0
2013/11/23(土) 16:45:02.84http://katahiromz.web.fc2.com/xscreensaverwin/
https://github.com/katahiromz/XScreenSaverWin
0482デフォルトの名無しさん
2013/11/23(土) 16:45:20.32非難されてんのは、行数減らすのが目的で、実装も抽象化できない関数だから。
0483デフォルトの名無しさん
2013/11/23(土) 16:46:29.38・一度しか呼ばれない関数は読みづらいだけ
・関数というブロックより一段厳しいスコープによる可読性
のトレードオフってことでいいよね?
おれは上は気にならないし(気になる場合は残すが数百行単位ではない)
単純読みでもほとんどの場合関数になってたほうが見やすいし
スコープ制限されてるしで、できる余裕があるなら関数にするでいいや。
0484デフォルトの名無しさん
2013/11/23(土) 16:48:09.29インターフェースって何ズラ
仮想関数と何が違うズラ
デリゲートって何ズラ
関数ポインタと何が違うズラ
じじい着いて行けねえズラ
0485デフォルトの名無しさん
2013/11/23(土) 16:48:29.84どんどん病気が酷くなってくなw
0486デフォルトの名無しさん
2013/11/23(土) 16:48:50.12関数は>>385 >>387の理由で読みづらい
0487デフォルトの名無しさん
2013/11/23(土) 16:50:35.27C++ってprivateでもオーバーライドできるんやでスゴイやろ
0488デフォルトの名無しさん
2013/11/23(土) 16:52:30.20つか>>385>>387では
ダイクストラの「プログラムの段階的作成」はどういう立ち位置になるわけ?
0489デフォルトの名無しさん
2013/11/23(土) 16:53:10.80>>385 >>387だけから>>469を導き出すって無茶だぞ。
0490デフォルトの名無しさん
2013/11/23(土) 16:57:06.51そもそもSmalltalk系だとprivate自体が重要じゃないからなぁ。
オブジェクト内の変数にアクセスしたいなら
結局#insVar:メッセージ送れば見られるし。
メッセージプロトコルを守る事が最重要で情報隠蔽なんそれって感じ
ただカプセル化は多用されるけどね。
カプセル化≠情報隠蔽private
0491デフォルトの名無しさん
2013/11/23(土) 16:57:26.680492デフォルトの名無しさん
2013/11/23(土) 16:59:15.56ダイクストラ全く関係ないよな
0493デフォルトの名無しさん
2013/11/23(土) 16:59:20.030494デフォルトの名無しさん
2013/11/23(土) 17:00:55.54>>425>>491
これでも理解できない?
0495デフォルトの名無しさん
2013/11/23(土) 17:02:01.58自分の主張が通らないときちがい扱いか
経験も根拠もないくせに
0496デフォルトの名無しさん
2013/11/23(土) 17:02:52.12お前は例の読解力のない基地外か。
0497デフォルトの名無しさん
2013/11/23(土) 17:03:13.72これ笑うとこ?w
0498デフォルトの名無しさん
2013/11/23(土) 17:03:41.93SmallTalkerどころかLoudSpeakerジャネーノ
0499デフォルトの名無しさん
2013/11/23(土) 17:04:07.72お前のそのレスいろいろ読解力ないことがばれてるぞ
0500デフォルトの名無しさん
2013/11/23(土) 17:04:15.27main内で静的変数使ってコマンドラインを再帰解析だ
これならニ回以上呼ばれる
0501デフォルトの名無しさん
2013/11/23(土) 17:06:01.33いやいや外から呼ばれるのは一回だからとマジレスw
0502デフォルトの名無しさん
2013/11/23(土) 17:06:28.94そういうあなたは、冗長な文章書いてた人ですね。
0503デフォルトの名無しさん
2013/11/23(土) 17:07:31.10な・・ならmainを呼ぶだけのmain_externalを作れば・・
0504デフォルトの名無しさん
2013/11/23(土) 17:09:15.72一度しか呼ばない関数を分割するな
じゃなく
抽象化やコールバック目的、プロトコルに準じる目的以外で、
一度しか呼ばれない関数を作るなと言ってるんだけど
main関数を分割するかどうかは関係ないのはわかってるか?
0505デフォルトの名無しさん
2013/11/23(土) 17:09:21.21それはmainから呼び出すので内部を分割しているのと変わりませんね
とマジレスw
0507デフォルトの名無しさん
2013/11/23(土) 17:10:33.03>>491これを見てどう読解できるんだよ
0508デフォルトの名無しさん
2013/11/23(土) 17:11:40.030509デフォルトの名無しさん
2013/11/23(土) 17:12:58.96じゃ煽るだけじゃ無く
お前の豊富な経験で反論してみろよw
0510デフォルトの名無しさん
2013/11/23(土) 17:13:45.51COBOLer?
0511デフォルトの名無しさん
2013/11/23(土) 17:14:07.100512デフォルトの名無しさん
2013/11/23(土) 17:14:33.19くそ・・じゃあエントリポイントを書き換えてmainを2回呼んでやる!
0513デフォルトの名無しさん
2013/11/23(土) 17:14:49.580514デフォルトの名無しさん
2013/11/23(土) 17:14:52.12関数外に依存してりゃ抽象化にならねえだろ
0515デフォルトの名無しさん
2013/11/23(土) 17:18:19.47まあそういう意味では完全ではないが一段限定されるでしょ。
変数スコープに限らなければ>>511
0516デフォルトの名無しさん
2013/11/23(土) 17:18:19.57説明をお願いします。
0517デフォルトの名無しさん
2013/11/23(土) 17:21:41.28お前が段階的抽象化論の意味を間違えてるように見える
段階的抽象化ってのは実装に依存しないようにしましょうって話だ
今回の話とは関係ない
0518デフォルトの名無しさん
2013/11/23(土) 17:24:27.69外部に依存する=関数の呼び出し元を変更すると関数内部に変更が必要な場合がある
外部に依存しない=関数呼び出し元を変更しても関数内部の変更は不要
0519デフォルトの名無しさん
2013/11/23(土) 17:26:32.45段階的抽象化には実装から独立したプロトコル(規約)が必要だろ
0520デフォルトの名無しさん
2013/11/23(土) 17:26:56.05それだけじゃないでしょ
プログラムサイズが大きくなったとしても正しさを証明できる
良く構造化されたプログラム(well-structured programs)、
大きなプログラムの理解を助ける段階的な抽象化(step-wise abstraction)、
抽象データとその操作の抽象文の共同詳細化(joint refinement)について述べた。
0521デフォルトの名無しさん
2013/11/23(土) 17:27:01.35関数を作る時点では一度しか呼ばないなんてわからないので
一度かどうかは関数を作る基準にならない。
少なくとも、関数を使っている場所とテストコードの
2箇所で使用するのは明らかなので
一度しか呼ばれない関数なんてものは存在しない。
0522デフォルトの名無しさん
2013/11/23(土) 17:28:19.75でその厳しい条件だとなにかいいことがあるの?
その条件じゃなければ分割に意味はないの?
0523デフォルトの名無しさん
2013/11/23(土) 17:30:33.86ある関数から呼ばれなくなった途端、
削除されたり名前が変わったりするのは抽象化と言えんだろ。
抽象化してたらシグニチャーを簡単に変更できない。
0524デフォルトの名無しさん
2013/11/23(土) 17:31:54.05テストをやる理由を考えて見ればわかる。
テストコードを書くのはテストコードが必要だからだ。
なぜテストコードが必要かというと、
バグを入れないために必要だからだ。
複雑なものほどバグが入りやすい。
だからバグを入れないようにするには、小さな単位でテストした方がいい。
小さな単位でテストできるようにするためには
少なくともそれが関数になっていないといけない。
もちろん疎結合になっているべきという理由もあるがね。
でも全ては小さな関数にすることが基本。
よって、テストをするために関数が必要。
それが一回しか呼ばれていないとか関係ない。
より小さな単位で関数化することで、テストも用意になり
複雑性もバグも減る。
0525デフォルトの名無しさん
2013/11/23(土) 17:32:09.430526デフォルトの名無しさん
2013/11/23(土) 17:32:46.03ありがとう。でもちょっと理解できなかった。
一方の変更で済ませられないって、どういう場合?
0527デフォルトの名無しさん
2013/11/23(土) 17:36:33.35>大きなプログラムの理解を助ける段階的な抽象化(step-wise abstraction)
は抽象化ではないと。
0528デフォルトの名無しさん
2013/11/23(土) 17:36:47.58移植性を上げたり、再利用性を上げる上での基本だろ。
外部に依存してたら、最初から外部の一部にしておいた方が、
名前の変更だの引数の変更だの発生せず遥かにマシだわ。
0529デフォルトの名無しさん
2013/11/23(土) 17:37:59.12関数の呼び出しの前後で、何かが変わる。
だから関数の呼び出し前と
呼び出し後を検証すれば
それがテストコードになる。
関数の呼び出し前と呼び出し後で
変更するものが多くあればあるほど
テストは難しくなる。
1つの値しか変わらないのなら、その1つだけをチェックすればいいが。
その値が2つになれば、組み合わせで4パターン。
3つになれば8パターン。4つになれば16パターン。どんどん増えていく。
だからそのようなことがないように、小さな関数に分けるわけ。
0530デフォルトの名無しさん
2013/11/23(土) 17:38:07.68それは形だけだろ、呼び出し元に依存してたらテストしても意味ねえよ。
0531デフォルトの名無しさん
2013/11/23(土) 17:39:38.85なら呼び出し元に依存していなければいいだけの話。
0532デフォルトの名無しさん
2013/11/23(土) 17:40:19.07うん屁理屈だね
分割しなかったら再利用性が高まるとかないから。
数100行にもわたるコードを1つ関数として切り出したところで
作業が増えるどころか見通しが上がるほうが多いよ。
で外部に依存てなんのこと?
0533デフォルトの名無しさん
2013/11/23(土) 17:41:38.31そのライブラリの関数は一回どころか
(テストコードを除いて)一回も使われていないことだってある。
ではなぜ、それを関数にしたのか?
答えられるかい?
0534デフォルトの名無しさん
2013/11/23(土) 17:42:02.22関数の行数を減らす目的で、関数の一部を別の関数に無理に分離した場合。
必要な引数が変更になる度に呼び出し元、呼び出し先相互に影響を受ける。
それから、呼び出しもとが使わなくなると大抵削除されてしまう。
0535デフォルトの名無しさん
2013/11/23(土) 17:43:34.14関数化すればいいだけじゃないかw
ほんと関数化が下手だなw
0536デフォルトの名無しさん
2013/11/23(土) 17:44:09.36お前が作ってるのは、関数ではなく
サブルーチンだよ。
関数を作れ。
0537デフォルトの名無しさん
2013/11/23(土) 17:44:14.76それはおかしい。
その修正は同じ箇所にあってもほぼ同じ量修正が入ってる。
違うのは関数のインターフェイスがあるかないかだけ。
これって1行しか差がない。
その数100行で1行分すら惜しいと言う感性が理解できない。
0538デフォルトの名無しさん
2013/11/23(土) 17:46:33.18呼び出し元から不要になるたびに削除
引数が増えるたびに引数追加でテストも変更
やっとられんな
0539デフォルトの名無しさん
2013/11/23(土) 17:46:38.02↓
関数にする
↓
いろんな面倒事が起きる
↓
だから関数にするべきじゃない
↓
一回しか使わないものは面倒なだけ。
あー、なるほどね。要するにこういうわけかw
0540デフォルトの名無しさん
2013/11/23(土) 17:47:07.44それテストの粒度荒くしただけ
0541デフォルトの名無しさん
2013/11/23(土) 17:47:21.53いや、だから、なんでそんな関数作るの?
お前が関数作るの下手なだけだよね?
下手だから、そんなメンテナンス性の悪い関数を作ってしまい。
だから関数にするなって言ってるだけだよね?
0542デフォルトの名無しさん
2013/11/23(土) 17:48:45.83そういう行数減らすための再利用できないヘタな関数つくんなって話だ。
0543デフォルトの名無しさん
2013/11/23(土) 17:48:51.35もう考え方が違うんだな。
目的は置いておいて、名称付きの関数が抽象化された物と考えるなら、
引数の変更は実装ではなくて、抽象モデル自身の変更になる。
呼び出し側が変更されるなら、呼び出し側で対応するか、
別の関数を経由すればいい。
0544デフォルトの名無しさん
2013/11/23(土) 17:49:13.30見てみたいなw
なんか長い行のいい例ないかな。
まあ、長いのを途中でグループ化しただけの
サブルーチンを作るという落ちだろうけどなw
0545デフォルトの名無しさん
2013/11/23(土) 17:49:53.50一度しか呼ばない再利用できない関数がそれ以外にあるか?
0546デフォルトの名無しさん
2013/11/23(土) 17:49:58.36頭悪いな。
下手な関数じゃなくて、
上手な関数にすればいいだけだろ。
それとも何か?一回しか使わないものは
上手な関数に出来ないとでもいうのか?
0547デフォルトの名無しさん
2013/11/23(土) 17:50:12.94段階的詳細化って総コード量はお前も指摘するとおり増えてるぞw
0548デフォルトの名無しさん
2013/11/23(土) 17:50:40.44きれいな関数が出来るかどうかは
全然関連性がないよね?
これが答えだよ。
0549デフォルトの名無しさん
2013/11/23(土) 17:52:44.060550デフォルトの名無しさん
2013/11/23(土) 17:52:52.95もしかして関数化する目的は、
再利用だけだと思ってないか?
再利用する以外にも関数化する意味があるのは事実だから
そのために関数化する意味があるよね。
0551デフォルトの名無しさん
2013/11/23(土) 17:53:29.42総コード量が重要なのではなく
メンテナンス性の方が重要だからね。
0552デフォルトの名無しさん
2013/11/23(土) 17:53:53.90上手な関数は再利用できるだろバカ
0553デフォルトの名無しさん
2013/11/23(土) 17:54:49.86再利用できるが、再利用しない場合はどうするんだ?
それが一回しか呼ばれない関数なんだが?
0554デフォルトの名無しさん
2013/11/23(土) 17:55:07.05総コード量じゃなくて関数内のコード量を言ってんだよ
0555デフォルトの名無しさん
2013/11/23(土) 17:55:28.11再利用するかどうかは別の話だよね?
0556デフォルトの名無しさん
2013/11/23(土) 17:55:39.91それは今回の対象になってないだろ
0557デフォルトの名無しさん
2013/11/23(土) 17:55:47.98できるのとするのは別。
可視化のためにサブルーチン作るのは有意義。
平行線辿り過ぎてるわ。
0558デフォルトの名無しさん
2013/11/23(土) 17:55:52.50>>537はどう理解してるの?
0559デフォルトの名無しさん
2013/11/23(土) 17:56:59.70一回しか使わなくても(再利用しなくても)
再利用可能であるならば関数にする方がいい。
0560デフォルトの名無しさん
2013/11/23(土) 17:57:58.93>>385を読む限り駄目
0561デフォルトの名無しさん
2013/11/23(土) 17:58:15.38>>469
0562デフォルトの名無しさん
2013/11/23(土) 17:58:29.91再利用可能な関数を作れる人ってのが
技術力が高い人であり、
それが作れる、再利用可能に出来なかった理由を
一回しか使わないからだ!
って的はずれなことを言っているのが
ここにいるキチガイ。
0563デフォルトの名無しさん
2013/11/23(土) 17:59:17.38じゃあ>>385が間違っているってことで
終わりじゃねーの?
0564デフォルトの名無しさん
2013/11/23(土) 17:59:21.85可読性が上がるという意見が何度も出てるでしょ。
0565デフォルトの名無しさん
2013/11/23(土) 18:00:10.59再利用だけじゃないんだよ?
再利用しか思いつかないから
馬鹿な答えになるんだよ。
0566デフォルトの名無しさん
2013/11/23(土) 18:00:54.66>>469にも書いてあるしそれでいいんじゃない
0567デフォルトの名無しさん
2013/11/23(土) 18:01:49.710568デフォルトの名無しさん
2013/11/23(土) 18:01:52.170569デフォルトの名無しさん
2013/11/23(土) 18:03:42.08テストはインターフェースが固まってない関数にしちゃいかんのよ
Xcodeユニットテストガイドやケントベックがゆってた
0570デフォルトの名無しさん
2013/11/23(土) 18:04:55.230571デフォルトの名無しさん
2013/11/23(土) 18:05:12.63奴は先にテスト書くから・・
0572デフォルトの名無しさん
2013/11/23(土) 18:05:13.42わかります
0573デフォルトの名無しさん
2013/11/23(土) 18:06:36.22そのままリリースするつもりか?
0574デフォルトの名無しさん
2013/11/23(土) 18:06:49.84ホワイトボックス・テストを書かない
ユニット・テストでは、クラスがどのように実装されるかではなく、クラスが何
を行うかに重点を置く必要があります。クラスのホワイトボックス・テストは、
privateおよびprotectedメソッドもすべてテストすることになり、それによる実装
の変更によって、テストも変更が必要になる可能性が高くなります。したがって、
既存のテストを使用して何も破損しなかったことを実証する場合、ホワイトボッ
クス・テストは効果的なリファクタの妨げになります。同様に、インタフェース
の実装クラスではなく、インタフェースに対してテストを記述することをお薦め
します。
この記事以外にもあるのですが、有名どころの人が書いてるのはprivate
0575デフォルトの名無しさん
2013/11/23(土) 18:07:04.41coverage的にも分岐は関数化したほうが良い。
無駄にテスト項目増える。
0576デフォルトの名無しさん
2013/11/23(土) 18:08:51.021000行の関数をテストすりゃいいだけだろ
glibのvsprintfの関数とかクソなげぇけどテスト書かれてるぞ
0577デフォルトの名無しさん
2013/11/23(土) 18:09:48.05ホワイトテストはすべきじゃないんですって
0578デフォルトの名無しさん
2013/11/23(土) 18:11:07.861000行の関数が外部からテスト可能って動作実績があるもののおまけだよ
0579デフォルトの名無しさん
2013/11/23(土) 18:12:42.05ホワイトテストじゃなくてホワイトボックステストな
境界値とかも分岐が小さいほうが手間かからないんだよ
0580デフォルトの名無しさん
2013/11/23(土) 18:12:51.93そういう問題じゃない
そもそも無理にホワイトテストはしちゃいけない
0581デフォルトの名無しさん
2013/11/23(土) 18:13:56.41テストがおまけって意味?
そんなことないだろ。
0582デフォルトの名無しさん
2013/11/23(土) 18:14:50.71どうやって自分のプログラムの動作を保証するの?
テストのコストもあるから
最終的にはブラックボックステストしか残さなくても
1000行もの関数をテストもせずに新規実装リリースするつもりか?
0583デフォルトの名無しさん
2013/11/23(土) 18:15:07.19内部を一部切り離そうが切り離すまいが、
ホワイトボックステストのテスト項目は変わらんだろ
0584デフォルトの名無しさん
2013/11/23(土) 18:17:39.92・・分岐網羅とかホワイトボックスだよな?
むしろホワイトボックステストの方は劇的に変わるはずだが
0585デフォルトの名無しさん
2013/11/23(土) 18:19:49.54ごめんブラックボックステストの間違いでした
0586デフォルトの名無しさん
2013/11/23(土) 18:20:50.45普通に関数の仕様に基づいてブラックボックステストだろ
仕様外の動作も保証する気なの?リファクタリングどうすんの?
0587デフォルトの名無しさん
2013/11/23(土) 18:21:44.38単体テスト、あるいはユニットテストとは、
メソッドなどの小さな単位で行うテストのことである。
単体テストは、ホワイトボックステストを利用して行われる場合が多い。
0588デフォルトの名無しさん
2013/11/23(土) 18:22:49.88その仕様が固まっているなら
1000行もあれば簡単に内部分割できるでしょ。
0589デフォルトの名無しさん
2013/11/23(土) 18:23:17.32仕様決まってない段階なら
ゴッドオブジェクトならぬゴッド関数作るより
細分化したほうがブラックボックスでもやりやすいだろ
0590デフォルトの名無しさん
2013/11/23(土) 18:25:11.63俺でも編集できるWikipediaが正しいとかw
0591デフォルトの名無しさん
2013/11/23(土) 18:26:44.53関数化した関数が>>469を満たして無ければしてもテストしても意味ないぞ
0592デフォルトの名無しさん
2013/11/23(土) 18:27:38.29後の仕様変更で複数回呼び出すようになるなんてことは普通にあるぞ。
再利用性の問題よりも、分割によって元の関数や別の関数との結合が疎になることのほうが、
仕様変更に対する柔軟性を高めるために重要だけど。
0593デフォルトの名無しさん
2013/11/23(土) 18:28:13.790594デフォルトの名無しさん
2013/11/23(土) 18:29:36.31再利用できない単位に分割すると、関数の作り直しで時間を食うし読みづらい
0595デフォルトの名無しさん
2013/11/23(土) 18:30:00.560596デフォルトの名無しさん
2013/11/23(土) 18:30:42.15意味ないわけないでしょ。
自分の実装を確かめる手段を構築するんだよ。
その手段が外部に要求されてないなら公開する必要がないだけ。
おまえは良くわからないから全体が動けばいいやと言ってるわけだが
関数全体のテストはすべて周りが用意してくれるのか?
そのレベルだったら1000行にならないだろ。
0597デフォルトの名無しさん
2013/11/23(土) 18:31:36.87最初から再利用できる関数は対象になってないんだよ。何回同じ話繰り返すんだ。
0598デフォルトの名無しさん
2013/11/23(土) 18:31:44.29>>537
0599デフォルトの名無しさん
2013/11/23(土) 18:33:09.33http://www.atmarkit.co.jp/ait/articles/0909/14/news103.html
Webアプリケーション開発においては、
単体テストで関数やクラスメソッドをテストし、
結合テストでWebブラウザからの操作をテストするのが一般的です。
前者の単体テストをユニットテストと呼び
0600デフォルトの名無しさん
2013/11/23(土) 18:35:16.80最初から再利用できない関数がその後仕様変更で変わるという話なんだけど。
0601デフォルトの名無しさん
2013/11/23(土) 18:37:08.72大きい関数でもテストの妥当性なんて誰もチェックしてないし。
ってことか。
0602デフォルトの名無しさん
2013/11/23(土) 18:38:39.152chの行数の都合上一行にたたんではいるが、関数への移動の手間と、呼び出し元呼び出し先の変更の手間が掛る。ダウト。
int a;
{ int b= a }
int a;
{ int c; { int b=a +c; } }
int function(int a) { int b = a; return b; }
int a;
function( a );
int function(int a, int c){ int b = a + c; return b; }
int a,c;
function( a, c)
0603デフォルトの名無しさん
2013/11/23(土) 18:39:45.43oracleとatmarkどっちが正しいんでしょうねぇ
0604デフォルトの名無しさん
2013/11/23(土) 18:40:54.24ブラックボックステストはしてますしお寿司
0605デフォルトの名無しさん
2013/11/23(土) 18:42:56.27ホワイトボックス・テストを書かない
ユニット・テストでは、クラスがどのように実装されるかではなく、クラスが何
を行うかに重点を置く必要があります。クラスのホワイトボックス・テストは、
privateおよびprotectedメソッドもすべてテストすることになり、それによる実装
の変更によって、テストも変更が必要になる可能性が高くなります。したがって、
既存のテストを使用して何も破損しなかったことを実証する場合、ホワイトボッ
クス・テストは効果的なリファクタの妨げになります。同様に、インタフェース
の実装クラスではなく、インタフェースに対してテストを記述することをお薦め
します。
0606デフォルトの名無しさん
2013/11/23(土) 18:44:00.57行数変わってねえじゃん
0607デフォルトの名無しさん
2013/11/23(土) 18:45:47.40何が言いたいのか理解すんのが難しいw。
関数移動なんて普通のエディタやIDEじゃワンクリックワンキーだし、
呼び出し元は元の修正分と考えれば修正先の引数が変更になるだけじゃん。
で他の修正は等しく修正だからやっぱ一行。
まあ書き方によっては数行差が出るかもしれないが、
数100行の変更のなかで機械的な変更なんて誤差にもならないし
関数化されてスコープが狭くなってるメリットのほうが大きいよ。
0608デフォルトの名無しさん
2013/11/23(土) 18:47:03.69何回かステップインして、ここはもう絶対問題ないと確定した関数はもうステップオーバーするだろ?
こうして問題ないところをどんどん除外していくと、トレースが加速して楽になって行くだろ?
関数をブレイクダウンしないと、こうやってテストの範囲を絞っていけないだろ。
0609デフォルトの名無しさん
2013/11/23(土) 18:48:25.520610デフォルトの名無しさん
2013/11/23(土) 18:49:15.83ブロックこえたところにブレークポイント置くのは手間じゃないんだって
0611デフォルトの名無しさん
2013/11/23(土) 18:49:31.18行数じゃなく手間だよ
0612デフォルトの名無しさん
2013/11/23(土) 18:50:28.21再利用できない関数ってなんだ?
そもそもそれがおかしいだろ。
関数=再利用できる
再利用できない=関数ではない。
0613デフォルトの名無しさん
2013/11/23(土) 18:50:51.43関数移動しないでいいならそれが一番だろ
そう書いたら0か1かしか言えない上に鶏頭だから関数使うなとか言い出すんだろうな
0614デフォルトの名無しさん
2013/11/23(土) 18:50:53.29これが手間と思えるくらいのIDEとエディタの使い方なんだよ
デバッグも推して知るべし
0615デフォルトの名無しさん
2013/11/23(土) 18:51:02.60> メソッドにprivateなんて要らんけどな。
> それこそOOが出来てない。
privateメソッドがあればOO出来ていないとは??
0616デフォルトの名無しさん
2013/11/23(土) 18:51:28.960617デフォルトの名無しさん
2013/11/23(土) 18:51:56.23>>518
0618デフォルトの名無しさん
2013/11/23(土) 18:52:42.34つまりキミはワンクリックの手間がおしいくらい
スコープ・関数のメリットが感じられないわけだね
もし仕事してるとしたら同僚に同情するわ
0619デフォルトの名無しさん
2013/11/23(土) 18:53:07.20> ユニット・テストでは、クラスがどのように実装されるかではなく、クラスが何
> を行うかに重点を置く必要があります。クラスのホワイトボックス・テストは、
> privateおよびprotectedメソッドもすべてテストすることになり、それによる実装
え?
ブラックボックステストっていつから
パブリックメソッドのテストになったんだ?
っていうかそれならなおさらパブリック関数にした方がいいな。
0620デフォルトの名無しさん
2013/11/23(土) 18:53:14.41IDEのマーカー機能とか折りたたみ機能使えないお前に言われたくない
0621デフォルトの名無しさん
2013/11/23(土) 18:53:39.65ワロタw
>>518が馬鹿ってだけじゃないかw
0622デフォルトの名無しさん
2013/11/23(土) 18:54:32.82実際に一回しか使うか使わないかは関係ない。
再利用可能なものが関数。
そうでないものは関数に似た別のものだ。
0623デフォルトの名無しさん
2013/11/23(土) 18:54:51.86マーカーつけたブロックに飛ぶんなら構わないんだどねぇ。
0624デフォルトの名無しさん
2013/11/23(土) 18:55:56.90> メソッドにprivateなんて要らんけどな。
> それこそOOが出来てない。
privateメソッドがあればOO出来ていないとは??
0625デフォルトの名無しさん
2013/11/23(土) 18:56:05.72だから引数が変わったらーとかいってるのは
根本的におかしい。
それは正しく関数化出来なかっただけだから。
で、なんでこれが一回しか使わない関数の話になるの?
0626デフォルトの名無しさん
2013/11/23(土) 18:56:21.52>そうでないものは関数に似た別のものだ。
それを書くなって話だろ終わりじゃん
0627デフォルトの名無しさん
2013/11/23(土) 18:56:51.86一回しかつかわないもの=privateメソッドじゃないよね。
0628デフォルトの名無しさん
2013/11/23(土) 18:57:28.68お前はどんなテストをする気なんだ?
0629デフォルトの名無しさん
2013/11/23(土) 18:58:07.69何で関数移動が手間だと思うのか。
今時普通は1クラス1ファイルで、1ファイルの行数自体が平均100行くらいだろ?
単一責任がよいクラスとされているし。
たまに300行くらいの大きいのもできるけど、50行以下のも多い。
ソースファイル全体が2〜3ページで収まるし、ファイル全体が1画面に収まることも珍しくない。
こうした中での関数分割や移動は全く苦にならない。
でもコマルデ君はきっと1ファイルに1000行とか平気で書いてる。そりゃ関数分割するとどこにあるのかわからなくもなる。
オブジェクト指向が身についてないか、オブジェクト指向言語を使っていたとしても、
メソッドが何十個もあったりとか、そういう状況なんじゃないかな。
まずはデザインパターンとか、最近の設計のトレンドを勉強したほうがいいと思う。
0630デフォルトの名無しさん
2013/11/23(土) 18:58:16.05> それを書くなって話だろ終わりじゃん
うん。だから1回しか使わない "関数" はありなわけだよ。
だって、関数である以上1回しか使わなくても
再利用可能なわけだから。
0631デフォルトの名無しさん
2013/11/23(土) 18:58:27.15OOできてない、の部分を知りたいんだが。なぜなのかと。
0632デフォルトの名無しさん
2013/11/23(土) 19:00:19.90しかもC++にprivate関数が作れるのは、構文解析を高速にするため
関数と変数の区別をしないて理由以外に特に理由はないし
0633デフォルトの名無しさん
2013/11/23(土) 19:00:41.27関数にする理由ないよね?
0634デフォルトの名無しさん
2013/11/23(土) 19:01:54.06で>>469に戻ると。ループザループ
0635デフォルトの名無しさん
2013/11/23(土) 19:02:20.76privateメソッドがあって、なぜOOできてないという結論に達するのか。
その課程が知りたい。
0636デフォルトの名無しさん
2013/11/23(土) 19:02:24.82主張変わったのか。こっそり撤退の道を探っているのか。
0637デフォルトの名無しさん
2013/11/23(土) 19:02:28.66ほとんどってことじゃないかw
0638デフォルトの名無しさん
2013/11/23(土) 19:03:34.64そもそもprivate関数がいらんだろあんなもん
Python, Ruby, Go, Pharo, javascript・・・
Smalltalk系統の言語にゃないしC++の負の遺産だ
0639デフォルトの名無しさん
2013/11/23(土) 19:04:44.700640デフォルトの名無しさん
2013/11/23(土) 19:04:55.12>>469
0641デフォルトの名無しさん
2013/11/23(土) 19:06:01.370642デフォルトの名無しさん
2013/11/23(土) 19:06:03.670643デフォルトの名無しさん
2013/11/23(土) 19:06:08.41それを問題にすべきだったんじゃないの?
作った関数がすべて同じだけ使われることはない。ムラがある。
その、再利用性の低い糞関数を問題にすべきだったんじゃないかな。
0644デフォルトの名無しさん
2013/11/23(土) 19:07:17.300645デフォルトの名無しさん
2013/11/23(土) 19:07:28.62> メソッドにprivateなんて要らんけどな。
> それこそOOが出来てない。
らしいが。
0646デフォルトの名無しさん
2013/11/23(土) 19:07:40.570647デフォルトの名無しさん
2013/11/23(土) 19:07:53.970648デフォルトの名無しさん
2013/11/23(土) 19:08:19.510649デフォルトの名無しさん
2013/11/23(土) 19:08:44.94> private関数なんてあんのはC++系統と.net framework系ぐらいだよなぁ
Ruby にもある
PHP にもある
VB.NETにもある
JavaScript には将来classの導入とともにprivateが検討されている。
http://wiki.ecmascript.org/doku.php?id=harmony:classes
Python にはないが__をつけることでprivateだとすると公式に書いてある。
http://docs.python.jp/2/tutorial/classes.html#tut-private
お前が知らんだけだよ。
0650デフォルトの名無しさん
2013/11/23(土) 19:09:10.23>>469
0651デフォルトの名無しさん
2013/11/23(土) 19:09:18.350652デフォルトの名無しさん
2013/11/23(土) 19:09:43.24その場合、関数名がグダグダになるという現象に悩まされるんだが。
それは俺が超絶愚か者だからかな?
0653デフォルトの名無しさん
2013/11/23(土) 19:10:14.29ブロックオブジェクトあるいは無名名前空間に定義
0654デフォルトの名無しさん
2013/11/23(土) 19:10:15.850655デフォルトの名無しさん
2013/11/23(土) 19:11:05.61言っていることが的はずれすぎる。
0656デフォルトの名無しさん
2013/11/23(土) 19:11:26.92コメントが打てるなら関数名つくだろ
つまり・・・
0657デフォルトの名無しさん
2013/11/23(土) 19:11:44.31関数として名前つけられて、#pragma markみたいなブロックマーカーには何故名前を付けられないのか?
0658デフォルトの名無しさん
2013/11/23(土) 19:11:48.02>コールバックではなく
>かつ
>プロトコルで要求されていない
>かつ
>再利用される予定もなく
>かつ
>一度しか呼ばれない関数は読みづらいだけ
>>630
>うん。だから1回しか使わない "関数" はありなわけだよ。
>
>だって、関数である以上1回しか使わなくても
>再利用可能なわけだから。
あれ? どうなってんの?
一度しか呼ばない関数は読みづらいけどありなの?
0659デフォルトの名無しさん
2013/11/23(土) 19:12:43.55ブロックと関数ではスコープの扱いが違うから
0660デフォルトの名無しさん
2013/11/23(土) 19:13:32.44必要悪だろ
switch使うよりオブジェクトの多態の方がいいけど
絶対switch使わないのか?
0661デフォルトの名無しさん
2013/11/23(土) 19:13:50.84> じゃあ最初の定義を訂正すればいいわけだな。
> 申し訳ありませんでした。
>
> コールバックではなく
> かつ
> プロトコルで要求されていない
> かつ
> 再利用される予定もなく
> かつ
> 一度しか呼ばれない関数は読みづらいだけ
ようするに、
駄目なやつが書いた関数は読みづらいだけ
一度しか呼ばれていても、
コールバックだったり、プロトコルで要求されていたり
再利用されれる予定があったり、するものは読みづらいとは限らないと
自分でそう言っているのだから、この話は終わりじゃね?
0662デフォルトの名無しさん
2013/11/23(土) 19:14:10.590663デフォルトの名無しさん
2013/11/23(土) 19:17:14.10それで >>386-387 ここに戻るわけだ
で
>>469 に戻り
>>386-387 に来て
また>>469に戻る
以下無限ループ
0664片山博文MZコスモ ◆T6xkBnTXz7B0
2013/11/23(土) 19:19:09.02http://katahiromz.web.fc2.com/xscreensaverwin/
https://github.com/katahiromz/XScreenSaverWin
迷路もあるよ!
0665デフォルトの名無しさん
2013/11/23(土) 19:19:40.91それで >>386-387にもどるのなら>>618
と言ってるから無限ループにしているのはお前
0666デフォルトの名無しさん
2013/11/23(土) 19:20:07.20OOの考えならprivateメソッドにするぐらいなら、別のオブジェクトに委譲する。
privateメソッド呼び出してんならCで関数呼んでるのと同じ。OOPができていない。
以上。
満足か?
0667デフォルトの名無しさん
2013/11/23(土) 19:20:16.28情報隠蔽、疎結合、副作用などの観点から良くない。
0668デフォルトの名無しさん
2013/11/23(土) 19:21:39.66そういうやつにはBASICが向いていると思う。
0669652
2013/11/23(土) 19:22:48.00メリットデメリット踏まえたうえで、名前グダグダの関数名を作っちゃうべきかどうか。
それとも、プロの人は名前グダグダになんて一切ならないのかな?
それともAaaBbbCcccDdFffGGGudaguda(Foo foo, Bar bar, Buz buz)みたいな関数に問題は無いと?
0670デフォルトの名無しさん
2013/11/23(土) 19:22:53.96{
int a;
{
int b;
a;//○
c;//×
}
int c;
{
b;//×
c;//○
}
}
{
a;//×
}
0671デフォルトの名無しさん
2013/11/23(土) 19:24:14.67private変数いじれる内部関数がないからおかしくないか?
0672デフォルトの名無しさん
2013/11/23(土) 19:24:51.79それで >>386-387 ここに戻るわけだ
で
>>469 に戻り
>>386-387 に来て
また>>469に戻る
そして>>661で終わり
0673デフォルトの名無しさん
2013/11/23(土) 19:25:15.190674デフォルトの名無しさん
2013/11/23(土) 19:25:49.18>>661
終わった話。馬鹿な奴が書いたらだめになる当たり前のことで
それ以外の要件は何一つない。
0675デフォルトの名無しさん
2013/11/23(土) 19:27:29.55関数はあるべき形に作ればいいってだけで、
そんな一回しか使わないものはだめみたいな
簡単なルールはない。
0676デフォルトの名無しさん
2013/11/23(土) 19:27:40.13うそがあるならfoobarつけとけ
0677デフォルトの名無しさん
2013/11/23(土) 19:28:21.85関数のあるべき形に
2回以上使っていなければだめ。
という要件はないってことだね。
0678デフォルトの名無しさん
2013/11/23(土) 19:28:50.50Jeff Beyのクラス設計を綺麗にするトレーニング。
いいコードを書くイメージを付けるトレーニングなので、
実際の業務ではもっと緩くていいけど、
ここでも関数のサイズを厳しく制限する練習をさせられる。
ルール1:インデント1段階
1つのメソッドにつきインデントは1段階までにすること
ルール2:else句禁止
else句を使用しないこと
ルール3:プリミティブ禁止
すべてのプリミティブ型と文字列型をラップすること
ルール4:ドット1つ
1行につきドットは1つまでにすること
ルール5:名前省略禁止
名前を省略しないこと
ルール6:小エンティティ
すべてのエンティティを小さくすること
ルール7:インスタンス変数2つ
1つのクラスにつきインスタンス変数は2つまでにすること
ルール8:ファーストクラスコレクション
ファーストクラスコレクションを使用すること
ルール9:プロパティ禁止
Getter/Setter/プロパティを使用しないこと
クラスの単純化を突き詰めると今度はオブジェクト間の連携が難しくなってくるので、
そのあとはデザインパターンを学ぶといい。
0679デフォルトの名無しさん
2013/11/23(土) 19:29:16.72そうかな?
ブロックの説明がグダグダになる場合、
それを関数名に置き換えたらスッキリするとでも?
もしそうだというのなら、俺はコレに関して本当に黙るw
そして滝に打たれてゼロからやり直してくる。
0680デフォルトの名無しさん
2013/11/23(土) 19:29:56.80重要な行を忘れてるぞw
断言する。これらのルールを破らずに1000行のプロジェクト書いたものはOOがうまくなる。
よって望めば制限を和らげることも出来るようになる。でも作者が指摘するのはそうする理由はないということ。
彼のチームはちょうど100,000行のプロジェクトをこの制限のうちに終えたところなんだ。
0681デフォルトの名無しさん
2013/11/23(土) 19:32:01.90C#のように引数の入出力が明示できればなおよい。
そうすると別人が後から追加拡張修正するときにこの関数内には引数にない変数zを使う処理は書き加えてはいけない
だから別のところに書こうというヒントがあたえられる。
0682デフォルトの名無しさん
2013/11/23(土) 19:32:41.66>>>674
>そうかな?
>ブロックの説明がグダグダになる場合、
>それを関数名に置き換えたらスッキリするとでも?
どう考えてもスッキリする。
即答だわw
0683デフォルトの名無しさん
2013/11/23(土) 19:32:57.95さすがに詐欺としか思えないけど
>ルール2:else句禁止
これはなぜ?
>ルール4:ドット1つ
これすごくない?
>ルール7:インスタンス変数2つ
階層深くならない?
0684デフォルトの名無しさん
2013/11/23(土) 19:37:47.25そもそもprivateメソッドなんて何に使ってんの?
0685デフォルトの名無しさん
2013/11/23(土) 19:38:56.10>>469
しつこい
0686デフォルトの名無しさん
2013/11/23(土) 19:40:19.28>>670
ブロックはスコープ付けるためのもんやで
これに#pragma markとかIDEの機能使えば名前も付けられるんやで
0687デフォルトの名無しさん
2013/11/23(土) 19:41:39.773000行ないとかけない処理があったとき
その3000行すべてに渡ってprivate変数をアクセスしようとすれば
そのpublic関数が3000で書かれるか、
public関数を分割して順番に呼んでくださいとコメントに書くのですね。
じゃなければうまく委譲するようにクラスデザインをあーだこーだやるわけですね。
0688デフォルトの名無しさん
2013/11/23(土) 19:42:30.64お前が理解してないのかわざとなのかわからんが
何度も指摘されているように一般的な言語では
ブロックは外のブロックが参照可能。
0689デフォルトの名無しさん
2013/11/23(土) 19:42:40.821000行のプロジェクトだと複数呼ばない関数書くと余計行数増えるんじゃ・・・
0690デフォルトの名無しさん
2013/11/23(土) 19:43:27.06>>ルール2:else句禁止
>これはなぜ?
×if (i==x) { a=x; } else { a=i; }
⚪︎a=i; if (i==x) { a=x; }
こうしろってことだね。
俺は好きではないけど、昔からよく言われてるよ。
>>ルール4:ドット1つ
>これすごくない?
これはクラスの責任範囲を考える、
つまり言い換えれば疎結合を徹底しろってことだね。
実際のプロジェクトではそこまでやらなくてもいいと思うけど、
汎用性を高めたいとき、重くなった責任を軽くしたいときに
ドット数が減るように直すことはよくあるはず。
>>ルール7:インスタンス変数2つ
>階層深くならない?
深くなると思う。これもなかなか守れそうにない。
でもインスタンス変数が少ない=クラスの責任範囲が絞られている、
というのは理解できる。
0691デフォルトの名無しさん
2013/11/23(土) 19:43:39.03結局は名前が付けにくい単位に突き当たる。
当たらないという人は命名の名人か、アホ。
0692デフォルトの名無しさん
2013/11/23(土) 19:43:45.80>>670 を理解してるのか?
0693デフォルトの名無しさん
2013/11/23(土) 19:44:04.37メンバ関数による記述場所の分散はダメって理屈がわからん
0694デフォルトの名無しさん
2013/11/23(土) 19:45:27.22極限を見る練習ってワケか。
まあちょっとどうでもいいや。
サンクス
0695デフォルトの名無しさん
2013/11/23(土) 19:45:33.47privateメンバーがだめって話。
再利用できんだろうし、再利用できない処理の記述を促進する。
0696デフォルトの名無しさん
2013/11/23(土) 19:46:09.39理解できない
a;//×
ってなに?
0697デフォルトの名無しさん
2013/11/23(土) 19:48:06.52privateメンバーがマトモだと思うんなら、privateメンバーが必要なコード書いたことあるんだろ、
それをココに貼ってみ綺麗な形に書き換えるから。
0698デフォルトの名無しさん
2013/11/23(土) 19:49:39.29そこの行のaは参照出来んだろ
0699デフォルトの名無しさん
2013/11/23(土) 19:49:44.28そのレスの時点でアホ
長い関数をどうやってここに貼るんだよ
0700デフォルトの名無しさん
2013/11/23(土) 19:50:26.63横からだがそもそもその、
privateメンバー=privateメンバ変数+privateメンバ関数
ってこと?
0701デフォルトの名無しさん
2013/11/23(土) 19:50:54.85向いてないな
0702デフォルトの名無しさん
2013/11/23(土) 19:52:50.60#include <stdio.h>
int main()
{
int a = 1;
{
printf("%d\n",a);
}
return 0;
}
で結果が1っでことであってる?
0703デフォルトの名無しさん
2013/11/23(土) 19:54:16.83>>661
0704デフォルトの名無しさん
2013/11/23(土) 19:54:49.07お前こそしつこい
674 名前:デフォルトの名無しさん[sage] 投稿日:2013/11/23(土) 19:25:49.18
>>669
>>661
終わった話。馬鹿な奴が書いたらだめになる当たり前のことで
それ以外の要件は何一つない。
0705デフォルトの名無しさん
2013/11/23(土) 19:54:53.76ム板に来るのは初めてか?ここに貼れよ
ideone.com
>> 700
private関数限定の話
0706デフォルトの名無しさん
2013/11/23(土) 19:56:55.36#include <iostream>
int main()
{
{
int a = 1;
}
{
std::cerr << a << std::endl;
}
return 0;
}
0707デフォルトの名無しさん
2013/11/23(土) 19:58:07.38ルール7:インスタンス変数2つ
いくらなんでも子供は2人までというくらい理不尽である
ルール9:プロパティ禁止
Getter/Setter/プロパティを使用しないこと
いやいやいやいや必要に応じて使用するのが正しい。
0708702
2013/11/23(土) 19:58:42.64論点は>>702のaが見えてしまうのは関数より制限がゆるいというのであって
#include <stdio.h>
int main()
{
{
int a = 1;
}
{
printf("%d\n",a);
}
return 0;
}
が見えないことではない。
0709デフォルトの名無しさん
2013/11/23(土) 19:59:25.900710デフォルトの名無しさん
2013/11/23(土) 20:02:28.32まぁPropertiyパターンはあんまり使うべきじゃないな
WikipediaのSmalltalkの記事みてみりゃ面白い
0711デフォルトの名無しさん
2013/11/23(土) 20:07:50.52関数でもグローバル変数使えば外の変数は見えるわけで、
どっちかというと、なんども呼び出せないブロックのほうが制限は強いんだがな。
0712デフォルトの名無しさん
2013/11/23(土) 20:09:36.07http://code.google.com/p/box2d/source/browse/trunk/Box2D/Box2D/Dynamics/b2Body.h
0713デフォルトの名無しさん
2013/11/23(土) 20:10:55.89変数にアクセスする制限は関数のほうが強いでしょ
関数を呼び出されて問題になるケースは何?
0714デフォルトの名無しさん
2013/11/23(土) 20:15:38.10先生、必要な例かどうかはわかりませんが、javaのクラスライブラリ、Stringクラスの例です。
/* Common private utility method used to bounds check the byte array
* and requested offset & length values used by the String(byte[],..)
* constructors.
*/
private static void checkBounds(byte[] bytes, int offset, int length) {
if (length < 0)
throw new StringIndexOutOfBoundsException(length);
if (offset < 0)
throw new StringIndexOutOfBoundsException(offset);
if (offset > bytes.length - length)
throw new StringIndexOutOfBoundsException(offset + length);
}
このチェックは、
public String(byte ascii[], int hibyte, int offset, int count)
public String(byte bytes[], int offset, int length, String charsetName)
public String(byte bytes[], int offset, int length)
から呼ばれているようです。
0715デフォルトの名無しさん
2013/11/23(土) 20:15:57.53NonCopyable作る時
0716デフォルトの名無しさん
2013/11/23(土) 20:17:42.14旅館の全ての部屋にカギがついてなかったら防犯上よくないだろ。
0717デフォルトの名無しさん
2013/11/23(土) 20:19:00.83関数の呼び出し元で操作している対象の変数が何かわからない(広域変数の欠点)
int a, b, c ; // グローバル変数宣言
int main (int argc, char *argv [])
{
FunctionA(); // グローバル変数cを書き換える
FunctionB(); // グローバル変数cを元にグローバル変数aを書き換える
FunctionC(); // グローバル変数a, cを元にグローバル変数bを書き換える
return 0;
}
0718デフォルトの名無しさん
2013/11/23(土) 20:21:20.92判ってると思うけどそれグローバル変数の問題で
スコープでも問題は変わらない
0719デフォルトの名無しさん
2013/11/23(土) 20:22:22.60それはしょうがないな
>>714
普通に考えて、
StringBounds.check( byte[] bytes, int offset, int length );
に委譲すりゃいいわな
Javaのライブラリーって他のライブラリーに比べて出来が悪いわ
0720デフォルトの名無しさん
2013/11/23(土) 20:24:40.790721デフォルトの名無しさん
2013/11/23(土) 20:24:59.67StringBoundsが含まれているパッケージを探すコストを考えたら、近くで定義した方がいい場合も多々ある。
0722デフォルトの名無しさん
2013/11/23(土) 20:25:07.57どういうことか解かりませんっ!!
0723デフォルトの名無しさん
2013/11/23(土) 20:26:17.160724デフォルトの名無しさん
2013/11/23(土) 20:27:29.62Javaは同じファイル内に複数クラス書けるから
同じファイルに書いときゃいい
0725デフォルトの名無しさん
2013/11/23(土) 20:27:57.13まじか・・・
ブロックで書こうが外部関数の呼び出し無しではないわけで
(まさかこれ否定しないよね)
その関数がグローバルを使っていてかつ、自分が直に書いたブロックにも
グローバル変数があるのなら同じ問題がおきるってこと
0726デフォルトの名無しさん
2013/11/23(土) 20:28:01.06公開する必要はないでしょ
そんなのでいちいち実装が変更されない保証とかしてらんない
0727デフォルトの名無しさん
2013/11/23(土) 20:28:46.84有名なBSDライセンスのオープンソースですが
0728デフォルトの名無しさん
2013/11/23(土) 20:30:24.49が何故Mathに定義されてないのか考えたけどこいつばかりは毎度再定義した方が実行効率がよいようだ。
0729デフォルトの名無しさん
2013/11/23(土) 20:30:57.92int main (int argc, char *argv [])
{
int a, b, c ; // グローバル変数宣言
FunctionA(); // グローバル変数cを書き換える
FunctionB(); // グローバル変数cを元にグローバル変数aを書き換える
FunctionC(); // グローバル変数a, cを元にグローバル変数bを書き換える
return 0;
}
こんなんしたらコンパイルエラーやで
0730デフォルトの名無しさん
2013/11/23(土) 20:32:29.73そしてCollections.minしか使わない現実
0731デフォルトの名無しさん
2013/11/23(土) 20:32:29.920732デフォルトの名無しさん
2013/11/23(土) 20:33:37.71他の言語とおなじく仕様としてドキュメントに書かなきゃいいでしょ
あとどうでもいいけどclassをpublicにしなきゃJavaの場合公開にはならないぞ
0733デフォルトの名無しさん
2013/11/23(土) 20:34:52.270734デフォルトの名無しさん
2013/11/23(土) 20:36:06.86今のVMじゃ大したコストにならんだろうに
0735デフォルトの名無しさん
2013/11/23(土) 20:39:26.98意味がわかりかねる。
privateスコープで公開メソッドのみのローカルクラスを用意するって意味?
0736デフォルトの名無しさん
2013/11/23(土) 20:43:54.56まさか、こんな感じで宣言できるの知らないのか?
// string.java
class StringBounds
{
}
public class String
{
}
0737デフォルトの名無しさん
2013/11/23(土) 20:45:39.55委譲で切り出すのは問題ないんだ?
0738デフォルトの名無しさん
2013/11/23(土) 20:45:43.32普通に遅い
どうせ中身はJNI委譲してるだけだからネイティブかVMで直接計算したほうが速い
0739デフォルトの名無しさん
2013/11/23(土) 20:46:54.10あの、言ってること理解出来てる?
0740デフォルトの名無しさん
2013/11/23(土) 20:51:58.18>>735はこういうこと言いたかったんじゃないの?
public class String
{
private class StringBounds
{
}
}
0741デフォルトの名無しさん
2013/11/23(土) 20:57:49.29staticならあってる
パッケージプライベートじゃString以外で使えちゃうでしょ
だから実装を保証する必要があるよね?
0742デフォルトの名無しさん
2013/11/23(土) 20:59:49.660743デフォルトの名無しさん
2013/11/23(土) 21:03:13.45だから少なくとも同じ名前空間では同意が得られないとだめだろと
これでは意味が違う
必要と言うまでは反論するぞ
0744デフォルトの名無しさん
2013/11/23(土) 21:04:39.090745デフォルトの名無しさん
2013/11/23(土) 21:05:54.85他の言語と同様同意を得ればいいだろ
0746デフォルトの名無しさん
2013/11/23(土) 21:08:04.16では結局保証が必要という事で終わり
0747デフォルトの名無しさん
2013/11/23(土) 21:08:25.02大体おんなじパッケージ内の他の箇所で使われたって問題ないだろ
この処理が共有されて何の問題になる
どんだけ不特定多数で同じパッケージ共有する気だよ
0748デフォルトの名無しさん
2013/11/23(土) 21:09:50.36必要だから同じ名前空間内で共有してんだろ
0749デフォルトの名無しさん
2013/11/23(土) 21:10:45.94って戯言でよくここまで伸ばすな
0750デフォルトの名無しさん
2013/11/23(土) 21:11:48.96ドキュメントに無いメソッドをパッケージ外に公開したくないだけだったら
別にprivateじゃなくていいだろ
0751デフォルトの名無しさん
2013/11/23(土) 21:15:56.39とにかくpublicにするという話が元なんだから、
後悔する必要がなくても公開するという話でしょ?
必要ならそりゃ公開するしかないでしょ
0752デフォルトの名無しさん
2013/11/23(土) 21:18:39.51そもそもパッケージ外ならともかく、共有できるメソッドをなんでprivateにするんだ。
0753デフォルトの名無しさん
2013/11/23(土) 21:24:05.85意味不明な事をかいたな。訂正。
アクセス制限をパッケージ内に限定しているにも関わらず再利用できるメソッドをなんでprivateにするんだ。
0754デフォルトの名無しさん
2013/11/23(土) 21:30:26.010755デフォルトの名無しさん
2013/11/23(土) 21:33:34.48javaのpublic,protected,private,default
どれが必要でどれが不要なのか、また新たに定義した方がいいのか
今開発中の言語に生かすので教えてくだしあ。
0756デフォルトの名無しさん
2013/11/23(土) 21:36:49.18メンバー変数のprivateと関数のprivateだと意味合いがだいぶ違うんだが
0757デフォルトの名無しさん
2013/11/23(土) 21:38:29.40メンバー変数のprivateは、メッセージ経由でアクセスを強制するために居るもの、
逆にメンバー関数側は、privateにしてもあまり意味がない。
0758デフォルトの名無しさん
2013/11/23(土) 21:39:08.01その認識がすでにおかしい
具体的に意味合いの違いを述べてみよ
0759デフォルトの名無しさん
2013/11/23(土) 21:40:05.710760デフォルトの名無しさん
2013/11/23(土) 21:42:40.39f = なんとか ここで関数を定義したときに
fの中でhogeをどうかするときに変数につける修飾子に問題があるというか
トリックみたいな書き方してお茶を濁すみたいなことあるからここらへんは新言語で一旦再編成して欲しい
0761デフォルトの名無しさん
2013/11/23(土) 21:43:07.64最初から外部から操作してはいけないような操作をメンバー関数にしなければいいだけの話。さらにそういう関数は、privateだろうがpublicだろうが作りが悪い。
0762デフォルトの名無しさん
2013/11/23(土) 21:44:48.30言語は共同作業のベースでもあるので
俺はやらないからいらないと言う理屈は通らない
話にならん
0763デフォルトの名無しさん
2013/11/23(土) 21:49:30.30委譲による分割による隠蔽は認めると言うのも独善的な視点
さらにいえば委譲のほうが関数分割より設計・修正のコスト高い
ん?やっぱ他人?
0764デフォルトの名無しさん
2013/11/23(土) 21:53:36.68ただ絶対に死なないように値チェックとか各カプセル内でするようになると同じチェックを何回もするようになるから
だったらそこは外に出した方がいいんじゃないかみたいなことになる
0765デフォルトの名無しさん
2013/11/23(土) 21:54:07.39privateメソッドの無い他の言語ならprivateなんて使わんだろ
他の言語なら上手く行ってることがなんでC++系統の言語だけ上手くいかない
そんなわけあるか
0766デフォルトの名無しさん
2013/11/23(土) 21:55:01.19何を言ってるのか理解不能
0767デフォルトの名無しさん
2013/11/23(土) 21:57:22.77じゃあCでlinuxカーネルはうまくいってるからOOPLはいらないな
0768デフォルトの名無しさん
2013/11/23(土) 22:02:23.89publicとかで躓いてるやつ今まで見たことないんだけど
0769デフォルトの名無しさん
2013/11/23(土) 22:07:07.88頭にアンダーバーをつけるなどして
工夫しているから、結局いるんだろうね。
0770デフォルトの名無しさん
2013/11/23(土) 22:13:55.52英語圏の人だとすんなりわかるんだろうということで
日本語で関数名を書くけれど。
function 関数 {
: 略
:
// ここから、とある数値を計算するコード
:
: 略
:
// ここまで、とある数値を計算するコード
:
: 略
}
って書くぐらいなら、コメントを関数名にして、こう書いたほうがわかりやすい。
function 関数 {
: 略
:
結果 = とある数値を計算()
:
: 略
}
0771デフォルトの名無しさん
2013/11/23(土) 22:17:31.79SmalltalkにもPythonにもRubyにもメソッドprivate機能なかったっけ?
0772デフォルトの名無しさん
2013/11/23(土) 22:20:10.060773デフォルトの名無しさん
2013/11/23(土) 22:21:12.960774デフォルトの名無しさん
2013/11/23(土) 22:25:44.46関数にすると見やすいなw
0775デフォルトの名無しさん
2013/11/23(土) 23:08:52.68結果がどこに入るかとかも自明になるってのがよーわかるわ
0776デフォルトの名無しさん
2013/11/23(土) 23:12:08.79確かにLinuxカーネルはOOPで作られてると思う
0777デフォルトの名無しさん
2013/11/23(土) 23:18:12.86必要に応じてというあたりが微妙だけど、
stringみたいなデータを扱うことを目的としたクラスをのぞけば、メンバ変数は作るべきじゃないのだから、間違えちゃいないだろ。
getterの類にしても、考え方っていうやつで、そんなインタフェースは、publicメンバと大差ないから必要ない。
関数は、機能や目的つくるものなのだから、
名前もそれに則した命名にしろということなんじゃないかな。
それにしても、今日ののびは、すごいな(笑
0778デフォルトの名無しさん
2013/11/23(土) 23:21:49.26組み込み型もstringもインスタンスなのだが
0779デフォルトの名無しさん
2013/11/23(土) 23:31:39.39Smalltalkは、ある処理系にはある
0780デフォルトの名無しさん
2013/11/23(土) 23:42:42.44多少心がけといた方が良いってのもあるが、ルールで縛ってもしょうがねえなって程度
0781デフォルトの名無しさん
2013/11/23(土) 23:47:35.010782デフォルトの名無しさん
2013/11/23(土) 23:53:17.21コンテキストによるよ。self に投げてる場合だけ許すとか。
0783デフォルトの名無しさん
2013/11/24(日) 02:11:05.36「ルール4:ドット1つ」の時点で10段入れ子になってたら、一回しか参照しない変数使って10行で表現しろって事だぞ。
そういう手合いの理不尽の塊を押し付ける事で何かしらの洗脳だか教育だかしようってルールだよコレは。
0784デフォルトの名無しさん
2013/11/24(日) 02:56:11.89オブジェクト間の通信=メッセージって考えなら違和感ないと思うんだけどなあ
0785デフォルトの名無しさん
2013/11/24(日) 06:32:46.81バカだろお前。
city.school.class.teacher.pass(document);
こういうのがあったら、
city.enroll(document);
とやって、schoolやclassの事を申請者が知らなくても済むように疎結合しろってことだ。
0786デフォルトの名無しさん
2013/11/24(日) 09:00:35.340787デフォルトの名無しさん
2013/11/24(日) 10:32:19.17追加の効果(保守性等)を得るために行数は増やしても問題ない。
重要なのはコードの行数ではない。メンテナンス性だ。
0788デフォルトの名無しさん
2013/11/24(日) 10:35:39.320789デフォルトの名無しさん
2013/11/24(日) 11:32:32.66例えばPoint2Dクラスにおいて、getX, getYは必須だと思うけど、
これはアクセサ不要論としては駄目な例に入るの?
0790デフォルトの名無しさん
2013/11/24(日) 11:35:28.830791デフォルトの名無しさん
2013/11/24(日) 11:47:06.31せっかく一まとめにしてるのに、個別に取り出したら台無しじゃね。
0792デフォルトの名無しさん
2013/11/24(日) 12:32:06.40駄目って事でいいの?その代替は?
0793デフォルトの名無しさん
2013/11/24(日) 12:38:13.550794デフォルトの名無しさん
2013/11/24(日) 12:46:01.83その点C#は値型としてstructってを用意してる。
その割り切りは評価したい。
0795デフォルトの名無しさん
2013/11/24(日) 12:50:09.75メンバをそのまま公開しろってこと?
0796デフォルトの名無しさん
2013/11/24(日) 13:37:22.470797デフォルトの名無しさん
2013/11/24(日) 14:10:37.84依存クラスが増加するなら駄目じゃないの
0798デフォルトの名無しさん
2013/11/24(日) 14:15:46.08> どんな座標でも入るクラスならアクセサをつける意味が無い
それ、逆に言えば、どんな座標でも入るわけではないのなら
意味があるってことじゃね?
ほとんどのものは、入る値に制限があると思うんだけど?
例えば、座標が数字だとして、文字列や
何かのオブジェクトは入らないわけだろう?
型で制限すればいいというかもしれんが、
世の中には型がない言語だってあるんだぞ。
君の主張では、型がない言語ではアクセサをつける意味がある
という答えになるんだが。
0799デフォルトの名無しさん
2013/11/24(日) 14:19:50.990800デフォルトの名無しさん
2013/11/24(日) 14:23:03.05直接関係はなさそう
0801デフォルトの名無しさん
2013/11/24(日) 14:23:47.14すべてのプリミティブ型と文字列型をラップすること
class Score{
private int score;
};
ルール9:プロパティ禁止
Getter/Setter/プロパティを使用しないこと
どうやってscoreにアクセスすんの?
0802デフォルトの名無しさん
2013/11/24(日) 14:24:57.900803デフォルトの名無しさん
2013/11/24(日) 14:25:49.95入れた時にエラーになってほしいものなんだが、
型がない言語では、入れた時ではなく使う時にエラーが出るんだ。
だから型がない言語ではエラーがでたとき
どこでこの変数にこんな値が入ったんだ?って
探しまわることになる。
0804デフォルトの名無しさん
2013/11/24(日) 14:25:55.80外部からアクセスさせてはならないって事だろ
俺は場合によると思うが
0805デフォルトの名無しさん
2013/11/24(日) 14:30:23.04obj.value = 1って書いた時に、
obj.setValue(1)が呼ばれればいいわけさ。
そしてそういう言語がある
プロパティという機能で、
public変数=プロパティのgetter/setter省略
明示的にプロパティのgetter/setterを書くこともできる。
そういう言語、俺の知る中で最古の言語は
VB6(かその前のバージョン)だな。
C#にも導入されている。
0806デフォルトの名無しさん
2013/11/24(日) 14:41:57.260807デフォルトの名無しさん
2013/11/24(日) 15:44:01.430808デフォルトの名無しさん
2013/11/24(日) 16:09:53.09厨二病め・・
0809デフォルトの名無しさん
2013/11/24(日) 16:16:34.86Smalltalkやそれ系統の言語で属性(Property)と言えば、
フィールドの代わりに連想配列を使う属性パターンの事。
Javaもその影響を受けて〜Propertyというクラスが存在する。
http://ja.m.wikipedia.org/wiki/Smalltalk
0810デフォルトの名無しさん
2013/11/24(日) 16:17:24.47Delphi
0811デフォルトの名無しさん
2013/11/24(日) 16:18:45.99ねぇよ
0812デフォルトの名無しさん
2013/11/24(日) 16:20:44.560813デフォルトの名無しさん
2013/11/24(日) 16:26:20.87accessorの意義が分かってないだろ
ド素人向けの説明で入力を制限するためなんて書いてあるが、
実際そんなことはすりゃしない。
Smalltalkなんかだと、初期化や、委譲先の抽象化が主な目的だ。
例えば、あるnameメッセージを送った時、
そのnameの値はインスタンス変数かもしれ無いし、
クラスオブジェクトの変数かもしれ無い。もしかしたら、
別のオブジェクトから取ってきた値かもしれ無いし、
GUIからの入力かもしれない。
0814デフォルトの名無しさん
2013/11/24(日) 16:33:13.01auto Device = Console();
result = score.Add( One );
result.StoreOn( device );
0815デフォルトの名無しさん
2013/11/24(日) 16:35:34.74なぜならプロパティで簡単に実装できものを、なんでもハッシュでやろうとするハッシュバカという大馬鹿を大量生産してしまう。
0816デフォルトの名無しさん
2013/11/24(日) 16:39:11.54ツリーマップならハッシュマップじゃないからいいよね
0817デフォルトの名無しさん
2013/11/24(日) 16:41:50.680818デフォルトの名無しさん
2013/11/24(日) 16:41:51.66SelfやJavascriptはPropertyパターン常に使ってるがめんどいぞ
0819デフォルトの名無しさん
2013/11/24(日) 16:45:02.70結局極めて行くとSmalltalkの形に落ち着く。
0820デフォルトの名無しさん
2013/11/24(日) 16:53:09.29Traits、自動委譲にDuckType 。
Smalltalk時代からあったものばっかり。DuckTypeなんて
それが当たり前なのに、何でそんな大層な名前を付けられたのか
わからん。
0821デフォルトの名無しさん
2013/11/24(日) 16:54:16.320822デフォルトの名無しさん
2013/11/24(日) 16:57:29.600823デフォルトの名無しさん
2013/11/24(日) 17:10:27.75Smalltalkはセガ。
0824デフォルトの名無しさん
2013/11/24(日) 17:22:26.26継承依存の多態にはなんで名前がないんだ
>>822
SmalltalkもSimula系統。それを言うならC++系統だろ。
言語はC++系が流行ってても、Libraryは、Smalltalkの猿真似ばかり。
無理やり真似してるもんだから、言語仕様にまで響いて言語拡張しまくって、
C#やJavaを始め無駄な言語機能が発生し始めてる。(属性だのLinqだの)
熊にドレスを着せるのは楽しくないぞ。
0825デフォルトの名無しさん
2013/11/24(日) 17:23:42.300826デフォルトの名無しさん
2013/11/24(日) 17:25:18.38とかほざく奴は、たいてい、Smalltalkの何についての言及かすら把握できていない。
Smalltalkなんてあんなシンプルな言語、他に滅多にないのにな。常識のレベルだよ。
自分の不勉強や、理解不能な事があると認めるのが怖いから拒絶しているだけ。
0827デフォルトの名無しさん
2013/11/24(日) 17:27:12.54http://zerobase.hateblo.jp/entry/2013/02/24/015610
0828デフォルトの名無しさん
2013/11/24(日) 17:27:55.25またキチガイ
0829デフォルトの名無しさん
2013/11/24(日) 17:29:17.28JavaやC#は何でClassがobjectじゃないの?
C++の真似をしたせいなんだろうが、そのせいでinstance creationみたいなパターンが使えないやるならreflection使うしかない。
C++はその辺templateで克服できるだけまだましだ。
ただC++は自動委譲が未だに仕様に取り込まれないのが残念。
0830デフォルトの名無しさん
2013/11/24(日) 17:32:04.320831デフォルトの名無しさん
2013/11/24(日) 17:33:15.410832デフォルトの名無しさん
2013/11/24(日) 17:34:57.78SmalltalkについてはPharo by Exampleにざっと目を通しとくだけでも違うと思うよ
ttp://www.smalltalk-users.jp/Home/docs
0833デフォルトの名無しさん
2013/11/24(日) 17:35:37.99終わった言語だの言っているやつは無視しとけば良い。
奴らSmalltalk自体触ったことない癖に毛嫌いし学ぶことは無いと
思ってるやからだ。朝鮮人やCOBOLerと同じ。新しい事を学ぶ気が無いやつは
相手にするだけ無駄。
0834デフォルトの名無しさん
2013/11/24(日) 17:37:34.80一度は実際に使ったほうがいいと思うよ。見るだけだと何でそうなってるか
想像できない所が多いから。
0835デフォルトの名無しさん
2013/11/24(日) 17:38:09.36そんなことはないよ。
ただ教養レベルで基本レベルのSmalltalkのことも知ったうえで
そこから議論をスタートした方が建設的だとは思っている。
0836デフォルトの名無しさん
2013/11/24(日) 17:38:18.340837デフォルトの名無しさん
2013/11/24(日) 17:43:56.98Squeak使った事あるけど汎用性なさすぎてマジで糞だった
0838デフォルトの名無しさん
2013/11/24(日) 17:50:26.24プロなら黙っててもVisualWorksだろ
http://smalltalk.cincom.jp/main/
0839デフォルトの名無しさん
2013/11/24(日) 17:52:49.950840デフォルトの名無しさん
2013/11/24(日) 17:54:29.030841デフォルトの名無しさん
2013/11/24(日) 17:58:44.570842デフォルトの名無しさん
2013/11/24(日) 17:59:41.02未来有望なJava COBOLerだからそっとしといてやれ
0843デフォルトの名無しさん
2013/11/24(日) 18:01:41.33ことビジネス用途で見た場合、VisualWorksを外すわけにはいきません。
速く、安定しており、大変リッチなクラスライブラリを誇るこの処理系は、
今も昔もSmalltalk界のエース的な存在なのです。
ttp://umejava.wordpress.com/2013/11/21/
0844デフォルトの名無しさん
2013/11/24(日) 18:12:45.450845デフォルトの名無しさん
2013/11/24(日) 18:16:53.89下記の様に入力すればコマンドラインでインタプリタ―風に動作する。
ただし、Windowsだとダメかも
./pharo -headless "[イメージファイル名]" eval
その他のオプションを知りたければ最後を--listに返る
./pharo -headless "[イメージファイル名]" --list
標準入出力は、下記の様にFileStreamにメッセージを送る事で得られる。
stream := FileStream stdin.
stream := FileStream stdout.
stream := FileStream stderr.
0846デフォルトの名無しさん
2013/11/24(日) 18:18:00.56クラスオブジェクトを作る。
この時クラスメソッドcommandNameとインスタンスメソッドactiveを定義する。
activeには実際にしたい処理を書く。
commandNameには、イメージファイル名の次に指定する引き数の名前を返すようにする。
./pharo -headless "[イメージファイル名]" "[commandName]"
インタプリタ―の真似事がしたければselfに対して下記のようなメッセージを送る。
クラスオブジェクト内でメッセージを送る場合は途中のclassは不要。
self class evaluatorClass evaluate: 'ソースコード'.
あと最初はSystemBrowserのRefactoringメニューを一通り使っておいたほうがいいと思う。
Refactoring以外に役に立つものが多い。
0847デフォルトの名無しさん
2013/11/24(日) 18:22:13.39外に出てきにくくて自分の目に触れにくい技術をあえて学ぼうってときに
汎用性で排除してたら駄目だろう…
0848デフォルトの名無しさん
2013/11/24(日) 18:23:38.21なのでWindowsのウィンドウに描画したりやConsoleを直接操作する事も可能。
あと<>でくくられてる奴はParagraphといい他にも色々ある。
example: aStatus
<apicall: void '関数名' (long) module: 'kernel32.dll'>
^ self externalCallFailed.
0849デフォルトの名無しさん
2013/11/24(日) 18:28:27.89System->Setting->Appearance->User interface theme
でOS X風にしたり、Vistaや7のAero風にしたりできるよ。
0850デフォルトの名無しさん
2013/11/24(日) 18:32:24.58ステマっていうか>>835に尽きるな
うざがられるくらいに引き合いに出されるのはもうわかっているんだから
みんなSmalltalkの基本的なことくらい知っておこうよと
それこそ今時の言語に比べたら笑っちゃうくらいシンプルな言語ひとつ覚えるのもおぼつかないものなのか?
0851デフォルトの名無しさん
2013/11/24(日) 18:35:54.96うざいくらい引き合いに出してるの間違いじゃないの?
0852デフォルトの名無しさん
2013/11/24(日) 18:36:10.07Smalltalk exit:0.
これで終了。
0853デフォルトの名無しさん
2013/11/24(日) 18:37:12.560854デフォルトの名無しさん
2013/11/24(日) 18:42:48.95言われていたものが、最初からライブラリーで使われてるとこ。
具体的に効果的な使い方ってのがどうなってるかよく解る。
それからMorphによるMVCなGUI構築の方法もかなり勉強になる。
0855デフォルトの名無しさん
2013/11/24(日) 18:59:01.71これを証明したスレ
0856デフォルトの名無しさん
2013/11/24(日) 19:02:19.920857デフォルトの名無しさん
2013/11/24(日) 19:06:57.810858デフォルトの名無しさん
2013/11/24(日) 19:06:58.900859デフォルトの名無しさん
2013/11/24(日) 19:08:08.15価値はあるのに普及していない物なんていくらでもあるだろう? 子供か?
あとそのもの自体は普及していなくても、別の派生物を介して普及しているパターンも多い。
0860デフォルトの名無しさん
2013/11/24(日) 19:09:30.690861デフォルトの名無しさん
2013/11/24(日) 19:10:57.77そんなのは些細な問題だし、
たとえばSqueak Smalltalkなら2〜3箇所いじれば乗除優先なんか付けられる
0862デフォルトの名無しさん
2013/11/24(日) 19:14:27.52それはあるかもねw
0863デフォルトの名無しさん
2013/11/24(日) 19:15:03.710864デフォルトの名無しさん
2013/11/24(日) 19:15:31.630865デフォルトの名無しさん
2013/11/24(日) 19:17:01.63Smalltalkerはキチガイとか言ってる奴はたいていが思考停止した情弱
これを証明したスレ
0866デフォルトの名無しさん
2013/11/24(日) 19:20:27.14林檎信者がApple発祥とか自慢してるMacのGUIとか
OSX/iOSのオブジェクト指向APIだとかは
ほとんどSmalltalkからのパクリだから、
Smalltalkerは林檎信者よりさらにたちが悪いよ。
0867デフォルトの名無しさん
2013/11/24(日) 19:25:27.77いや、LISPerのあれはガチだから
0868デフォルトの名無しさん
2013/11/24(日) 19:26:07.41未だにプログラミング初心者にCを勧める老害が滅びないのと同じように
0869デフォルトの名無しさん
2013/11/24(日) 19:29:48.08そういう意味でjavascriptは優秀。
0870デフォルトの名無しさん
2013/11/24(日) 19:30:31.50「これがスムーズにドットごとに紙みたいに動いたらいいんだが」と言ったときのことである。
これはキーボードに向かうインガルズにとって、ニューオーリンズのジャズバンドが
「ライムハウス・ブルース」を演奏してくれと言われたようなものである。
スモールトークのコードが数行表示されているウインドウをクリックし、
ちょっと編集してテキストウインドウに戻った。ちちんぷいぷい!
もうスクロールは連続するようになっていた。
アップルのエンジニアたちは目が飛び出るほど驚いた。普通はどんなシステムでも、
コードを書き換えればプログラムの相当な部分、多くの場合は
ほぼすべてをコンパイルし直さなければならないものである。これには数時間かかるだろう。
ところがスモールトークでは、そのオブジェクト指向のモジュール化により、
ちょっとした変更で要求される再コンパイル量は十行か十行を超えることがなく、
わずか一、二秒しかかからないのである。
「本質的に瞬間的なものでしたからね」インガルズは言う。
もちろんスモールトークの開発者の一人である彼が、
変更をほとんど本能的にできたことが役に立ったのは言うまでもない。
「ちょっとズルだったかもしれませんね」彼は認める。
「システムの頭のてっぺんから爪の先まで知ってるんだから」
0871デフォルトの名無しさん
2013/11/24(日) 19:37:21.23OSXのメニューバーは、Squeakのメニューバーと同じだし、
Cocoaの設計は劣化Morphicだもんな。
0872デフォルトの名無しさん
2013/11/24(日) 19:39:04.08結局今中心になってるのはC系言語ばっかりだもんな
0873デフォルトの名無しさん
2013/11/24(日) 19:42:09.60Smalltalk擁護してるやつは、Smalltalk他複数の言語を使ったことがあるやつ。
学習意欲の無いやつなんて相手にしないほうがいい。何の得にもならん。
0874デフォルトの名無しさん
2013/11/24(日) 19:44:01.78ミリオタのそれと一緒
0875デフォルトの名無しさん
2013/11/24(日) 19:45:27.00Perl、Python、Rubyと比較したら?
パフォーマンス的には変わらんだろうし、
後発言語だからsmalltalkよりもハンディがあった
はずなのにsmalltalkより普及してる。
0876デフォルトの名無しさん
2013/11/24(日) 19:46:33.41WIMPなGUIとかコピペとか右クリックとかMVCとかデザパタとかIDEとかアジャイルとかTraitとか
0877デフォルトの名無しさん
2013/11/24(日) 19:48:05.660878デフォルトの名無しさん
2013/11/24(日) 19:48:15.44> 後発言語だからsmalltalkよりもハンディがあった
後発なら、より効果的にパクれて当然じゃないの?
その発想がわからん。
0879デフォルトの名無しさん
2013/11/24(日) 19:50:22.15それもあるね。w 非C言語的なのが嫌われた。
だけど必要とあればObjective-Cとか文句いわれつつ普及しているしなぁ…
やっぱり流行り廃りは時の運だよ
0880デフォルトの名無しさん
2013/11/24(日) 19:51:15.610881デフォルトの名無しさん
2013/11/24(日) 19:56:17.89扱いにくい事まで肯定したら駄目だろ
馬鹿か
0882デフォルトの名無しさん
2013/11/24(日) 19:56:19.550883デフォルトの名無しさん
2013/11/24(日) 19:59:10.04ごめん。「汎用性」に「扱いにくい」という意味があるとは知らなかった。
馬鹿か
0884デフォルトの名無しさん
2013/11/24(日) 20:00:53.940885デフォルトの名無しさん
2013/11/24(日) 20:01:17.38お花畑か
0886デフォルトの名無しさん
2013/11/24(日) 20:01:29.73読み方:はんようせい
ある物事について、幅広く適用したり、一般的に活用したりすることができる性質を意味する表現。
0887デフォルトの名無しさん
2013/11/24(日) 20:02:30.46そうやってユーザー排除してきた結果がこのザマなんだよ
一生カゴの中にいればいいさ
0888デフォルトの名無しさん
2013/11/24(日) 20:04:49.10マジレスすると、髭は足りてる(アラン・ケイのゴーストライターの人だけど)
http://www.smalltalk.org/people/daningalls.html
0889デフォルトの名無しさん
2013/11/24(日) 20:06:13.100890デフォルトの名無しさん
2013/11/24(日) 20:07:13.36Smalltalk知っているからって他の言語を使えないわけじゃなし
自分の殻に閉じこもっているのはどっちかって話でもあるな
0891デフォルトの名無しさん
2013/11/24(日) 20:08:56.66> アラン・ケイのゴーストライター
アデル・ゴールドバーグに空目したw
0892デフォルトの名無しさん
2013/11/24(日) 20:09:42.06お前にはマイナー言語がピッタリだ
0893デフォルトの名無しさん
2013/11/24(日) 20:10:46.040894デフォルトの名無しさん
2013/11/24(日) 20:13:43.840895デフォルトの名無しさん
2013/11/24(日) 20:14:08.67ブロック付きメソッド呼び出しだのは
ほとんどSmalltalkからのパクリだから、
SmalltalkerはRuby信者よりたちが悪いよ。
0896デフォルトの名無しさん
2013/11/24(日) 20:18:07.58Smalltalk知ってるって言っただけで
なんでお前なんかにマイナー言語使い認定されなあかんの?
0897デフォルトの名無しさん
2013/11/24(日) 20:19:31.140898デフォルトの名無しさん
2013/11/24(日) 20:22:40.82速度的にはCog VMでPython以上。
VisualWorksのVMでJavaと同等の速度がでる。
0899デフォルトの名無しさん
2013/11/24(日) 20:22:53.86英語も不自由なのか
0900デフォルトの名無しさん
2013/11/24(日) 20:23:00.78むしろ後発言語の改良のほうが重要な点が多いのに
わざわざSmalltalkを引き出してくるほうがおかしい。
それでいてSimulaは語らないし。
0901デフォルトの名無しさん
2013/11/24(日) 20:24:14.530902デフォルトの名無しさん
2013/11/24(日) 20:24:21.77にわかな奴ほど語りたがる。
0903デフォルトの名無しさん
2013/11/24(日) 20:25:09.940904デフォルトの名無しさん
2013/11/24(日) 20:25:58.16お前はSmalltalkの何をしってんだよ。
それからSimulaは、C++のモデルとなるclassを搭載してただけで、
Smalltalkで発達したデザパタとはかけ離れてるからな。
C++の標準ライブラリーみたいな感じだ。大して勉強にならん。
0905デフォルトの名無しさん
2013/11/24(日) 20:27:18.74ストラウスストラップやケイがそれぞれに「オブジェクト指向」を考案するきっかけとして
提供しただけで、それこそなしで語れるんじゃない?
それよりストラウスストラップが「抽象データ型としてクラスを使う」というアイデアや
ケイの「オブジェクトをメッセージに受け手にして徹底した動的性を実現する」ってアイデアを抜きに
今のオブジェクト指向は語れないだろう?
0906デフォルトの名無しさん
2013/11/24(日) 20:27:38.34Smalltalkから後発の言語で改良されたOOの重要な点ってなんだ?
具体的に書いてみ。
0907デフォルトの名無しさん
2013/11/24(日) 20:28:43.38ほらね
0908デフォルトの名無しさん
2013/11/24(日) 20:28:45.98正直ケイはどうでもいいなぁ。Smalltalkの実際の作者の方が面白い。
0909デフォルトの名無しさん
2013/11/24(日) 20:29:43.050910デフォルトの名無しさん
2013/11/24(日) 20:30:16.30いや、でも「メッセージングによる動的結合の徹底」というアイデアはケイのものだと思うけどなぁ…
0911デフォルトの名無しさん
2013/11/24(日) 20:30:16.46じゃお前Simulaの入出力ライブラリーについて言ってみ。
こっちは知った上で言ってるんだが。全く知りもしないお前と一緒にされたくないわ。
0912デフォルトの名無しさん
2013/11/24(日) 20:31:28.15これってSimulaのコンセプトを強調しすぎてキチガイ作っただけだよな
0913デフォルトの名無しさん
2013/11/24(日) 20:31:56.94お前は知りもしないのに、役に立たないという。
こっちは知った上で役に立たないという。
その違いが分かるか?
0914デフォルトの名無しさん
2013/11/24(日) 20:32:11.01初めて知った
オブジェクト指向ってSimulaを指した言葉だったんだ
Smalltalkが起源とか全くの大嘘じゃん
0915デフォルトの名無しさん
2013/11/24(日) 20:32:47.61関係ない。
0916デフォルトの名無しさん
2013/11/24(日) 20:32:59.98Smalltalkerの主張のすべてw
0917デフォルトの名無しさん
2013/11/24(日) 20:33:29.501) あんなもんは新しくもなんともなく…←GoF本に何度もそれはそうだと書かれている
2) あれはカタログ化して意思疎通のために…←実際は理解には差があって言うほど意思疎通できん
0918デフォルトの名無しさん
2013/11/24(日) 20:33:39.47はようSimulaの入出力の一つでも語ってみろよ
0919デフォルトの名無しさん
2013/11/24(日) 20:34:22.63ダールやニガードは
ストラウストラップの「クラスを抽象データ型として利用する」ってアイデアを知ってから
あらためてSIMULAをオブジェクト指向言語として舵を切り直した経緯があるからなぁ…
http://phobos.ramapo.edu/~ldant/oop/simula_history.pdf
0920デフォルトの名無しさん
2013/11/24(日) 20:36:17.70知ってるんだからキミが語ってあげれば?
さぞかしOOに大切な話なんだろうね
物知りSmalltalker君
0921デフォルトの名無しさん
2013/11/24(日) 20:36:22.60いずれにしても役に立たないでFA
0922デフォルトの名無しさん
2013/11/24(日) 20:37:06.41メッセージングを徹底的にってのは設計者の方は、
Lispの影響を受けた実装者の考えだよ。
アランケイ的には、やりすぎだといってたぐらいだし。
0923デフォルトの名無しさん
2013/11/24(日) 20:38:16.09知らねんならSimulaの名前出すんじゃねぇよクズ
0924デフォルトの名無しさん
2013/11/24(日) 20:38:22.53自然なコンセプトだよね。
0925デフォルトの名無しさん
2013/11/24(日) 20:39:01.140926デフォルトの名無しさん
2013/11/24(日) 20:39:22.64じゃJavaもC#も役に立たんゴミでFAだな
0927デフォルトの名無しさん
2013/11/24(日) 20:39:57.94いや、メッセージングを徹底しすぎたのはたしかにケイも批判的だったけど
彼がその先にある動的性を重視していたのは確かだよ。
http://metatoys.org/oxymoron/oxymoron.html
0928デフォルトの名無しさん
2013/11/24(日) 20:40:15.14これから述べてくれますので注目!
0929デフォルトの名無しさん
2013/11/24(日) 20:40:18.970930デフォルトの名無しさん
2013/11/24(日) 20:40:46.43たまに>>924的ことを一番にあげる人居るけど。
俺は、抽象化によって整理を捗らせるのが肝だと思ってる。
だから、必要に応じて必要なだけOOすれば良いと思ってる。
0931デフォルトの名無しさん
2013/11/24(日) 20:41:30.48これがどういうことだかわかるよね。
0932デフォルトの名無しさん
2013/11/24(日) 20:41:48.63いや、動的性のほう。メッセージングのメタファはケイが考えた手段。
0933デフォルトの名無しさん
2013/11/24(日) 20:42:54.82お前はまずここでお勉強してろ
http://www.macs.hw.ac.uk/~rjp/bookhtml/
0934デフォルトの名無しさん
2013/11/24(日) 20:43:29.96動的性って?
動的型はLispに、動的バインディングはSimulaにあるようだけど
0935デフォルトの名無しさん
2013/11/24(日) 20:43:41.07知ってるのに語らないなら>>925と同じだね
0936デフォルトの名無しさん
2013/11/24(日) 20:44:15.60>>927にもあるけど、やっぱり最終的には動的結合でしょう。
>>870なんかはその良い例で
0937デフォルトの名無しさん
2013/11/24(日) 20:44:29.130938デフォルトの名無しさん
2013/11/24(日) 20:46:14.920939デフォルトの名無しさん
2013/11/24(日) 20:47:08.91それを処理系それ自体を含む、コンピューターシステム全体に適用しようとした試みでしょう
http://web.archive.org/web/20041016084842/http://marimpod.homeip.net/chomswiki/24#
0940デフォルトの名無しさん
2013/11/24(日) 20:47:45.56線形代数系のライブラリーがC++風に構築されているSimula。
Smalltalkみたいに、新しい言語が結局帰着してしまうような
仕組みを作り上げたわけでもない。中身を除いてみれば
その後への影響力は構文の特徴だけで、新たに見つかるものもない。
まぁ、>>925 よりは知ってみる価値はあるがな。
0941デフォルトの名無しさん
2013/11/24(日) 20:48:06.420942デフォルトの名無しさん
2013/11/24(日) 20:49:30.360943デフォルトの名無しさん
2013/11/24(日) 20:50:29.910944デフォルトの名無しさん
2013/11/24(日) 20:51:49.60Simulaのライブラリーは大して生産性のあるパターンや拡張性を
念頭に置いたパターンに力を入れられてない。継承してれば
オブジェクト指向ってな感じの効果の薄い原始的な方法ばっかり。
委譲による基底オブジェクトの入れ替えなんて考えられてない。
0945デフォルトの名無しさん
2013/11/24(日) 20:52:17.17信者のウザさ
0946デフォルトの名無しさん
2013/11/24(日) 20:52:51.410947デフォルトの名無しさん
2013/11/24(日) 20:52:55.27あ、いや、Lispが起源なのは動的性のほう、という意味
メッセージングとそれの受け手としてオブジェクトを使ういうメタファで
動的性を徹底しようとしたのがケイのアイデア
0948デフォルトの名無しさん
2013/11/24(日) 20:53:54.70>>927
0949デフォルトの名無しさん
2013/11/24(日) 20:55:26.08instance creationが使えない
メッセージ転送が使えない
クラスオブジェクトとインスタンスオブジェクトが分かれてて、
デフォはクラスオブジェクトを使い、たまにインスタンスオブジェクトに
切り替えるようなパターンが使えない。
言語拡張無しにLinqの様な仕組みを効率的に実装できない
リフレクションの仕組みが通常のメッセージ送信とかけ離れてて、
既存のメソッドをリフレクションに適用できない
0950デフォルトの名無しさん
2013/11/24(日) 20:55:33.24柔軟性現実性を持っていたからOOは普及したのに
その過程で出てきたデザパタの起源でキチガイのように主張するわけですね
0951デフォルトの名無しさん
2013/11/24(日) 20:56:15.83なぜ使えないか考えたことある?
0952デフォルトの名無しさん
2013/11/24(日) 20:57:07.46なん・・・だと・・
0953デフォルトの名無しさん
2013/11/24(日) 20:58:04.71制御構文がメッセージじゃないんで、
制御構文と同じ書き方をコレクションとかに適用しようとしてもできない
Symbolが存在しないんで、全体で一意に扱い値を管理するための
辞書を態々作る必要がある
0954デフォルトの名無しさん
2013/11/24(日) 20:59:25.81JavaとかC#とか今必死こいて言語拡張して対応しようとしてるよな
C++の真似事から始めたからだ
0955デフォルトの名無しさん
2013/11/24(日) 21:00:48.30( ´・∀・`)へー
といっても動的束縛に関しての知識がC++/Javaあたりのことしか分かってないんだが、
大まかに言ったら多態性ってことでいいのかな?
>>870の例はモジュール化による、変更部分のコンパイル量とか時間を特にプッシュしてるみたいだけど。
0956デフォルトの名無しさん
2013/11/24(日) 21:02:10.94○○は起源=それを知ってた俺は凄い
0957デフォルトの名無しさん
2013/11/24(日) 21:06:02.51オブジェクトの生成が(new)がメッセージじゃなくて演算子。
他のクラスのオブジェクトをnewで返すような事もできない。
このせいでinstance createnの真似事もしづらい
ブロックにあたるラムダが今更追加され始めたが、
Smalltalkの復帰文(^)の様にブロック生成元の
メソッドまで戻れない。(多分数年後に同じ文が
追加されるとは思われる。)
このせいで、
value := map at:#key ifAbsent:[ ^self ].
これだけで済むものが、一行判定が入ったりしてクドクなる。
0958デフォルトの名無しさん
2013/11/24(日) 21:07:20.23なぜ今更真汚い構文追加して似事を始めてるかしってる?
0959デフォルトの名無しさん
2013/11/24(日) 21:08:06.09だいたいあっているけど、ちょっと大まかすぎるかな^^;
たとえば>>870を実現させたように、Smalltalkのコンパイルがデフォでインクリメンタルなのは
最小の変更部分を差し替えるだけで他の部分は(>>927の例にもあるけど既存のインスタンスも含め)
いじらずにそのまま動き続けさせたいって目指すところがあったからという設計思想の影響が大きい。
0960デフォルトの名無しさん
2013/11/24(日) 21:08:55.660961デフォルトの名無しさん
2013/11/24(日) 21:11:05.45C++は問題ないが、Traitsが無い。
Rubyもmoduleで真似事を始めたが、
Javaなんかは、いちいち委譲する必要がある。
一応annotationを使えば近づけるが、
無理やりやってるもんだからボロが出まくる。
0962930
2013/11/24(日) 21:12:41.33動的束縛によって実現された多態性が設計的に嬉しいというだけでなく、
やっぱ>>870の例にあるような、コンパイル作業の効率化ってのもOOPの大事なメリットなのかな?
0963デフォルトの名無しさん
2013/11/24(日) 21:13:19.49C++ベースの言語 → Smalltalkの機能
なんだよな。C++ベースの慣れ親しんだ構文でどうにか
Smalltalkの機能を再現できないか頑張ってる感じ。
0964デフォルトの名無しさん
2013/11/24(日) 21:14:32.78OOPってひとくくりにしちゃうと語弊があるかな…
これはSmalltalkが(というかケイがメッセージングで)特にって範疇の話なので…
0965デフォルトの名無しさん
2013/11/24(日) 21:16:06.03他の面でデメリットがあったら普及はしないんだよ
0966デフォルトの名無しさん
2013/11/24(日) 21:16:20.95信者vsその他大勢のどぉぉぉぉぉぉぉぉでもいい煽り合いだけでわずか10日で埋めるかよ
流石プログラマ、粗探しだけは得意だな
0967デフォルトの名無しさん
2013/11/24(日) 21:16:30.83いくつかのデザパタは実装する必要がない
抽象化ファクトリーやフライウェイト、
オブザーバーパターンは、ライブラリーや言語機能で
実現できてるので、それを利用すれば済む。
0968デフォルトの名無しさん
2013/11/24(日) 21:16:43.91そうなのか?
C++は関数型に向かってる気がするが
0969デフォルトの名無しさん
2013/11/24(日) 21:18:27.66つかケイのOOの概念を応用したものは普及してるが、
ハゲが普及させたかったOOってなんだろうな。
単なるクラスを使った構文か?
0970デフォルトの名無しさん
2013/11/24(日) 21:21:00.68無名関数が入っただけで関数型って・・・
C++はtemplateでクラスオブジェクトを真似たり、
instance creationの真似をしたり、無名関数で
ブロックの真似事をしたりしてるよ。
この調子だと、そのうち無名関数に指定したコールスタックまで
戻るreturnが追加されるんじゃねぇか?
0971デフォルトの名無しさん
2013/11/24(日) 21:22:14.78関数型と共通している機能上げてみそ?
templateの特殊化ぐらいじゃないか?
無名関数なんて関数型特有じゃねぇぞ。
0972デフォルトの名無しさん
2013/11/24(日) 21:24:22.02ストラウストラップが実現したかったのは
http://www.stroustrup.com/whatis.pdf
でも述べられているように、SIMULA67の「クラス」で抽象データ型、つまりユーザー定義型を実現するアイデア。
ただクラス(というか継承)だけで抽象データ型を安全に運用するのには問題があって、
それでインターフェイスが考案された。(C++ではこの問題は顕在化しなかった。為念)
http://users.csc.calpoly.edu/~gfisher/work/specl/documentation/related-work/formal-semantics/p125-cook.pdf
0973デフォルトの名無しさん
2013/11/24(日) 21:25:10.10いやいやいやいや
テンプレートメタプログラミングは動的と真逆の発想だろう
constexprやリテラルクラスやrvalue referenceとか
最近の拡張は静的関数型のテンプレートみたいだよ
0974デフォルトの名無しさん
2013/11/24(日) 21:25:43.77今まで
1) OOPの目的は現実世界と同じようにクラスを作れる(?)ことにある、
仕様書をそのまま実装できる
と豪語する人や、
2) OOPなんかにメリットは無い、非OOPLでもOOP出来る
と断言する人がいた。
2)の人はOOPを否定しているうちにOOPLを否定しだして、
話が非OOPLでもOOPできる、だからOOPLにメリットは無い、
っていう今考えると意味不明な着地をしていたが。結局OOPしたいの?w
とにかく、OOPのメリットについて断言してくれる人の話を聞いたこがない。
>>936さんは親切にも付き合ってくれたけども。
0975デフォルトの名無しさん
2013/11/24(日) 21:26:50.97動的な処理を静的に真似てんだろ
0976デフォルトの名無しさん
2013/11/24(日) 21:30:29.28テンプレートクラスの型安全に関しては、
c++独自だがテンプレートによる多態はダックタイプの真似事だぞ
0977デフォルトの名無しさん
2013/11/24(日) 21:31:49.400978デフォルトの名無しさん
2013/11/24(日) 21:32:27.62既存の処理の再利用だろ
Smalltalk風に言えばメッセージパターンの再利用。
0979デフォルトの名無しさん
2013/11/24(日) 21:32:31.24でも全部クラスにしろとか思想が入ると使いにくくなる
クラス「も」使えるくらいがいいんだろうけど思想の一貫性という意味では面白くないんだろうな
0980デフォルトの名無しさん
2013/11/24(日) 21:35:56.82要らない人がSelfとjavascriptを作った
0981デフォルトの名無しさん
2013/11/24(日) 21:36:20.74大量のCプログラマを引き込むには悪くない手法だとは思うが。
0982デフォルトの名無しさん
2013/11/24(日) 21:36:31.78型がある時点で別物
ダックタイプじゃないよ
Structural Subtyping
0983デフォルトの名無しさん
2013/11/24(日) 21:38:31.460984デフォルトの名無しさん
2013/11/24(日) 21:40:08.93ご回答ありがたく頂戴いたしました。
既存の処理の再利用。
非OOPではそれが出来ないか、満足できるレベルじゃない?
0985デフォルトの名無しさん
2013/11/24(日) 21:42:32.82show: aCollection
aCollection do:
[ :each |
Transcript show: each asString.
].
上のshowメソッドは大抵の集合型に適用できる。
今まで非OOだったらどうだったか考えてみそ
0986デフォルトの名無しさん
2013/11/24(日) 21:44:51.390987デフォルトの名無しさん
2013/11/24(日) 21:45:47.32俺は型月のダックタイプで、ダックタイプに近い結果を得ようと
してると理解してたんだがお前の頭の中には、
全くの別物にしか見えなかったか
そうかそうか。
じゃあSmalltalkのデザパタもtemplateじゃ使えないわけだな。
0988デフォルトの名無しさん
2013/11/24(日) 21:48:24.96別物だから真似事なんだろ
0989デフォルトの名無しさん
2013/11/24(日) 21:48:51.13これと同じ。
0990デフォルトの名無しさん
2013/11/24(日) 21:49:02.52方向は似てても別物だよ
静的にしか受け付けないもの
0991デフォルトの名無しさん
2013/11/24(日) 21:50:10.36例え便利であっても。
0992デフォルトの名無しさん
2013/11/24(日) 21:50:17.68お前は本当にSmalltalkが起源だと言いたいだけなの?
他に言えることないの?
0993デフォルトの名無しさん
2013/11/24(日) 21:50:35.07WindowsAPIの構造体想像してみ
同じnameって要素
もってても構造体別に処理が必用
0994デフォルトの名無しさん
2013/11/24(日) 21:51:17.01方向が同じだって言ってんだろ
0995デフォルトの名無しさん
2013/11/24(日) 21:52:06.71なら否定することないじゃない
真似事ではないよ
0996デフォルトの名無しさん
2013/11/24(日) 21:52:43.280997デフォルトの名無しさん
2013/11/24(日) 21:52:43.350998デフォルトの名無しさん
2013/11/24(日) 21:53:02.34起源だなんて言ってんのはお前だけだろ
結局Smalltalkの方向にいくといってんだ
0999デフォルトの名無しさん
2013/11/24(日) 21:53:35.99すまん俺は単発だ。
「真似事」が「そのもの」と違いがある(型が普通にある)のは当然って突っ込みいれただけ。
1000デフォルトの名無しさん
2013/11/24(日) 21:54:41.97受け付ける型関係なくメソッドを動的に呼ぶ事が無茶
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。