JavaScript を自ら学ぶ人のための質問スレッドです。
>>2-6のテンプレを読んだ上で質問してください。次スレは>>950が>>2のテンプレ案(本スレで改善案があれば考慮)を元に立ててください
■質問を書く上で
(1) 煽り、コード制作依頼等、人を不快にさせる投稿はご遠慮下さい。公序良俗を守った応対を心がけてください。
(2) 他の人に迷惑をかけるスクリプトの質問はご遠慮ください。
(ブラクラ、[戻る], [閉じる], [クリック] の妨害、画面占有など)
(3) 質問者及び議論を行う人はメール欄を空欄にし、名前にレス番を入れることを強く推奨します。回答者はなりすましを判断できませんので、なりすましが現れても自己責任となります。
(4) 常に自発的に調べる心構えを持ってください。
具体的には「自分で調べてから質問する」「回答をもらってわからない単語があればGoogle検索してみる」など。
わからない内容を代わりに調べてくれる回答者をお望みの方は余所で質問してください。
(5) 出来るだけ一般的な用語を使用してください。脳内オレオレ用語は混乱の元です。
(6) 出来るだけサンプルコードを掲示してください。言葉による説明は行き違いが生まれる場合があります。
※必ず「問題の事象が再現されること」を確認してください。
必要な部分だけ切り出したつもりで現象が再現できていなかったケアレスミスがしばしば見られます。
(7) サンプルコードに HTML が含まれる場合は http://validator.w3.org/ で [Check] してみてください。
(8) 質問を具体的かつ詳細に書くと回答を得られやすいです。>>2の質問テンプレートを活用してみてください。
(9) ライブラリ関連の質問は禁止です。関連スレにあるライブラリ質問スレで質問して下さい。
(10) 時にはあなたが望む「答え」だけでなく、「意見」などが寄せられる場合もあります。
※前スレ
JavaScript の質問用スレッド vol.122
http://echo.2ch.net/test/read.cgi/tech/1472426483/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
JavaScript の質問用スレッド vol.123 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん 転載ダメ©2ch.net (ワッチョイ 73c8-oPzN)
2017/04/03(月) 00:31:25.68ID:82yaJsi70146デフォルトの名無しさん (ワッチョイ 43c8-SU9n)
2017/05/13(土) 21:58:34.66ID:BFgjnkHK0 いやその関数を2回呼びたくない時にどうするかだよ。
副作用無しの関数なら、先に呼んでしまって一時変数化するというのが通常の解法。
でも最初の分枝、142の例で言うとcaseAに当たった場合にこれは不要なら、
関数呼ぶだけ無駄でしょ。
関数に副作用がある場合は一時変数化も出来なくて、
if文でしこしこ書くことになる。
とはいえ関数型の場合は副作用無しにして何度でも呼んでしまえ、が正義なのかもね。
なお俺が使おうとしている状況は、、、と詳細に説明しようとしたが、
JavaScriptの場合は型無しなので、 || と && 上手く使ったら
カンマ演算子無しで書けそうな気もしてきたorz
副作用無しの関数なら、先に呼んでしまって一時変数化するというのが通常の解法。
でも最初の分枝、142の例で言うとcaseAに当たった場合にこれは不要なら、
関数呼ぶだけ無駄でしょ。
関数に副作用がある場合は一時変数化も出来なくて、
if文でしこしこ書くことになる。
とはいえ関数型の場合は副作用無しにして何度でも呼んでしまえ、が正義なのかもね。
なお俺が使おうとしている状況は、、、と詳細に説明しようとしたが、
JavaScriptの場合は型無しなので、 || と && 上手く使ったら
カンマ演算子無しで書けそうな気もしてきたorz
147デフォルトの名無しさん (ワッチョイ 9321-n/2N)
2017/05/13(土) 22:15:31.25ID:qMDptb/r0 ??
関数を2回呼ぶとか一時変数にしないといけないってのがよくわからん
必要ないと思うけど…まぁ本人が自己解決できそうならいいか
関数を2回呼ぶとか一時変数にしないといけないってのがよくわからん
必要ないと思うけど…まぁ本人が自己解決できそうならいいか
148デフォルトの名無しさん (ワッチョイ cf75-yoyE)
2017/05/13(土) 22:23:27.64ID:nrviLaTM0 どの言語でもそうだけど、
コロンで区切れば、独立した文だから、安全
カンマでは、独立した文にならないから、
副作用・評価順序などを勘違いしやすく、バグが多くなる。
だから、カンマは使わない方がよい
短絡評価も、後ろの式が実行されるかどうか、分かりにくいので、
使わない方がよいと言われる
コロンで区切れば、独立した文だから、安全
カンマでは、独立した文にならないから、
副作用・評価順序などを勘違いしやすく、バグが多くなる。
だから、カンマは使わない方がよい
短絡評価も、後ろの式が実行されるかどうか、分かりにくいので、
使わない方がよいと言われる
149デフォルトの名無しさん (ワッチョイ 8392-287W)
2017/05/13(土) 22:26:02.59ID:7pndE6Ym0 とりあえず、文と式の区別がつくようになってから出直しなさい
150デフォルトの名無しさん (アウアウカー Sa67-n/2N)
2017/05/13(土) 22:35:08.66ID:aLhAg7Rda プログラマーたるもの言語仕様に依存せず、型を強く意識し型に対してプログラミングしましょう
151デフォルトの名無しさん (ワッチョイ 43c8-SU9n)
2017/05/13(土) 22:35:17.69ID:BFgjnkHK0 >>147
あ、いや、やっぱ多分無理だ。こんな感じ。
(カンマ演算子は使ったこと無いから文法が怪しいが、多分これであってると思う)
var result = (sel==='ALL')? query_set(name, 'ALL') :
(var tgts = get_tgts(name), (tgts)? query_set(name, tgts) : obj[name]);
sel==='ALL'の時にはquery_setを呼び出す。
それ以外の時にはget_tgtsでリストを確認し、該当した場合はquery_setを呼び出す。
該当無しの場合は単にobjを名前で引く。
query_setは何度呼んでもいいが、
初めて呼ぶ場合には obj[name] に色々初期化した物を作成して登録する。
登録されている物はobj[name]で確認出来るし、
2回目以降(既にobj[name]が存在した場合)にはobj[name]が返される。
だから上記は、
sel==='ALL'の時は常にobj[name]を引き、無ければ登録してそれを返す、
それ以外の場合は、新規登録リストget_tgtsにあれば新規登録してそれを返す、
なければ既に登録されていればそれを返す、となる。
ここで get_tgtsは何度呼んでもいいから上記は
var result = (sel==='ALL')? query_set(name, 'ALL') :
(get_tgts(name))? query_set(name, get_tgts(name)) : obj[name];
とすることも可能だが、 get_tgts(name)は重くなる可能性があるので
必要な時にのみ一度引くようにしたい。
逆に obj[name]は1回引いて終わりだし、こちらも何度引いてもいいので、
var result = (sel==='ALL')? query_set(name, 'ALL') :
(obj[name])? obj[name] : (var tgts = get_tgts(name), (tgts)? query_set(name, tgts) : null);
とも出来る。
あ、いや、やっぱ多分無理だ。こんな感じ。
(カンマ演算子は使ったこと無いから文法が怪しいが、多分これであってると思う)
var result = (sel==='ALL')? query_set(name, 'ALL') :
(var tgts = get_tgts(name), (tgts)? query_set(name, tgts) : obj[name]);
sel==='ALL'の時にはquery_setを呼び出す。
それ以外の時にはget_tgtsでリストを確認し、該当した場合はquery_setを呼び出す。
該当無しの場合は単にobjを名前で引く。
query_setは何度呼んでもいいが、
初めて呼ぶ場合には obj[name] に色々初期化した物を作成して登録する。
登録されている物はobj[name]で確認出来るし、
2回目以降(既にobj[name]が存在した場合)にはobj[name]が返される。
だから上記は、
sel==='ALL'の時は常にobj[name]を引き、無ければ登録してそれを返す、
それ以外の場合は、新規登録リストget_tgtsにあれば新規登録してそれを返す、
なければ既に登録されていればそれを返す、となる。
ここで get_tgtsは何度呼んでもいいから上記は
var result = (sel==='ALL')? query_set(name, 'ALL') :
(get_tgts(name))? query_set(name, get_tgts(name)) : obj[name];
とすることも可能だが、 get_tgts(name)は重くなる可能性があるので
必要な時にのみ一度引くようにしたい。
逆に obj[name]は1回引いて終わりだし、こちらも何度引いてもいいので、
var result = (sel==='ALL')? query_set(name, 'ALL') :
(obj[name])? obj[name] : (var tgts = get_tgts(name), (tgts)? query_set(name, tgts) : null);
とも出来る。
152デフォルトの名無しさん (ワッチョイ cf75-yoyE)
2017/05/13(土) 22:35:19.85ID:nrviLaTM0 これだと、fが1回呼ばれるのか、2回か、どちらか分からない
1 < f() && f() < 10
こう書けば、1回しか呼ばれない
a = f();
1 < a && a < 10
Pythonでは、こう書けるから、1回しか呼ばれない
1 < f() < 10
fがオブジェクト・関数などの場合、どういう副作用があるか分からない。
何かのリソースにアクセスして、その電荷を変えてしまうかもしれない
volatile というけど、読み取っただけでも、電荷が逆転するデバイスがあるから、
2回読み取ったら、正常に動かないとか
1 < f() && f() < 10
こう書けば、1回しか呼ばれない
a = f();
1 < a && a < 10
Pythonでは、こう書けるから、1回しか呼ばれない
1 < f() < 10
fがオブジェクト・関数などの場合、どういう副作用があるか分からない。
何かのリソースにアクセスして、その電荷を変えてしまうかもしれない
volatile というけど、読み取っただけでも、電荷が逆転するデバイスがあるから、
2回読み取ったら、正常に動かないとか
153デフォルトの名無しさん (ワッチョイ 43c8-SU9n)
2017/05/13(土) 22:35:56.65ID:BFgjnkHK0 諦めてif文でしこしこ書いてもいいのだが、tgtsなんて結局ここでしか使ってないし、
欲しいのはresultだけだから var result = の書き方で出来た方が見やすい。
ただ、関数型ならここをそのまま切り出して、
function somefunc(name){
ここはif文でしこしこ
return result;
}
で上位からは
var result = somefunc(name);
で隠蔽してよしとするのかな?
多分ここが噛み合ってないのだと思う。
欲しいのはresultだけだから var result = の書き方で出来た方が見やすい。
ただ、関数型ならここをそのまま切り出して、
function somefunc(name){
ここはif文でしこしこ
return result;
}
で上位からは
var result = somefunc(name);
で隠蔽してよしとするのかな?
多分ここが噛み合ってないのだと思う。
154あ (スププ Sd9f-4rj3)
2017/05/13(土) 22:38:11.42ID:l2RlSRsKd155デフォルトの名無しさん (ワッチョイ 43c8-SU9n)
2017/05/13(土) 22:50:19.81ID:BFgjnkHK0 >>154
ちょっと輻輳気味だが、
>>151内、
1. get_tgts(name)はユーザー作成リストを参照するので際限なく重くなる可能性があり、
可能であれば出来るだけ引きたくない。
2. ちなみに今はこの手の「重くなるかもしれないユーザー作成リスト」についてはキャッシュを作成し、
それを引いているから実は重くないのだが、キャッシュの管理が面倒なのも事実。
3. だから「重いけど我慢出来る範囲」ならキャッシュ無しで組むのもありか?とも思ったり。
その時に出来るだけ無駄のない動作をする為の記述が必要であり、それが今回。
つっても同様のケースは以前からあり、
カンマ演算子を三項演算子内で使用することについては、考えてはいたんだが。
実際、result を得る為だけに使う tgts とかは result = 式内に閉じこめた方が見やすいでしょ。
そして記述通りに動くのならそれが最速の記述ではあるし。
見やすくて速いんだからやらない理由はない。
ただしカンマ演算子については積極的に使っているのを見たことがないから、
多分何かしらかなり問題があって、、、だろうからそれを先に確認したくてね。
ちょっと輻輳気味だが、
>>151内、
1. get_tgts(name)はユーザー作成リストを参照するので際限なく重くなる可能性があり、
可能であれば出来るだけ引きたくない。
2. ちなみに今はこの手の「重くなるかもしれないユーザー作成リスト」についてはキャッシュを作成し、
それを引いているから実は重くないのだが、キャッシュの管理が面倒なのも事実。
3. だから「重いけど我慢出来る範囲」ならキャッシュ無しで組むのもありか?とも思ったり。
その時に出来るだけ無駄のない動作をする為の記述が必要であり、それが今回。
つっても同様のケースは以前からあり、
カンマ演算子を三項演算子内で使用することについては、考えてはいたんだが。
実際、result を得る為だけに使う tgts とかは result = 式内に閉じこめた方が見やすいでしょ。
そして記述通りに動くのならそれが最速の記述ではあるし。
見やすくて速いんだからやらない理由はない。
ただしカンマ演算子については積極的に使っているのを見たことがないから、
多分何かしらかなり問題があって、、、だろうからそれを先に確認したくてね。
156デフォルトの名無しさん (ワッチョイ 9321-e8oa)
2017/05/13(土) 22:57:27.66ID:qMDptb/r0 >>151
こんな感じでどうでしょ
var result = sell ==='ALL'
? query_set(name,'ALL')
: ((tgts,name,obj) => tgts ? query_set(name,tgts) : obj )(get_tgts(name), name, obj[name]);
こんな感じでどうでしょ
var result = sell ==='ALL'
? query_set(name,'ALL')
: ((tgts,name,obj) => tgts ? query_set(name,tgts) : obj )(get_tgts(name), name, obj[name]);
157デフォルトの名無しさん (ワッチョイ 43c8-SU9n)
2017/05/13(土) 23:06:40.11ID:BFgjnkHK0 >>148
> 短絡評価も、後ろの式が実行されるかどうか、分かりにくいので、
> 使わない方がよいと言われる
いやそれはCの世界では嘘だ。あっちは短絡評価ありきで組む。
そして俺はもちろんJavaScriptもそうしているし、
逆にwhile文とかは短絡評価無しだと組みにくいでしょ。
典型的パターンは以下。
var i = start;
while (i<arr.length && arr[i].prop!=xxx) i++;
関数型?で無理矢理組めば、
var i = arr.slice(start).findIndex(function(v){return v.prop==xxx;})+start;
なのか?しかし無駄が多いし余計に見にくいだろ。
> 短絡評価も、後ろの式が実行されるかどうか、分かりにくいので、
> 使わない方がよいと言われる
いやそれはCの世界では嘘だ。あっちは短絡評価ありきで組む。
そして俺はもちろんJavaScriptもそうしているし、
逆にwhile文とかは短絡評価無しだと組みにくいでしょ。
典型的パターンは以下。
var i = start;
while (i<arr.length && arr[i].prop!=xxx) i++;
関数型?で無理矢理組めば、
var i = arr.slice(start).findIndex(function(v){return v.prop==xxx;})+start;
なのか?しかし無駄が多いし余計に見にくいだろ。
158デフォルトの名無しさん (ワッチョイ 43c8-SU9n)
2017/05/13(土) 23:17:11.98ID:BFgjnkHK0159デフォルトの名無しさん (ワッチョイ 9321-e8oa)
2017/05/13(土) 23:23:24.73ID:qMDptb/r0 「配列arrの中の、start番目以降の要素の中で、prop==xxxに当てはまる最初の要素のインデックス」を
求めるならこんな感じにそのまま書けばいいのよ
var i = arr.findIndex((v, idx) idx>=start && v.prop==xxx);
求めるならこんな感じにそのまま書けばいいのよ
var i = arr.findIndex((v, idx) idx>=start && v.prop==xxx);
160デフォルトの名無しさん (ワッチョイ 43c8-SU9n)
2017/05/13(土) 23:33:21.05ID:BFgjnkHK0161デフォルトの名無しさん (ワッチョイ 838c-O3YC)
2017/05/13(土) 23:36:49.07ID:f5G7qLua0 >>157
var i = arr.slice(start).findIndex(function(v){return v.prop==xxx;})+start;
最近の書き方だとこうだろ?
var i = arr.slice(start).findIndex(v => v.prop == xxx)+start;
んで、lodash使えばこうなる。
var i = _.findIndex(arr, {prop: xxx}, start);
var i = arr.slice(start).findIndex(function(v){return v.prop==xxx;})+start;
最近の書き方だとこうだろ?
var i = arr.slice(start).findIndex(v => v.prop == xxx)+start;
んで、lodash使えばこうなる。
var i = _.findIndex(arr, {prop: xxx}, start);
162デフォルトの名無しさん (ワッチョイ 838c-O3YC)
2017/05/13(土) 23:38:27.63ID:f5G7qLua0163デフォルトの名無しさん (ワッチョイ 838c-O3YC)
2017/05/13(土) 23:41:00.33ID:f5G7qLua0 >>159
こうだな
var i = arr.findIndex((v, idx) => idx >= start && v.prop == xxx);
var i = start; while (i<arr.length && arr[i].prop != xxx) i++;
var i = _.findIndex(arr, {prop: xxx}, start);
一行につなげて比較してみよう
こうだな
var i = arr.findIndex((v, idx) => idx >= start && v.prop == xxx);
var i = start; while (i<arr.length && arr[i].prop != xxx) i++;
var i = _.findIndex(arr, {prop: xxx}, start);
一行につなげて比較してみよう
164デフォルトの名無しさん (アウアウウー Sa87-aLXf)
2017/05/13(土) 23:46:38.05ID:Iih4R+8da カンマ演算子の使いどころは、一つのStatementしか記述を許されてない箇所にある
(while文の条件式、アロー関数の省略記法、三項演算子など)
省略記法が大好きな人ほど好む傾向があるかも知れない
(while文の条件式、アロー関数の省略記法、三項演算子など)
省略記法が大好きな人ほど好む傾向があるかも知れない
165デフォルトの名無しさん (ワッチョイ 9321-n/2N)
2017/05/13(土) 23:48:01.73ID:qMDptb/r0 >>158
いやまぁもちろんこんな無名関数をそのまま書いたりしないけどね
上と抽象度違っちゃってるし、いつもはちゃんと名付けするよ(面倒だから手抜きしましたごめんなさい)
「一般的か?」って言われたら、JavaScriptでは一般的ではないでしょう
だいたいみんなif文使うし、宣言型なんて見ない見ない
ただまぁこうやって引数にしちゃえばキャッシュ出来るよという参考までに
あとは自分で選べばいいさ
いやまぁもちろんこんな無名関数をそのまま書いたりしないけどね
上と抽象度違っちゃってるし、いつもはちゃんと名付けするよ(面倒だから手抜きしましたごめんなさい)
「一般的か?」って言われたら、JavaScriptでは一般的ではないでしょう
だいたいみんなif文使うし、宣言型なんて見ない見ない
ただまぁこうやって引数にしちゃえばキャッシュ出来るよという参考までに
あとは自分で選べばいいさ
166デフォルトの名無しさん (ワッチョイ 43c8-SU9n)
2017/05/13(土) 23:49:06.10ID:BFgjnkHK0167デフォルトの名無しさん (ワッチョイ 43c8-SU9n)
2017/05/13(土) 23:55:22.89ID:BFgjnkHK0 >>165
> JavaScriptでは一般的ではないでしょう
ちなみにこれを他言語では一般的にやってるのか?それは何言語?
別に糾弾しようってわけではなくて、ちょっと見てみたい。
ちなみに抽象度については俺も思ったが、それ以前に、
1つのことをやる物を2つに分解して配置したくないので、
俺は「名前付き関数」にして呼ぶって事もしない。if文で書く。
ただしこれはCでは関数内関数が使えないからそういう文化なのであって、
関数内関数が使える言語なら別文化もありだとは思う。
> JavaScriptでは一般的ではないでしょう
ちなみにこれを他言語では一般的にやってるのか?それは何言語?
別に糾弾しようってわけではなくて、ちょっと見てみたい。
ちなみに抽象度については俺も思ったが、それ以前に、
1つのことをやる物を2つに分解して配置したくないので、
俺は「名前付き関数」にして呼ぶって事もしない。if文で書く。
ただしこれはCでは関数内関数が使えないからそういう文化なのであって、
関数内関数が使える言語なら別文化もありだとは思う。
168デフォルトの名無しさん (ワッチョイ 9321-e8oa)
2017/05/13(土) 23:56:04.26ID:qMDptb/r0 >>157
もちろん、それでいいと思うよ
そこら辺考えだすとそうするしかない
折衷案としてはこんな感じでwhileの部分を関数化する感じかな
var searchPropIdx = function(arr, tgt, start){
var j=0, len=arr.length;
while (j<len && arr[j].prop!=tgt) j++;
return j;
};
var i = searchPropIdx(arr,xxx,start);
これでも何してるかは関数名が教えてくれるから宣言的といえるのではないでしょうか
もちろん、それでいいと思うよ
そこら辺考えだすとそうするしかない
折衷案としてはこんな感じでwhileの部分を関数化する感じかな
var searchPropIdx = function(arr, tgt, start){
var j=0, len=arr.length;
while (j<len && arr[j].prop!=tgt) j++;
return j;
};
var i = searchPropIdx(arr,xxx,start);
これでも何してるかは関数名が教えてくれるから宣言的といえるのではないでしょうか
169デフォルトの名無しさん (ワッチョイ 838c-O3YC)
2017/05/13(土) 23:56:59.84ID:f5G7qLua0170デフォルトの名無しさん (ワッチョイ 838c-O3YC)
2017/05/13(土) 23:59:09.17ID:f5G7qLua0 >>168
自分で関数作るぐらいならlodashの方がいいな。
いきなりsearchPropIdxとか書かれても
コード読まないと何をしているのかわからない。
lodashのような有名ライブラリであれば
有名なライブラリを知っているならば使い方わかるし
たとえ知らなくても、誰かが解説してくれてれる
自分で関数作るぐらいならlodashの方がいいな。
いきなりsearchPropIdxとか書かれても
コード読まないと何をしているのかわからない。
lodashのような有名ライブラリであれば
有名なライブラリを知っているならば使い方わかるし
たとえ知らなくても、誰かが解説してくれてれる
171デフォルトの名無しさん (ワッチョイ 9321-n/2N)
2017/05/14(日) 00:02:48.77ID:zJfJO46R0172デフォルトの名無しさん (ワッチョイ 43c8-SU9n)
2017/05/14(日) 00:09:32.47ID:Rp58SwPv0 >>168
まあ、俺も必要な場合はそのように関数化してくくり出すけどね。
メリットは抽象度が上げられて依存関係を切れる(隠蔽出来る)ことだが、
ここら辺は要するにオブジェクト指向のメリットであり、
そもそもオブジェクト指向は巨大なコードを何とかする手法だから、
ここでlodashを布教している奴が理解することはないというのは、
これまでさんざん見てきたとおり。
俺はlodashが使える環境でも使わないね。whileで書く。
ただここら辺は各人が好きなようにすればいいだけの話だね。
まあ、俺も必要な場合はそのように関数化してくくり出すけどね。
メリットは抽象度が上げられて依存関係を切れる(隠蔽出来る)ことだが、
ここら辺は要するにオブジェクト指向のメリットであり、
そもそもオブジェクト指向は巨大なコードを何とかする手法だから、
ここでlodashを布教している奴が理解することはないというのは、
これまでさんざん見てきたとおり。
俺はlodashが使える環境でも使わないね。whileで書く。
ただここら辺は各人が好きなようにすればいいだけの話だね。
173デフォルトの名無しさん (ワッチョイ 838c-O3YC)
2017/05/14(日) 00:18:55.77ID:UzoQivKq0174デフォルトの名無しさん (ワッチョイ 9321-n/2N)
2017/05/14(日) 00:45:18.37ID:zJfJO46R0 >>167
「値は引数を関数に適用させて作るもの」ってのはラムダ計算の基本的な考え方だから、大抵の関数型言語ならそうじゃない?
そもそも例えばHaskellなんかは今回でいうget_tagを同一スコープ内で何回実行したところで、
引数が同じなら計算結果は最初のものを常に使い回すしね
別に好きに書けばいいんだよ
ただ最初に宣言的って言ってたのが何か勘違いしてそうで引っかかっただけで
「値は引数を関数に適用させて作るもの」ってのはラムダ計算の基本的な考え方だから、大抵の関数型言語ならそうじゃない?
そもそも例えばHaskellなんかは今回でいうget_tagを同一スコープ内で何回実行したところで、
引数が同じなら計算結果は最初のものを常に使い回すしね
別に好きに書けばいいんだよ
ただ最初に宣言的って言ってたのが何か勘違いしてそうで引っかかっただけで
175デフォルトの名無しさん (ワッチョイ 43c8-SU9n)
2017/05/14(日) 01:10:19.27ID:Rp58SwPv0 >>174
> ただ最初に宣言的って言ってたのが何か勘違いしてそうで引っかかっただけで
これについてはそちらの指摘通り、俺は勘違いしていると思う。
俺は関数型言語を使ってはいないからね。
これは、俺の用語に誤用がある可能性を考慮しつつ話をしてもらうしかない。
> そもそも例えばHaskellなんかは今回でいうget_tagを同一スコープ内で何回実行したところで、
> 引数が同じなら計算結果は最初のものを常に使い回すしね
Haskellってインミュータブルだったっけ?忘れたけど、
確かにインミュータブルだったらこれで終わりだね。
つべこべ言わずに何回も書いても関係ない事になる。
しかもHaskellの場合は遅延評価だから事前に書いても大してオーバーヘッドもない。
まあこの辺が便利なのかもね。
> 大抵の関数型言語ならそうじゃない?
そうか。了解した。
> ただ最初に宣言的って言ってたのが何か勘違いしてそうで引っかかっただけで
これについてはそちらの指摘通り、俺は勘違いしていると思う。
俺は関数型言語を使ってはいないからね。
これは、俺の用語に誤用がある可能性を考慮しつつ話をしてもらうしかない。
> そもそも例えばHaskellなんかは今回でいうget_tagを同一スコープ内で何回実行したところで、
> 引数が同じなら計算結果は最初のものを常に使い回すしね
Haskellってインミュータブルだったっけ?忘れたけど、
確かにインミュータブルだったらこれで終わりだね。
つべこべ言わずに何回も書いても関係ない事になる。
しかもHaskellの場合は遅延評価だから事前に書いても大してオーバーヘッドもない。
まあこの辺が便利なのかもね。
> 大抵の関数型言語ならそうじゃない?
そうか。了解した。
176デフォルトの名無しさん (ワッチョイ 43c8-SU9n)
2017/05/14(日) 01:12:21.75ID:Rp58SwPv0 すまん、
× インミュータブル
○ 再代入禁止
だね。
× インミュータブル
○ 再代入禁止
だね。
177デフォルトの名無しさん (ワッチョイ cf75-yoyE)
2017/05/14(日) 02:45:59.49ID:wDkNkjbA0 >>157
>> 短絡評価も、後ろの式が実行されるかどうか、分かりにくいので、
>> 使わない方がよいと言われる
> いやそれはCの世界では嘘だ。あっちは短絡評価ありきで組む
後ろの式に、副作用がある場合、バグ含みになるから、危険。
それで、Pythonでは、以下のように書けるようになってる
1 < f() < 10
MISRA-C 2004 のコーディング規則を参照
>> 短絡評価も、後ろの式が実行されるかどうか、分かりにくいので、
>> 使わない方がよいと言われる
> いやそれはCの世界では嘘だ。あっちは短絡評価ありきで組む
後ろの式に、副作用がある場合、バグ含みになるから、危険。
それで、Pythonでは、以下のように書けるようになってる
1 < f() < 10
MISRA-C 2004 のコーディング規則を参照
178デフォルトの名無しさん (ワッチョイ 2370-NgNF)
2017/05/14(日) 05:32:19.86ID:QAEk2mhn0 >>172
俺はお前の見方
俺はお前の見方
179デフォルトの名無しさん (ワッチョイ cf75-yoyE)
2017/05/14(日) 07:47:04.55ID:wDkNkjbA0 <tr>
<td><%= name %></td>
<td><%= gender %></td>
<td><%= job %></td>
</tr>
lodash.js (underscore.js)には、template があるから、
jQueryですべての要素を作らなくても、HTMLファイルに値を埋め込むだけでよい
<td><%= name %></td>
<td><%= gender %></td>
<td><%= job %></td>
</tr>
lodash.js (underscore.js)には、template があるから、
jQueryですべての要素を作らなくても、HTMLファイルに値を埋め込むだけでよい
180デフォルトの名無しさん (ワッチョイ 43c8-SU9n)
2017/05/14(日) 08:05:39.42ID:Rp58SwPv0 >>177
つかMISRAを持ち出すのなら番号まで指定してくれ。
あれは膨大な数があるんだから。
つっても、見てもそうだとしか書いてないとは思うが。
> 1 < f() < 10
Pythonがそう書けるのはいいとは思うが、そもそもCプログラマで
> 1 < f() && f() < 10
をやる奴はいないんだよ。これは常識だから。
次に、関数型が「参照透過(キリッ」とかやっているのも
Cだと最初からほぼ参照透過なんだよ。
クロージャはないし、グローバルもほぼ使わないんだから。
(通常はポインタを与えないと非参照透過にならない。
ポインタについては明示的に見えるから、
クロージャのある言語のように「参照透過」を気にする必要がない)
だからそこら辺の文化は明らかに違う。
実際、whileループなんて短絡評価ありきでないと組めないし、
俺が出した例なんてマジで頻出だぞ。
で、それを「俺は配列の長さなんて管理したくない。
該当するインデックスが欲しいだけだ」と言うのなら、
コード例も既に出したように、それが明示的には見えないコードにすればいいだけだろ。
ただ俺はあれで効率が上がるとは思えないがね。
根本的に違うのは、
while (i<arr.length && arr[i].prop != xxx) i++;
はCに於いてはarrに対して副作用を持ち得ないんだよ。(通常はvolatileでないから)
ところがJavaScriptではゲッタやプロキシがあるし常用されるから、これだけでは言い切れない。
だからそもそも「副作用」に対する感覚が全然違うんだよ。
つかMISRAを持ち出すのなら番号まで指定してくれ。
あれは膨大な数があるんだから。
つっても、見てもそうだとしか書いてないとは思うが。
> 1 < f() < 10
Pythonがそう書けるのはいいとは思うが、そもそもCプログラマで
> 1 < f() && f() < 10
をやる奴はいないんだよ。これは常識だから。
次に、関数型が「参照透過(キリッ」とかやっているのも
Cだと最初からほぼ参照透過なんだよ。
クロージャはないし、グローバルもほぼ使わないんだから。
(通常はポインタを与えないと非参照透過にならない。
ポインタについては明示的に見えるから、
クロージャのある言語のように「参照透過」を気にする必要がない)
だからそこら辺の文化は明らかに違う。
実際、whileループなんて短絡評価ありきでないと組めないし、
俺が出した例なんてマジで頻出だぞ。
で、それを「俺は配列の長さなんて管理したくない。
該当するインデックスが欲しいだけだ」と言うのなら、
コード例も既に出したように、それが明示的には見えないコードにすればいいだけだろ。
ただ俺はあれで効率が上がるとは思えないがね。
根本的に違うのは、
while (i<arr.length && arr[i].prop != xxx) i++;
はCに於いてはarrに対して副作用を持ち得ないんだよ。(通常はvolatileでないから)
ところがJavaScriptではゲッタやプロキシがあるし常用されるから、これだけでは言い切れない。
だからそもそも「副作用」に対する感覚が全然違うんだよ。
181デフォルトの名無しさん (ワッチョイ cf75-yoyE)
2017/05/14(日) 08:55:23.90ID:wDkNkjbA0 MISRA-C 2004 ルール12.4
論理演算子 && または || の右側のオペランドには、副作用があってはならない。
volatile もダメ
論理演算子 && または || の右側のオペランドには、副作用があってはならない。
volatile もダメ
182デフォルトの名無しさん (ワッチョイ 43c8-SU9n)
2017/05/14(日) 09:13:34.23ID:Rp58SwPv0183デフォルトの名無しさん (ワッチョイ 43c8-SU9n)
2017/05/14(日) 11:13:06.81ID:Rp58SwPv0 というか今更気づいたが、カンマ演算子ってほとんどの言語ではないんだな。
むしろある方が異端のようだ。
ある:C/C++, JavaScript, Perl
ない:Java(ただしfor文内のみ可), C#, Ruby, てか多分他全部
JavaScriptの場合は匿名関数をその場で定義して使っても構わないから、
文が書けないからカンマ演算子という時は大抵この方法でも回避出来る。
といっても余計に見にくくなるが。
例: (function(){ /*何かの動作*/ })()
むしろある方が異端のようだ。
ある:C/C++, JavaScript, Perl
ない:Java(ただしfor文内のみ可), C#, Ruby, てか多分他全部
JavaScriptの場合は匿名関数をその場で定義して使っても構わないから、
文が書けないからカンマ演算子という時は大抵この方法でも回避出来る。
といっても余計に見にくくなるが。
例: (function(){ /*何かの動作*/ })()
184デフォルトの名無しさん (アウアウカー Sa67-n/2N)
2017/05/14(日) 12:11:34.87ID:pHcsRThma 普通にif-elseifで書けばいいのに、カンマ演算子にこだわりすぎて暴走しとるな
185デフォルトの名無しさん (ワッチョイ 13bc-O3YC)
2017/05/14(日) 12:37:42.55ID:j3QiJPk20 構文なんだから人間様解るように記述すればいいだけ
ただのオナニー
ただのオナニー
186デフォルトの名無しさん (ワッチョイ 838c-O3YC)
2017/05/14(日) 12:43:51.10ID:UzoQivKq0 関数型風に書けよw
カンマ演算子なんて関数型風でも
一旦変数に入れるだけの話だろ
カンマ演算子なんて関数型風でも
一旦変数に入れるだけの話だろ
187デフォルトの名無しさん (ワッチョイ 838c-O3YC)
2017/05/14(日) 12:49:06.75ID:UzoQivKq0 そういや短絡評価は殆どの言語にあるんだな。
188デフォルトの名無しさん (アウアウカー Sa67-n/2N)
2017/05/14(日) 13:27:08.87ID:pHcsRThma そもそも関数型風のメリットは論理と計算の分離であって、どっちがいいとかじゃないし
三項演算子を使ってcaseAの場合aが返ってくるなら、そうでない場合は同等の型のbが返ってくるのが基本
三項演算子をネストさせるってことはそもそも論理と計算が分離されてない
それを気にしないなら別に好きにすればいいんだよ
見やすい見にくいみたいな主観に任せればいい
三項演算子を使ってcaseAの場合aが返ってくるなら、そうでない場合は同等の型のbが返ってくるのが基本
三項演算子をネストさせるってことはそもそも論理と計算が分離されてない
それを気にしないなら別に好きにすればいいんだよ
見やすい見にくいみたいな主観に任せればいい
189デフォルトの名無しさん (ワッチョイ 838c-O3YC)
2017/05/14(日) 13:30:55.25ID:UzoQivKq0 関数型風にすればconstを使えるようになる。
変数に入れた値が変わらないから、コードを把握しやすくなるし
バグも減るのがメリット
変数に入れた値が変わらないから、コードを把握しやすくなるし
バグも減るのがメリット
190デフォルトの名無しさん (ワッチョイ 2370-NgNF)
2017/05/14(日) 20:32:09.27ID:QAEk2mhn0 全部プロトタイプベースで書けばいいと言うのと同じくらい無意味な綺麗事
つうかconstは長いし普通の人にとっては読みにくい
意地っ張りの価値観の押しつけをする気が無いのなら
手元では好きに書いていいが挙げるときは置換くらいしてくれ
それが最低限のマナー
つうかconstは長いし普通の人にとっては読みにくい
意地っ張りの価値観の押しつけをする気が無いのなら
手元では好きに書いていいが挙げるときは置換くらいしてくれ
それが最低限のマナー
191デフォルトの名無しさん (ワッチョイ 238c-O3YC)
2017/05/14(日) 20:57:23.20ID:pZ8yqHc90 > つうかconstは長いし普通の人にとっては読みにくい
英語読めない人?
英語読めない人?
192デフォルトの名無しさん (アウアウカー Sa67-n/2N)
2017/05/14(日) 21:01:57.87ID:pHcsRThma 新しいものが一般的でないのなんて当たり前なんだよなぁ
いかにそこから普及させれるかだ
先人の叡智を無駄にしてはいけない
いかにそこから普及させれるかだ
先人の叡智を無駄にしてはいけない
193デフォルトの名無しさん (ワッチョイ 8392-+8ye)
2017/05/14(日) 21:11:34.04ID:HLo7v2s80 > つうかconstは長いし普通の人にとっては読みにくい
constが長かったらdocument.body.innerHTMLとかもはや解読不能だろ
constが長かったらdocument.body.innerHTMLとかもはや解読不能だろ
194デフォルトの名無しさん (ワッチョイ 13f5-oVa1)
2017/05/14(日) 22:56:24.87ID:LykvO83v0 むしろconstは多用したほうが保守性は上がるでしょ。今時var宣言使っちゃだめよ
195デフォルトの名無しさん (ワッチョイ 3317-gidy)
2017/05/15(月) 07:30:07.09ID:vbGagq9z0 constでキレイにインデントできたら最高なんだけどなぁ
196デフォルトの名無しさん (ブーイモ MM87-xXC6)
2017/05/15(月) 10:39:17.61ID:ChsP7NlFM 仮にconstが消えてもletになるだけで
varにはならん
varにはならん
197デフォルトの名無しさん (エムゾネ FF9f-PEl/)
2017/05/15(月) 11:43:14.43ID:vXJw7fGsF 全部constにするんなら、宣言要らない関数型altJS使えばいいじゃん
198デフォルトの名無しさん (アウアウカー Sa67-n/2N)
2017/05/15(月) 12:37:45.42ID:Nyf5aX+Ca 自分で言語決めれる開発なんてほとんどないし
199デフォルトの名無しさん (ワッチョイ 8392-287W)
2017/05/15(月) 14:42:16.22ID:k1YI7zCW0 ES6なら末尾呼び出し最適化が働くのでforは再帰で書ける
なのてletは不用 constだけで良い インデントも揃う
なのてletは不用 constだけで良い インデントも揃う
200デフォルトの名無しさん (ワッチョイ 2370-NgNF)
2017/05/15(月) 18:12:27.51ID:5bRXjaUX0 >>198
いやいや、フルconstの自由があるならAltJSくらい余裕でしょ
つうかconstの実際価値があるっていうのじゃなくて
単にconst、constって書いて自己満足、安心「感」を得たいだけになってるでしょ
いやいや、フルconstの自由があるならAltJSくらい余裕でしょ
つうかconstの実際価値があるっていうのじゃなくて
単にconst、constって書いて自己満足、安心「感」を得たいだけになってるでしょ
201デフォルトの名無しさん (ワッチョイ 8392-+8ye)
2017/05/15(月) 18:39:27.33ID:Z3hdp57V0 マ板っぽい話になってきたな
202デフォルトの名無しさん (ワッチョイ b3d1-Y6YN)
2017/05/15(月) 23:41:39.28ID:rGWruaOX0 ヤフー知恵袋のjavascriptマスターがドヤ顔で公開してるカレンダーのコード読むと、
グローバル変数だらけで非常に見辛いし、グローバル汚染されたコードだった
悪い例として参考になったな。
たまに、参考になる質問と回答が、知恵袋とか2chにあるが、
玉石混交だな、
グローバル変数だらけで非常に見辛いし、グローバル汚染されたコードだった
悪い例として参考になったな。
たまに、参考になる質問と回答が、知恵袋とか2chにあるが、
玉石混交だな、
203デフォルトの名無しさん (ワッチョイ b38c-O3YC)
2017/05/16(火) 00:06:49.67ID:ufkb+DTs0 どれのことかね? JavaScriptマイスターの俺が
修正してあげよう
修正してあげよう
204202 (ワッチョイ b3d1-Y6YN)
2017/05/16(火) 00:25:50.14ID:FdkA0PdW0 >>203
これです。
グローバル変数だらけで、グローバル汚染されているし、
クロージャ使って、モジュールにしろよって思ってしまいます。
非常に読みづらし、解読するのが骨が折れると思われます。
ttp://miwa850125.php.xdomain.jp/programming/content/00001.html
これです。
グローバル変数だらけで、グローバル汚染されているし、
クロージャ使って、モジュールにしろよって思ってしまいます。
非常に読みづらし、解読するのが骨が折れると思われます。
ttp://miwa850125.php.xdomain.jp/programming/content/00001.html
205デフォルトの名無しさん (ワッチョイ b38c-O3YC)
2017/05/16(火) 00:40:25.65ID:ufkb+DTs0206デフォルトの名無しさん (ワッチョイ b38c-O3YC)
2017/05/16(火) 00:47:14.10ID:ufkb+DTs0 × 関数の定義だけ聞いて
○ カレンダーの仕様だけ聞いて
○ カレンダーの仕様だけ聞いて
207デフォルトの名無しさん (ワッチョイ 43c8-SU9n)
2017/05/16(火) 07:16:46.00ID:bc694O2E0 >>204
> グローバル変数だらけで、グローバル汚染されているし、
> クロージャ使って、モジュールにしろよって思ってしまいます。
まあこれも問題なんだけど、それ以上に構成が酷い。というか平べったすぎ。
こいつそもそもサブルーチンすら使ってなくね?
> 非常に読みづらし、解読するのが骨が折れると思われます。
ちなみにこれは違う。平べったいコードは読むのは面倒だが難しくはない。
ただしまともに読む気にならないが。見た瞬間ゴミだと分かるレベルだし。
俺も>>206に同意だな。
そしてみんなそうらしいぞ。まあそりゃそうだが。
http://miwa850125.php.xdomain.jp/notice/content/00012.html
ただ、素人が組んだ500行前後のコードってこうなりがちではあるんだがね。
(というか多分300-500行程度で組めるはず)
> グローバル変数だらけで、グローバル汚染されているし、
> クロージャ使って、モジュールにしろよって思ってしまいます。
まあこれも問題なんだけど、それ以上に構成が酷い。というか平べったすぎ。
こいつそもそもサブルーチンすら使ってなくね?
> 非常に読みづらし、解読するのが骨が折れると思われます。
ちなみにこれは違う。平べったいコードは読むのは面倒だが難しくはない。
ただしまともに読む気にならないが。見た瞬間ゴミだと分かるレベルだし。
俺も>>206に同意だな。
そしてみんなそうらしいぞ。まあそりゃそうだが。
http://miwa850125.php.xdomain.jp/notice/content/00012.html
ただ、素人が組んだ500行前後のコードってこうなりがちではあるんだがね。
(というか多分300-500行程度で組めるはず)
208デフォルトの名無しさん (ワッチョイ 13f5-oVa1)
2017/05/16(火) 10:23:51.85ID:jyI5CijS0 今時githubで管理してない時点でお察しだな。zipでダウンロードしてーとかしんどすぎる。
209202 (ワッチョイ b3d1-Y6YN)
2017/05/16(火) 19:48:46.02ID:FdkA0PdW0 ちなみに、このカレンダーの作者は
javascript歴17年の自称30〜39歳の女性です。
知恵袋で
「javascrit初心者相手にfor文もわからんのかww」
っておらついてます。
多分、プログラム書いて「動いたwww スゲー 自分は天才やんwww」
とかのレベルで止まってしまったと思われる。
勉強しないと、いつまでも初心者レベルから抜け出せいってことだせない教訓になった
javascript歴17年の自称30〜39歳の女性です。
知恵袋で
「javascrit初心者相手にfor文もわからんのかww」
っておらついてます。
多分、プログラム書いて「動いたwww スゲー 自分は天才やんwww」
とかのレベルで止まってしまったと思われる。
勉強しないと、いつまでも初心者レベルから抜け出せいってことだせない教訓になった
210デフォルトの名無しさん (ワッチョイ 43c8-SU9n)
2017/05/16(火) 20:45:52.90ID:bc694O2E0 >>209
ついでに言っておくと、
初心者は「コードが読めないのは汚いからだ」と主張しがちだが、実際はそうじゃない。
初心者が技術的に至らないからというケースがほとんどだ。
とはいえ、実際に駄目なコードは散見されるし、初心者がこれらを区別するのは無理だ。
だからこういう場所で聞いてみるのは一つのやり方だとは思う。
そしておそらくこれが目的だろうからこういう回答になる。
実際に高度に組織化されたコードは、初心者には全く読めないと思う。
逆に、こういった平べったいコード、上から順に一通り動いて終わりですね、
みたいなコードの方が初心者にも読める。
そして「上達するのは『書く』時ではなくて『減らす』時だ」という主張をする奴もいて、
実際「書く」よりも「減らす」方が頭を使うのも事実なので、
君がこのコードに相応しい初心者で上達を望んでいる場合、
このコードを減らして同じ動作を得ること、つまりリファクタリングを薦める。
それをやれば、このコードのどこが駄目なのか具体的に分かるし、いい練習になる。
(はっきり言って全部駄目なんだけどさ)
グローバルが〜ってのは実は大した問題じゃない。
(function(){
})()
でくくってやればすぐ解決するだけの話でしょ。
初心者はそういう文法的なところにばかりこだわるから上達しない。
最も重要なのは構造/構成なんだよ。
ついでに言っておくと、
初心者は「コードが読めないのは汚いからだ」と主張しがちだが、実際はそうじゃない。
初心者が技術的に至らないからというケースがほとんどだ。
とはいえ、実際に駄目なコードは散見されるし、初心者がこれらを区別するのは無理だ。
だからこういう場所で聞いてみるのは一つのやり方だとは思う。
そしておそらくこれが目的だろうからこういう回答になる。
実際に高度に組織化されたコードは、初心者には全く読めないと思う。
逆に、こういった平べったいコード、上から順に一通り動いて終わりですね、
みたいなコードの方が初心者にも読める。
そして「上達するのは『書く』時ではなくて『減らす』時だ」という主張をする奴もいて、
実際「書く」よりも「減らす」方が頭を使うのも事実なので、
君がこのコードに相応しい初心者で上達を望んでいる場合、
このコードを減らして同じ動作を得ること、つまりリファクタリングを薦める。
それをやれば、このコードのどこが駄目なのか具体的に分かるし、いい練習になる。
(はっきり言って全部駄目なんだけどさ)
グローバルが〜ってのは実は大した問題じゃない。
(function(){
})()
でくくってやればすぐ解決するだけの話でしょ。
初心者はそういう文法的なところにばかりこだわるから上達しない。
最も重要なのは構造/構成なんだよ。
211デフォルトの名無しさん (ワッチョイ 43c8-SU9n)
2017/05/16(火) 20:46:28.78ID:bc694O2E0 なお、
> 「javascrit初心者相手にfor文もわからんのかww」
> っておらついてます。
これについては初心者の方が悪い。
for文なんてどの言語でも基本中の基本だし、
そこら辺は最低限押さえてから質問しないと駄目だ。
初心者だからって何でも許されると思っているのはただの傲慢だ。死ねでいい。
> 勉強しないと、いつまでも初心者レベルから抜け出せいってことだせない教訓になった
これも違う。
というか多分、ソフトウェア産業は未だに「上達への王道」を開発出来ていない。
つまり、今現在の方法で「勉強」すれば上達するわけではないということ。
ここら辺は学校教育の物理や数学で
人類が数千年掛けて築き上げた叡智をわずか数年でインストールしてしまうのとは次元が違う。
ソフトウェアは高々100年程度の歴史しかないし、教育方法もよく分かってないんだよ。
だから繰り返すが、今現在溢れている本を仮に全部読んでみても、達人にはなれないよ。
関数型とか言っているのも、実はまだどうすべきか分かってない証拠でもあるしね。
数学や物理は、学校でやってるのが完全に王道だと確定してる。あれとは違うんだよ。
そして、いくら「勉強」しても、駄目な奴は駄目なまま。
ただそれをどうやって改善すればいいのか分かってないんだ。
だからセンター試験みたいな物を作ることが出来ない。
そしてその人が「勉強してない」って事にも(直接的には)ならない。
(実際は勉強してない確率が90%以上だし、
実際書くなり本読むなりすれば『大半の人は』自然と上達するのも事実だけどね)
> 「javascrit初心者相手にfor文もわからんのかww」
> っておらついてます。
これについては初心者の方が悪い。
for文なんてどの言語でも基本中の基本だし、
そこら辺は最低限押さえてから質問しないと駄目だ。
初心者だからって何でも許されると思っているのはただの傲慢だ。死ねでいい。
> 勉強しないと、いつまでも初心者レベルから抜け出せいってことだせない教訓になった
これも違う。
というか多分、ソフトウェア産業は未だに「上達への王道」を開発出来ていない。
つまり、今現在の方法で「勉強」すれば上達するわけではないということ。
ここら辺は学校教育の物理や数学で
人類が数千年掛けて築き上げた叡智をわずか数年でインストールしてしまうのとは次元が違う。
ソフトウェアは高々100年程度の歴史しかないし、教育方法もよく分かってないんだよ。
だから繰り返すが、今現在溢れている本を仮に全部読んでみても、達人にはなれないよ。
関数型とか言っているのも、実はまだどうすべきか分かってない証拠でもあるしね。
数学や物理は、学校でやってるのが完全に王道だと確定してる。あれとは違うんだよ。
そして、いくら「勉強」しても、駄目な奴は駄目なまま。
ただそれをどうやって改善すればいいのか分かってないんだ。
だからセンター試験みたいな物を作ることが出来ない。
そしてその人が「勉強してない」って事にも(直接的には)ならない。
(実際は勉強してない確率が90%以上だし、
実際書くなり本読むなりすれば『大半の人は』自然と上達するのも事実だけどね)
212デフォルトの名無しさん (ワッチョイ 8392-+8ye)
2017/05/16(火) 20:50:54.00ID:28fcRnPx0 > ソフトウェア産業
プログラミングはナチュラルに趣味グラマーがハブられることが多くて
いっぱいかなしい
プログラミングはナチュラルに趣味グラマーがハブられることが多くて
いっぱいかなしい
213デフォルトの名無しさん (ワッチョイ 2370-NgNF)
2017/05/16(火) 22:27:17.83ID:UlJ2aQ8H0 それは思い込み、実際は逆だよ
趣味でやってる人達は自由、好きにやればいいだけの優位者
職業としてやってる人達の方にハンデがあるんだから尊重してもらわないと困る
趣味でやってる人達は自由、好きにやればいいだけの優位者
職業としてやってる人達の方にハンデがあるんだから尊重してもらわないと困る
214デフォルトの名無しさん (ワッチョイ 43c8-SU9n)
2017/05/16(火) 22:45:21.09ID:bc694O2E0 >>212
前それ別スレで話題になっていたが、
個人的には「天然」の方が「養殖」よりも上質だと思っているよ。
ただ毎日毎日コードを眺めているのと、せいぜい月に2〜3日では場数が違うわけでさ。
とはいえ場数をこなせば上達するわけでもないというのは事実なのだが、
個人的には奇妙だとも思っている。
普通は場数をこなせば次第に上達するものではあるからね。
いずれにしても、「勉強しよう」と思うのは良いことだけど、
いわゆる「お勉強」で単純に上達するというものでもないんだ。まだ今は。
さてもう一度見直して気づいた。コードを書き慣れていない奴の特徴は、
・無駄な改行が多い
・空行が多い
これは多分共通だし、初心者でも見て分かるはず。
つかね、10,000行とかのソースだとただでさえスクロールしまくりなので、
1画面に出来るだけ沢山詰め込みたいという欲求が発生し、
空行とか無駄改行は全くやらなくなってくるんだよ。ウザイから。
これは割と共通の癖だと思う。
Pythonerが括弧を嫌うのも閉じ括弧だけの行がウザイからだし。
詰めて書いても今時色分けされるから見間違えることもないし。
(ただもちろん中には例外もいて、どんだけスクロールしても問題ないらしい奴もいる)
見た目、せいぜい50行程度しかまともに書けない奴が、
頑張って2,000行書きました、えっへん!みたいなコードだね。
ただ、これって誰しもが通る道だから、これ自体が悪いとは思わないけど。
なおコード自体は昔の定義の「コピペプログラマ」がこんな感じ。
実は結構いたりすると思うよ。
前それ別スレで話題になっていたが、
個人的には「天然」の方が「養殖」よりも上質だと思っているよ。
ただ毎日毎日コードを眺めているのと、せいぜい月に2〜3日では場数が違うわけでさ。
とはいえ場数をこなせば上達するわけでもないというのは事実なのだが、
個人的には奇妙だとも思っている。
普通は場数をこなせば次第に上達するものではあるからね。
いずれにしても、「勉強しよう」と思うのは良いことだけど、
いわゆる「お勉強」で単純に上達するというものでもないんだ。まだ今は。
さてもう一度見直して気づいた。コードを書き慣れていない奴の特徴は、
・無駄な改行が多い
・空行が多い
これは多分共通だし、初心者でも見て分かるはず。
つかね、10,000行とかのソースだとただでさえスクロールしまくりなので、
1画面に出来るだけ沢山詰め込みたいという欲求が発生し、
空行とか無駄改行は全くやらなくなってくるんだよ。ウザイから。
これは割と共通の癖だと思う。
Pythonerが括弧を嫌うのも閉じ括弧だけの行がウザイからだし。
詰めて書いても今時色分けされるから見間違えることもないし。
(ただもちろん中には例外もいて、どんだけスクロールしても問題ないらしい奴もいる)
見た目、せいぜい50行程度しかまともに書けない奴が、
頑張って2,000行書きました、えっへん!みたいなコードだね。
ただ、これって誰しもが通る道だから、これ自体が悪いとは思わないけど。
なおコード自体は昔の定義の「コピペプログラマ」がこんな感じ。
実は結構いたりすると思うよ。
215デフォルトの名無しさん (ワッチョイ 43c8-SU9n)
2017/05/16(火) 22:52:40.26ID:bc694O2E0 なんつうかね、
長文に全く慣れてない奴ってこんな風に、いちいち改行したりするでしょ。
それって長文に慣れてるとものすごくウザイでしょ。
余計に読みにくいし。(多分斜め読み出来なくなるから)
だけどコードに慣れてない奴って、やけに改行や空行入れたがるんだよ。
それは、改行をウザイと思うほどコードを読んだことがないってこと。
つまり、初心者だって事だね。
長文に全く慣れてない奴ってこんな風に、いちいち改行したりするでしょ。
それって長文に慣れてるとものすごくウザイでしょ。
余計に読みにくいし。(多分斜め読み出来なくなるから)
だけどコードに慣れてない奴って、やけに改行や空行入れたがるんだよ。
それは、改行をウザイと思うほどコードを読んだことがないってこと。
つまり、初心者だって事だね。
216デフォルトの名無しさん (ワッチョイ 8392-+8ye)
2017/05/16(火) 23:30:21.74ID:28fcRnPx0 「初心者プログラマーにありがちなこと」ってスレタイでプログラマースレに立てるべき内容になってきてるぞ
すぐ「プログラマー」の話にズレていくのは職業プログラマーの悪い癖
すぐ「プログラマー」の話にズレていくのは職業プログラマーの悪い癖
217デフォルトの名無しさん (ワッチョイ 43c8-SU9n)
2017/05/17(水) 00:00:46.55ID:kS+euEi/0 まあその通りだが、あのコードから技術的にってのは無いからね。
ただ、一般的にあの規模のコードだと、割と平べったくなりがちなのも事実。
これ自体は不思議ではないんだよ。
ちょうど一つのクラスとして切り出すか?というサイズだから。
で、おそらくお互いが相手をヘボだと見なし、
無駄に争っていたのだろうというのも想像に難くない。
先に言ったように、あのコードをさらに大規模化する場合、
functionで囲ってクラスに変える。
そうするとグローバル→インスタンス変数になるわけで、これ自体は問題ない。
だから「グローバルが〜」ってのも初心者にありがちな間違った指摘で、
あの規模のコードならあれで良いんだよ。
結局、文法的なことしか見えない程度のくせに
コードの善し悪しなんて議論するからアレな事になる。
あのコードは不思議なコードではないんだ。
良いコードでもないし、上手いコードでもないけど。
でも誰しもが通る道だよ。
ただ、一般的にあの規模のコードだと、割と平べったくなりがちなのも事実。
これ自体は不思議ではないんだよ。
ちょうど一つのクラスとして切り出すか?というサイズだから。
で、おそらくお互いが相手をヘボだと見なし、
無駄に争っていたのだろうというのも想像に難くない。
先に言ったように、あのコードをさらに大規模化する場合、
functionで囲ってクラスに変える。
そうするとグローバル→インスタンス変数になるわけで、これ自体は問題ない。
だから「グローバルが〜」ってのも初心者にありがちな間違った指摘で、
あの規模のコードならあれで良いんだよ。
結局、文法的なことしか見えない程度のくせに
コードの善し悪しなんて議論するからアレな事になる。
あのコードは不思議なコードではないんだ。
良いコードでもないし、上手いコードでもないけど。
でも誰しもが通る道だよ。
218デフォルトの名無しさん (ワッチョイ b3d1-Y6YN)
2017/05/17(水) 00:11:36.09ID:r9YOxAGU0 「技術的ってか、この辺はセンスの問題だな」ってさ、仕事しててもよく言われる
装置のログの解析とかもそうだけど
なんで1時間とかそこらでログの解析できんだ?
なんで、そんなにコーティング早いんだ?
センスって言われると、習得しずらいんだよな。
まるで職人技だよな
装置のログの解析とかもそうだけど
なんで1時間とかそこらでログの解析できんだ?
なんで、そんなにコーティング早いんだ?
センスって言われると、習得しずらいんだよな。
まるで職人技だよな
219デフォルトの名無しさん (ワッチョイ 9321-n/2N)
2017/05/17(水) 00:43:36.95ID:aIm9uZNt0 センス関係ない
「とりあえず動くコード」で満足するか、より良い品質にこだわるかの考え方の違いだ
「とりあえず動くコード」で満足するか、より良い品質にこだわるかの考え方の違いだ
220デフォルトの名無しさん (ワッチョイ 43c8-SU9n)
2017/05/17(水) 00:45:04.71ID:kS+euEi/0 >>218
> 仕事しててもよく言われる
つまりセンスが無い方の人なんですね乙
ただまあ「センス」って言っているのは教えようがないからだよ。
それは俺はまだ教育技術が未発達だからだと思っている。
数学とかのセンスって、
「ところでこれをどうやって思いつくんだ?」
であって、明らかに東大とかよりもはるか上のレベルでしょ。
今のプログラミングが要求している「センス」って、もっと断然低いところでしかない。
それでIDEやインテリセンスで効率が上がる(キリッとか間抜けなこといっているわけでさ。
「なるほど確かにこの構造にすれば恐ろしく簡単に実装出来るが、
ところでどうやってこれを思いついたんだ?」では全然無いよね。
フェルマーの最終定理(x^n+y^n=z^n)とか、問題の意味は分かるがどうしろと?だろ。
あれを「センス」と言うべきなんだよ本来は。
> なんで1時間とかそこらでログの解析できんだ?
当たりを付けているからだよ。
映画やアニメでハッカーがでてきたら「ほらビンゴだ!」ってよくやってるだろ。
> なんで、そんなにコーティング早いんだ?
コーディングに速さは必要ない。
最終的にデバッグ終了までの時間が勝負で、実際デバッグの方が遙かに時間かかるでしょ。
ただまあ、あのコードはいずれにしても不思議なコードではないから、
見た瞬間、ああ、このレベルですね、ってのは順当に分かるようになるはずだし、
そこまでの上達にはセンスは必要ないはずだから、
君が今やるべき事は、とにかく何でもいいから書くことだよ。
> 仕事しててもよく言われる
つまりセンスが無い方の人なんですね乙
ただまあ「センス」って言っているのは教えようがないからだよ。
それは俺はまだ教育技術が未発達だからだと思っている。
数学とかのセンスって、
「ところでこれをどうやって思いつくんだ?」
であって、明らかに東大とかよりもはるか上のレベルでしょ。
今のプログラミングが要求している「センス」って、もっと断然低いところでしかない。
それでIDEやインテリセンスで効率が上がる(キリッとか間抜けなこといっているわけでさ。
「なるほど確かにこの構造にすれば恐ろしく簡単に実装出来るが、
ところでどうやってこれを思いついたんだ?」では全然無いよね。
フェルマーの最終定理(x^n+y^n=z^n)とか、問題の意味は分かるがどうしろと?だろ。
あれを「センス」と言うべきなんだよ本来は。
> なんで1時間とかそこらでログの解析できんだ?
当たりを付けているからだよ。
映画やアニメでハッカーがでてきたら「ほらビンゴだ!」ってよくやってるだろ。
> なんで、そんなにコーティング早いんだ?
コーディングに速さは必要ない。
最終的にデバッグ終了までの時間が勝負で、実際デバッグの方が遙かに時間かかるでしょ。
ただまあ、あのコードはいずれにしても不思議なコードではないから、
見た瞬間、ああ、このレベルですね、ってのは順当に分かるようになるはずだし、
そこまでの上達にはセンスは必要ないはずだから、
君が今やるべき事は、とにかく何でもいいから書くことだよ。
221デフォルトの名無しさん (ワッチョイ 43c8-SU9n)
2017/05/17(水) 00:56:37.57ID:kS+euEi/0 >>219
これはあるね。よく言われる「職人気質」って奴だよ。
プログラミングは自己完結して己の美学を目指せる奴しか上達しない。
これは一般には「職人気質」と言われる。
おそらく職人も同様にこの性格じゃないと上達しないため、
結果的に生き残っている職人はこのタイプが多くなるのだと思う。
だからそうじゃない奴は、向いてないから止めた方がいい。
あのコードは、まさに
> 「とりあえず動くコード」で満足する
タイプが書くコードなんだよ。だから悪いと言うほど悪いコードでもない。
なんつーか、手堅く動くだろうが、動くだけのコードですねってとこ。
しかしカレンダーなんて今更仕様変更はないし、保守性なんてどうでもいい。
自分で書き直すのもかったるいし、俺的には渡されたら使うかは迷うところだね。
これはあるね。よく言われる「職人気質」って奴だよ。
プログラミングは自己完結して己の美学を目指せる奴しか上達しない。
これは一般には「職人気質」と言われる。
おそらく職人も同様にこの性格じゃないと上達しないため、
結果的に生き残っている職人はこのタイプが多くなるのだと思う。
だからそうじゃない奴は、向いてないから止めた方がいい。
あのコードは、まさに
> 「とりあえず動くコード」で満足する
タイプが書くコードなんだよ。だから悪いと言うほど悪いコードでもない。
なんつーか、手堅く動くだろうが、動くだけのコードですねってとこ。
しかしカレンダーなんて今更仕様変更はないし、保守性なんてどうでもいい。
自分で書き直すのもかったるいし、俺的には渡されたら使うかは迷うところだね。
222デフォルトの名無しさん (ワッチョイ 43c8-SU9n)
2017/05/17(水) 01:17:15.04ID:kS+euEi/0 ところでMapだが、
> for (var [key, value] of myMap.entries()) {
> console.log(key + " = " + value);
> }
> https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Map
これって分割代入で、chrome49〜ですってオチあり?
Mapはchrome38からになっているし、entries()もそうなのだけど。
> for (var [key, value] of myMap.entries()) {
> console.log(key + " = " + value);
> }
> https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Map
これって分割代入で、chrome49〜ですってオチあり?
Mapはchrome38からになっているし、entries()もそうなのだけど。
223デフォルトの名無しさん (ワッチョイ b38c-O3YC)
2017/05/17(水) 01:34:13.73ID:y0sg8W2t0 >>222
babelを使えば古いブラウザでも動くのではないか?
babelを使えば古いブラウザでも動くのではないか?
224デフォルトの名無しさん (ワッチョイ 43c8-SU9n)
2017/05/17(水) 01:44:59.69ID:kS+euEi/0 いや無駄に対応バージョン上げたくないんだ。
やっぱそうなんだよな?
今回はkeys()で1箇所書き直せばいいだけだからそうするよ。サンクス。
やっぱそうなんだよな?
今回はkeys()で1箇所書き直せばいいだけだからそうするよ。サンクス。
225デフォルトの名無しさん (ワッチョイ 2370-NgNF)
2017/05/17(水) 07:29:14.42ID:L5+4x8hM0 Chromeのバージョンを気にする、しかも10も前とか普通じゃないな
226デフォルトの名無しさん (ワッチョイ f7d1-kLyQ)
2017/05/18(木) 23:57:01.79ID:QkFLciDt0 オレがいままで作ったjavascriptのアプリケーション
・画像うuplodar (2012年から公開してる今年で5年目)
→javascript,html5,mysql,phpで作成
・単語帳(非公開、TOECI勉強用に使った自分専用の単語帳)
→複数のtxtに書いたjsonデータの文字列を読みんで表にして表示する
今のとこ、とりあえず動くレベル→自分で読みづらいとこと修正と改善
を延々とやってる。
ってか、仕事と英語の勉強が忙しいから、javascript勉強してる暇があまりない
購入して積ん読になってる、日経ソフトウェアのjavascript特集を読みたいがいまいち暇がない
・画像うuplodar (2012年から公開してる今年で5年目)
→javascript,html5,mysql,phpで作成
・単語帳(非公開、TOECI勉強用に使った自分専用の単語帳)
→複数のtxtに書いたjsonデータの文字列を読みんで表にして表示する
今のとこ、とりあえず動くレベル→自分で読みづらいとこと修正と改善
を延々とやってる。
ってか、仕事と英語の勉強が忙しいから、javascript勉強してる暇があまりない
購入して積ん読になってる、日経ソフトウェアのjavascript特集を読みたいがいまいち暇がない
227デフォルトの名無しさん (ワッチョイ 0ff5-sZ5x)
2017/05/19(金) 00:58:06.06ID:+ix37Tej0 むしろchromeの古いバージョン使う方法ってあるの?ネットが使えない環境とか?
228デフォルトの名無しさん (ワッチョイ cb7b-kvD5)
2017/05/19(金) 21:19:25.76ID:PWVc802d0 ReduxはReact専用じゃないというけど、React以外で使いやすいのはどのフレームワークかな?
229デフォルトの名無しさん (ワンミングク MM3a-lo86)
2017/05/20(土) 00:04:22.78ID:T9Vl1Go7M >>227
サブの動作確認用スマホとか古いままだけどなぁ
サブの動作確認用スマホとか古いままだけどなぁ
230デフォルトの名無しさん (ワッチョイ fff5-sZ5x)
2017/05/20(土) 04:04:11.15ID:Q+8+XcCz0231デフォルトの名無しさん (ワッチョイ cb7b-kvD5)
2017/05/20(土) 08:41:00.64ID:ZTnw5ZtI0 その「subscribeするだけ」の具体的なやりかたを知らないんで、そういうライブラリや資料が
そろっていたりして使いやすいものがあるか探してる。
Reactならreact-redux入れてその通りにやればよかったんだけど。
>>230は何のフレームワークを使ってどんなふうにやったことがあるの?
そろっていたりして使いやすいものがあるか探してる。
Reactならreact-redux入れてその通りにやればよかったんだけど。
>>230は何のフレームワークを使ってどんなふうにやったことがあるの?
232デフォルトの名無しさん (ワッチョイ 9ec8-icqO)
2017/05/20(土) 11:00:51.79ID:Vxiesmpy0 phinaとかpixiとかenchantとか色々あるけど結局ゲーム製作用ライブラリとしてはどれがいいの?
233デフォルトの名無しさん (スププ Sdea-OyqH)
2017/05/20(土) 11:43:08.14ID:2QFlCqZ1d それらはゲームにも使えるというだけの汎用描画フレームワークだから
本当に描画部分から音周りまで完璧に揃っているフレームワークは
例えばノベル専用みたいな汎用性の無いものしかない。
ガチで作りたいならやっぱりUnity等のゲームエンジンからの書き出ししかない。
本当に描画部分から音周りまで完璧に揃っているフレームワークは
例えばノベル専用みたいな汎用性の無いものしかない。
ガチで作りたいならやっぱりUnity等のゲームエンジンからの書き出ししかない。
234デフォルトの名無しさん (ワッチョイ fff5-sZ5x)
2017/05/20(土) 17:11:04.67ID:Q+8+XcCz0235デフォルトの名無しさん (ワッチョイ fff5-sZ5x)
2017/05/20(土) 17:16:56.10ID:Q+8+XcCz0 >>231
ごめんreactからしか使ったことはないけどchrome-extension作るのに使ってて、react以外からdispatch投げたり、イベント処理する必要があるからよく使う。
なんつーかただのjsonの塊だよね結局。typescriptから使ってるから問題ないけど、素のjsから使うとなるとあの巨大なjsonの塊をよくいじれるよなーと思う。
ごめんreactからしか使ったことはないけどchrome-extension作るのに使ってて、react以外からdispatch投げたり、イベント処理する必要があるからよく使う。
なんつーかただのjsonの塊だよね結局。typescriptから使ってるから問題ないけど、素のjsから使うとなるとあの巨大なjsonの塊をよくいじれるよなーと思う。
236デフォルトの名無しさん (ワッチョイ cb7b-kvD5)
2017/05/20(土) 22:18:55.23ID:ZTnw5ZtI0 なるほど、ありがとう
237デフォルトの名無しさん (ワッチョイ 9f21-UzNQ)
2017/05/21(日) 16:49:46.53ID:BQHBWsZS0 要素数が1か1以上かわからない(0ではない)配列をsortするとき、特に要素数を
数えて条件分岐しなくてもそのままsort関数適用させてもいいですかね?
何かパフォーマンス的に問題出たりしますか?
数えて条件分岐しなくてもそのままsort関数適用させてもいいですかね?
何かパフォーマンス的に問題出たりしますか?
238デフォルトの名無しさん (ワッチョイ ca88-aHqd)
2017/05/21(日) 18:45:14.37ID:Qcnnq4EA0 elmはいいぞー
239デフォルトの名無しさん (ワッチョイ 4ec8-KLhJ)
2017/05/21(日) 21:42:26.20ID:feqlkx7U0 >>237
問題は出ますん
問題は出ますん
240デフォルトの名無しさん (ワッチョイ 678c-bwHs)
2017/05/21(日) 22:26:43.45ID:8o9mWviY0241デフォルトの名無しさん (ワンミングク MM3a-lo86)
2017/05/21(日) 22:55:20.58ID:fcCJNl/UM そのレベルで効率化ガーは本当に間抜けな話だとおもうよ
何も変わらんさ考えるだけ時間の無駄でただのオナニー行為
最近流行のHTML5でのパーティクル表現なんて毎秒数百オブジェクト新たに生成して一定時間生存させ消していく
その管理の配列がどんどんインデックス追加でオブジェクトがあるかないかのif判定を毎秒数万、数十万とかやってるプログラムとかよく見る
馬鹿げた設計だとおもってもそれで普通に動いてるから笑える
今はそんな時代だよ
何も変わらんさ考えるだけ時間の無駄でただのオナニー行為
最近流行のHTML5でのパーティクル表現なんて毎秒数百オブジェクト新たに生成して一定時間生存させ消していく
その管理の配列がどんどんインデックス追加でオブジェクトがあるかないかのif判定を毎秒数万、数十万とかやってるプログラムとかよく見る
馬鹿げた設計だとおもってもそれで普通に動いてるから笑える
今はそんな時代だよ
242デフォルトの名無しさん (ワッチョイ 9f21-UzNQ)
2017/05/21(日) 23:52:11.78ID:BQHBWsZS0 皆さんありがとうございます
上司が割と効率にうるさいので怒られるのが嫌で気になった次第です
問題ないみたいなのでこのままいきます
上司が割と効率にうるさいので怒られるのが嫌で気になった次第です
問題ないみたいなのでこのままいきます
243デフォルトの名無しさん (ワンミングク MM3a-lo86)
2017/05/22(月) 00:04:03.94ID:FRIGOkgNM >>242
効率化というより、ソースのわかりやすさ、管理のしやすさを考えればいいよ
判定文を入れることで皆がわかりやすくなるなら入れれば良いし
今度どう使われるかはっきりわからないモジュールならエラー処理をしっかりいれるとか
効率化というより、ソースのわかりやすさ、管理のしやすさを考えればいいよ
判定文を入れることで皆がわかりやすくなるなら入れれば良いし
今度どう使われるかはっきりわからないモジュールならエラー処理をしっかりいれるとか
244あ (スププ Sdea-qU+J)
2017/05/22(月) 00:15:50.44ID:KxRThp41d これで効率云々言われるなら、保守の効率引き合いに出して揉めたほうが良いと思う。
245デフォルトの名無しさん (ワッチョイ 0bc8-kvD5)
2017/05/22(月) 01:16:10.94ID:jp4wTISD0 つかその上司もここで怒る事はないだろ。
新人なりに思いついたから聞いてみただけだろ。
てか上司に聞けよ。
新人なりに思いついたから聞いてみただけだろ。
てか上司に聞けよ。
■ このスレッドは過去ログ倉庫に格納されています
