元スレ+ JavaScript & jQuery 質問用スレッド vol.7 +
JavaScript覧 / PC版 /みんなの評価 :
801 = :
きたきたw
802 = :
>>800と>>801が同一人物(自作自演)ってのは見抜いた
803 = :
const縛りすると結局関数型チックに書くことになるじゃん?
だって
let {a,b,c} = obj
のときもしa,cに変更が無ければ
const {a,c} = obj
let {b} = obj
とするの?
それでやっぱりaは書き換えるとなったらまた変えるの?ってことになる
そういうちぐはぐ一切なくそうと思えば結局変数は使い切りの関数型チックに書くことになる
自分は バカバカしい宗教まがいなことだと思うけどね
804 = :
っていうか単純にルールを固く捉え過ぎているだけじゃね?
Googleもそういう形を想定してはないと思うんだけど
言ってて流石におかしいと思わないのかね?
まああえて言えば頑なに歩道を走らない自転車的な感じだな
805 = :
>>803
関数型チックにするのはすごく良いプログラミング習慣である
というのはおいといて、おまえ大きな勘違いしてるなぁ。
> let {a,b,c} = obj
> のときもしa,cに変更が無ければ
普通は、abcを変更することがないから
const {a,b,c} = obj でいいんだよ
で、なに? bを変更したくなったら?
そんなもん、 const bb = b + 1 ってすりゃいいだけだろ
何がチグハグなんだ?
おまえがやり方知らないから「うわー、letにするしか思いつかねー」
って言ってるだけじゃんか。本当に情けない
806 = :
あっはっは、自分が出した例を逆に利用されて
bを書き換えない一番簡単な例をだされて
こりゃ屈辱だろうなぁ。関数型とか言うまでに
こんなのも思いつかないようなやつだとはな
807 = :
>>802
自演を見誤るようではまだまだだな
808 = :
ほらきたw
809 = :
↑想定内
810 = :
一人で何やってんだ?
811 = :
以前constの仕様見てこれはすべき!と思ったがIE10以下アウトだったのでやめたことがある
まだいるからな
今のところ命名と名前空間で十分かな
813 = :
変数に代入した値を書き換えないっていうのは方針だから
別にvarであっても書き換えなければ良いだけ
constが使えないのは諦める原因にはならないよ。
varを使って書き換えなければそれで十分。
constは単なるチェック機構にすぎない。
力さえあればIE10以下でも、constを使うのと同じような
コードを書くことはできる。ようはconstの何が
素晴らしいかを理解してそれを実現できるか
814 = :
function(a){
a=a+ホゲ;
return a;
}
みたいに、aを上書きしない方がいい?
815 = :
>>814
しない方がいい。
更に言うならば、引数はもっと変更しないほうが良い。
816 = :
関数のargumentsを書き換えようとしたとき or 同じ関数内で同じarguments名を変数名で使おうとしたときに
エラー吐くような宣言てなかったっけ?
function sum(a){
const a=a+10;
return a;
}
console.log(sum(10));}
817 = :
途中で送信しちゃった
>同じ関数内で同じarguments名を変数名で使おうとしたときに
は816で防げそうだけど、
>argumentsを書き換えようとしたとき
はそもそもargumentsは>>815の言うように変更しない、というのを心の中で決めておくってこと?
818 = :
>>817
何を心配しているのか知らないけど、
特に心配することなんてなにもないよ。
推奨されている方法があるなら、理解できないうちは
それに素直に従っているのが良い。
819 = :
>>818
例えば
http://jsfiddle.net/k9ganf4u/
同じ関数内でzという変数名を使いたいのでブロックに入れました
が、関数の引数名にzを使っていた場合
http://jsfiddle.net/k9ganf4u/1/
Uncaught ReferenceError: z is not definedというエラー文になりました
SyntaxErrorになってほしいのですが無理でしょうか
820 = :
>>819
それだったらESLintを使えばできるよ。
http://goo.gl/ad3hx8
822 = :
結局句点で自演バレしてて哂う>>797
823 = :
イベントを登録するときに度々疑問に思うのですが
var obj={};
$().click(function(){
var hoge=obj;
console.log(hoge);
});
こういう感じでclickのイベントを定義するときに
外から何かしらの値を代入する(したい)ときがよくあります
ですが何かモヤモヤするのですがそれで良いのでしょうか?
824 = :
>>824
言ったそばから句点なしで自演を隠そうとしても無駄w
825 = :
>>823の間違い
826 = :
>>823
最初から設計とスタイルがカチッと決まっていない場合は
そういうのを受け入れないと開発が進まない
827 = :
>>823
その書き方に何の問題もない。
828 = :
>>827
問題ないんですね。ありがとうございました。
829 = :
>>812
んなことしなくても注意して書いてればいいだけ
ただそれも1つの方法だから各々好きにすればいいのさ
830 = :
constがなくても注意して書けばconstを
使ったのと同じように良い書き方はできる
ようは注意するかどうか
注意していればミスなどしない
831 = :
俺としてはconst使おうが使うまいが再代入禁止が
広まってくれればどっちでもいいよ
832 = :
言っておくけどね、ただの『再代入禁止』は手枷足枷を付けるだけの行為で最悪だぞ?
あくまで『再代入する必要がない設計』に価値があるんだぞ?
関数型言語は言語仕様やAPIや環境がそれ向けに整っているから効果があるんだぞ?
JSの場合、まずその環境を整える必要がある
だから単なるスタイルの話として語るのは無理がある
例えばイベント制御にjQuery使うの辞めてRxJSにしようとか、
そういう具体的な話でなく広く推奨することはできない
833 = :
jQueryをちゃんと使って書けば普通に再代入する必要ないやん?
834 = :
まずその環境を整える必要があるとか言うが
単に関数型で書きやすくするライブラリである
jQueryとlodashを導入すれば良い
835 = :
JavaScriptで学ぶ関数型プログラミング
http://www.oreilly.co.jp/books/9784873116600/
JavaScript関数型プログラミング 複雑性を抑える発想と実践法を学ぶ
http://book.impress.co.jp/books/1115101137
836 = :
jQueryはモナドだ とかいうブログあるけどさっぱり分からん
http://blog.anatoo.jp/entry/20100305/1267801847
jQueryは関数型言語っぽいってことなんだろうけど
モナドってなんなんや?
837 = :
>>823
こういう場合objを引数で渡すのは冗長かな?
$().click(function(obj){
その必要ないのはわかるが若干安全なのと
この関数はこの変数使ってるとすぐわかるので
長くなってくると特に
838 = :
> こういう場合objを引数で渡すのは冗長かな?
冗長だね
なぜならクロージャーっていうのは
そういう場合に引数で渡さなくて良いように
作られているから
クロージャーの「機能」はうまく使うべきだし
「機能」を捨ててまで冗長化する意味がない
839 = :
>>836 あえて悪い言い方で言うw
要するに再代入を無くそうという理念でありクロージャとか論外な関数型言語でも
結局値を保持して再利用するということが一切できないとまともなプログラミングなんて不可能だから
関数型のメンツをギリギリ保った状態でそれを出来るようにするための苦肉の策
つまり、モナド=関数型副作用w
840 = :
>>837
多言語やってるとわかるが値渡しで
渡した値は関数内でどうしようが勝手、元の値には影響ないよというやつだな
841 = :
>>829-830
注意してバグが全部防げるなら苦労は無い
842 = :
そもそも再代入しない設計になってるんなら
再宣言はletだって防げるんだしconstに拘る必要なくね
つうかどうせ仮にconstで再代入で引っ掛かったとしても
letに変えるか別の変数増やすだけでしょ
それが最初からletだったら本当にまずかったって場合は年に1回もないよ絶対
844 = :
>>841
そりゃそうだ
だから>>730のような1文字Shift押すか否かの違いはどうなの、って話
845 = :
>>842
> そもそも再代入しない設計になってるんなら
> 再宣言はletだって防げるんだし
letで防げるのは再宣言であって
再代入ではないですよね?
自分で書いた言葉理解してますか?
846 = :
constベース気になってたので便乗で質問します
どうしてもconstを使えない場合はletで
というのを初心者サイトで見たのですが
そういう場合というのは,forのvar i=0みたいなところでしょうか?
847 = :
>>846
いやそうでもない
ぶっちゃけ今はfor(let i = 0; i < 10; i++) みたいな
iを+1し続けていくようなコードは書かない
大抵inやofを使う。この場合constでよい
指定した回数ループするってことがまず少ないんだが
その場合は [...Array(3).keys()] のような書き方で
配列を作って配列の数だけforEachすることで実現できる
といってもこの書き方は可読性が悪いのでlodashなどを使うのが良い
_.range(10).forEach(i => console.log(i)) みたいな感じだな
848 = :
なるほど参考にします >>847
849 = :
こっちの書き方のほうが元のfor(var i =0~に
似ていて分かりやすかったかな?
for(const i in _.range(10)) {
console.log(i)
}
もしくは
for(const i in [...Array(10).keys()]) {
console.log(i)
}
850 = :
>>845
再宣言ならまだしも再代入だけを防げて本当に嬉しいケースって滅多に無いだろって意味だろ
文盲か?
類似してるかもしれないスレッド
- + JavaScript & jQuery 質問用スレッド vol.7 + (701) - [100%] - 2022/12/19 17:15
- + JavaScript & jQuery 質問用スレッド vol.8 + (1001) - [98%] - 2019/2/9 14:00
- + JavaScript & jQuery 質問用スレッド vol.6 + (980) - [98%] - 2016/11/20 14:31
- + JavaScript & jQuery 質問用スレッド vol.5 + (993) - [98%] - 2016/6/11 14:30
- + JavaScript の質問用スレッド vol.76 + (1001) - [72%] - 2010/3/10 4:02
- + JavaScript の質問用スレッド vol.87 + (1001) - [72%] - 2011/6/21 6:33
- + JavaScript の質問用スレッド vol.78 + (1001) - [72%] - 2010/6/25 3:53
- + JavaScript の質問用スレッド vol.79 + (1001) - [72%] - 2010/9/11 6:50
- + JavaScript の質問用スレッド vol.77 + (1001) - [72%] - 2010/5/8 19:06
- + JavaScript の質問用スレッド vol.97 + (1001) - [72%] - 2012/3/1 3:31
- + JavaScript の質問用スレッド vol.74 + (1001) - [72%] - 2009/12/1 6:08 ○
- + JavaScript の質問用スレッド vol.75 + (1001) - [72%] - 2010/1/23 1:07 ○
トップメニューへ / →のくす牧場書庫について