JavaScript を自ら学ぶ人のための質問スレッドです。
次スレは>>950が(本スレで改善案があれば考慮して)立ててください
■規則/推奨ルール
・メール欄を空欄にし、名前にレス番を入れることを強く推奨(なりすまし防止)
・質問内容は具体的に。言葉だけでなく、出来る限り再現性を確認したサンプルコードの掲示。
・質問テンプレートの利用推奨。
・質問への「答え」だけでなく「意見」を出しても良い。
■禁止行為
・丸投げ質問
・迷惑スクリプトの質問
・オレオレ用語の使用(一般的な用語を使用する事)
・煽り、批判等の他人を不快にさせる行為(批判の代わりに「AよりBが良い」のような代案を出す事)
■質問テンプレート
【環境】OS, ブラウザをバージョンと共に記入してください。
【条件】期待する回答の条件を書いてください。
【何をしたのか】何をしたら問題の現象が発生するのか。再現手順を具体的に書いてください。
【エラーメッセージ】エラーメッセージがあれば正確に書き写してください。
【期待する結果】最終的にどういう結果を望んでいるのか、を書いてください。
【サンプルコード】現象を再現可能な最小限のコードを書いてください。
1レスに収まらないならコード投稿サイトを利用してください。
http://jsdo.it/ http://jsbin.com/ http://jsfiddle.net/ http://ideone.com/
■回答者へ
・回答には多様性があります。他人の回答を尊重してください
・動作ブラウザや環境が限られる場合は、それを明記してください
・他人の回答を批判する代わりに、自分ならこう書くという例を示してください
・質問者がJavaScriptでなければ実現できないと勘違いしてるなら、その否定としてHTMLとCSSで実装しても良い
・他人の回答を見たくないのであれば、文句をつける代わりにNGにして見えないようにしてください。文句をつける=荒らしです
探検
+ JavaScript の質問用スレッド vol.135 +
■ このスレッドは過去ログ倉庫に格納されています
2018/07/31(火) 12:30:52.90ID:???
2018/11/02(金) 11:56:52.88ID:???
>>700
難しいかどうかはその人のスキルによるとしか。。。
難しいかどうかはその人のスキルによるとしか。。。
2018/11/02(金) 13:12:13.08ID:???
困難かという意味ではそうでもないかも
parentNodeのChildNodesを、その要素以降順に見ていくだけだから
ていうか、jQueryだってJSで書かれているわけだしね
parentNodeのChildNodesを、その要素以降順に見ていくだけだから
ていうか、jQueryだってJSで書かれているわけだしね
2018/11/02(金) 14:27:31.10ID:???
nextSibling
2018/11/02(金) 14:57:52.92ID:???
質問を変えて、jQueryの.nextUntil()をDOM API以外のライブラリを使わずに
10行以内(セミコロン不使用、横80文字まで、普段やらない書き方を使うのなし)で
作れるでしょうか?だったらどう?
10行以内(セミコロン不使用、横80文字まで、普段やらない書き方を使うのなし)で
作れるでしょうか?だったらどう?
2018/11/02(金) 15:08:06.56ID:???
まず親要素のquerySelectorAllで
セレクタにマッチする小要素を全部取り出しておく
目的の要素のnextSiblingが、上のマッチした要素群に含まれれば当たり
なければ次のnextSiblingを見る
なんとか80字でいけるか?
セレクタにマッチする小要素を全部取り出しておく
目的の要素のnextSiblingが、上のマッチした要素群に含まれれば当たり
なければ次のnextSiblingを見る
なんとか80字でいけるか?
2018/11/02(金) 15:22:12.61ID:???
全部取り出しておいてfilterしてもいいし、
ただ単に次の要素を見ていくだけのイテレータでもいい
5行くらいの関数で書けるんじゃない?
ただ単に次の要素を見ていくだけのイテレータでもいい
5行くらいの関数で書けるんじゃない?
2018/11/02(金) 16:49:57.19ID:???
function nextUntil(el, selector){
const result = [];
while(el = el.nextElementSibling){
if(selector && el.matches(selector)){
break;
}
result.push(el);
}
return result;
}
こんな感じか。matchesはIEで動かんからポリフィルを追加して
https://developer.mozilla.org/ja/docs/Web/API/Element/matches
const result = [];
while(el = el.nextElementSibling){
if(selector && el.matches(selector)){
break;
}
result.push(el);
}
return result;
}
こんな感じか。matchesはIEで動かんからポリフィルを追加して
https://developer.mozilla.org/ja/docs/Web/API/Element/matches
2018/11/02(金) 18:30:13.65ID:???
はー
matchesなんてあったんだな
勉強になる
matchesなんてあったんだな
勉強になる
2018/11/02(金) 20:12:43.52ID:???
及川光秀
2018/11/03(土) 07:10:10.07ID:???
function * nextUntil ( el, sel ) {
while ( el = el.nextElementSibling && ! el.matches( sel) )yield el
}
while ( el = el.nextElementSibling && ! el.matches( sel) )yield el
}
711Name_Not_Found
2018/11/03(土) 22:22:33.52ID:6Ec8PRLb2018/11/03(土) 22:44:24.52ID:???
>>710は単なる技術マウントだから無視してよい。
713Name_Not_Found
2018/11/04(日) 02:57:07.43ID:B7aXq2Tw 沖侑果 CMに抜擢!
萩原工業CM (ハミダセ、アミダセ篇 )
http://www.youtube.com/watch?v=LDSJwe6i1kU
萩原工業CM (グローバル・ハミダセ篇)
http://www.youtube.com/watch?v=RiJhTSMp_MI
萩原工業CM (開発・アミダセ篇)
http://www.youtube.com/watch?v=1xxgGGPQmQk
萩原工業CMメイキング映像 (萩原工業×STU48)
http://www.youtube.com/watch?v=EG591Nw3ErA
萩原工業CM (ハミダセ、アミダセ篇 )
http://www.youtube.com/watch?v=LDSJwe6i1kU
萩原工業CM (グローバル・ハミダセ篇)
http://www.youtube.com/watch?v=RiJhTSMp_MI
萩原工業CM (開発・アミダセ篇)
http://www.youtube.com/watch?v=1xxgGGPQmQk
萩原工業CMメイキング映像 (萩原工業×STU48)
http://www.youtube.com/watch?v=EG591Nw3ErA
2018/11/04(日) 03:23:50.49ID:???
技術マウントだからと言って無視するか、
技術を勉強するか
どちらを取るかね?
技術を勉強するか
どちらを取るかね?
2018/11/04(日) 04:32:09.76ID:???
>>711
>>710は代入演算子と論理積演算子の優先順位を間違えているから結果がバグっている。
修正してオプションのfilter足してjqueryのnextUntilの
http://js.studio-kingdom.com/jquery/traversing/next_until
のデモと同じことする使い方を
https://codepen.io/anon/pen/VVwdQB
に上げた。
しかし結果を配列でまとめて取り出す使い方しかしないなら
https://codepen.io/anon/pen/YRzvWa
みたいになりわざわざジェネレータ使う意味ないしこんなことするなら>>707のほうがいいな。
>>710は代入演算子と論理積演算子の優先順位を間違えているから結果がバグっている。
修正してオプションのfilter足してjqueryのnextUntilの
http://js.studio-kingdom.com/jquery/traversing/next_until
のデモと同じことする使い方を
https://codepen.io/anon/pen/VVwdQB
に上げた。
しかし結果を配列でまとめて取り出す使い方しかしないなら
https://codepen.io/anon/pen/YRzvWa
みたいになりわざわざジェネレータ使う意味ないしこんなことするなら>>707のほうがいいな。
2018/11/04(日) 06:28:04.76ID:???
一番いいのはjQueryを使うこと
717Name_Not_Found
2018/11/04(日) 10:01:07.40ID:plxWY2l1 >>715
=>
...
yield
など知らない文法ですが、テストしたら動きました。
大変参考になりました。このコードが理解出来るように勉強します。
ところで707 nextUntilを応用してnextAllを作ってみたのですが、これで良いでしょうか?
function nextAll(el, selector) {
const result = [];
while (el = el.nextElementSibling) {
result.push(el);
}
return result;
}
一つ質問ですが、const指定しているresult変数に値を代入しても良いのですか?
定数なら変更してはいけないような印象を受けるのですが。
=>
...
yield
など知らない文法ですが、テストしたら動きました。
大変参考になりました。このコードが理解出来るように勉強します。
ところで707 nextUntilを応用してnextAllを作ってみたのですが、これで良いでしょうか?
function nextAll(el, selector) {
const result = [];
while (el = el.nextElementSibling) {
result.push(el);
}
return result;
}
一つ質問ですが、const指定しているresult変数に値を代入しても良いのですか?
定数なら変更してはいけないような印象を受けるのですが。
2018/11/04(日) 10:14:41.54ID:???
いいよ
2018/11/04(日) 10:52:13.08ID:???
>>717
再代入はされてない
再代入はされてない
720Name_Not_Found
2018/11/04(日) 11:18:37.07ID:plxWY2l12018/11/04(日) 11:20:32.34ID:???
722Name_Not_Found
2018/11/04(日) 12:15:16.17ID:plxWY2l12018/11/04(日) 13:15:33.79ID:???
CやC+に一切変更ができないconstなんかありません
2018/11/04(日) 13:18:38.69ID:???
chromeだけど、dataスキームで新しいタグ開いてhtmlを表示させたいんだけど
data:text/html;云々をwindow.openするとabout:blankになってしまうたすけて
(data:text/html;云々を直接urlボックスにいれて移動、は表示される)
data:text/html;云々をwindow.openするとabout:blankになってしまうたすけて
(data:text/html;云々を直接urlボックスにいれて移動、は表示される)
2018/11/04(日) 14:00:44.03ID:???
>>724
再現コードをjsfiddleへUP
再現コードをjsfiddleへUP
2018/11/04(日) 14:11:19.81ID:???
2018/11/04(日) 14:36:36.33ID:???
constは名前に対して働くもので値に対して働くものではない
2018/11/04(日) 15:24:02.74ID:???
>>722
そもそもがcのconst勘違いしてないか。
プリミディブ値ならjsのconstでも同じように使えるし、
cではjsのconst OBJ = {a: 1, b: {c: 2}};みたいにオブジェクト直接入れるみたいなことはそもそも出来ない。
ポインタ使うにしたってOBJ.aやOBJ.b.cなどメンバーを書き換えられてしまうことは同じ。
まあやりたいことは分かる…気がする…
以下にdeepFreezeの実装例出てるから参考にしてみたら?
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze
こういうことでしょ?違う?
https://codepen.io/anon/pen/EQxJKB
そもそもがcのconst勘違いしてないか。
プリミディブ値ならjsのconstでも同じように使えるし、
cではjsのconst OBJ = {a: 1, b: {c: 2}};みたいにオブジェクト直接入れるみたいなことはそもそも出来ない。
ポインタ使うにしたってOBJ.aやOBJ.b.cなどメンバーを書き換えられてしまうことは同じ。
まあやりたいことは分かる…気がする…
以下にdeepFreezeの実装例出てるから参考にしてみたら?
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze
こういうことでしょ?違う?
https://codepen.io/anon/pen/EQxJKB
2018/11/04(日) 15:24:32.56ID:???
>>725
いろんなサイトでconsole開いて実行したので、jsfiddleのコードに書いて実行してしまうと若干挙動が違う気がするので
具体的には
window.open('data:text/html;charset=utf-8,'+encodeURIComponent('<!DOCTYPE html><html lang="en"><body>hoge</body></html>'));
を適当なサイトでコンソール開いて実行
一応jsfiddleでもやってみたけどポップアップ禁止みたいなのが出てきた
https://jsfiddle.net/pLdojb9w/
ポップアップ許可するとabout:blank
いろんなサイトでconsole開いて実行したので、jsfiddleのコードに書いて実行してしまうと若干挙動が違う気がするので
具体的には
window.open('data:text/html;charset=utf-8,'+encodeURIComponent('<!DOCTYPE html><html lang="en"><body>hoge</body></html>'));
を適当なサイトでコンソール開いて実行
一応jsfiddleでもやってみたけどポップアップ禁止みたいなのが出てきた
https://jsfiddle.net/pLdojb9w/
ポップアップ許可するとabout:blank
2018/11/04(日) 15:29:06.49ID:???
731729
2018/11/04(日) 15:31:07.23ID:??? ちなみに用途としては
とあるサイトの画像urlだけをスクレイピングして
htmlで新しいタブに<img src=>みたいに単純表示したいだけ
今までconsoleで<img src="">を出力してコピペ→テキストエディタでhtmlで新規保存
ブラウザで開いてウェブ丸ごと保存ってやってたのでめんどくさくなった
(別のスクリプトやアプリで画像urlだけ抽出してダウンロードしたらいいのではと思うし
都合が良いところはそれでやってるけど)
とあるサイトの画像urlだけをスクレイピングして
htmlで新しいタブに<img src=>みたいに単純表示したいだけ
今までconsoleで<img src="">を出力してコピペ→テキストエディタでhtmlで新規保存
ブラウザで開いてウェブ丸ごと保存ってやってたのでめんどくさくなった
(別のスクリプトやアプリで画像urlだけ抽出してダウンロードしたらいいのではと思うし
都合が良いところはそれでやってるけど)
732729
2018/11/04(日) 15:39:44.04ID:??? あと、document.writeで上書き版もしたけど
ajaxでページロードしてる感じのとこだと続きの画像表示したいときに不便だった
ajaxでページロードしてる感じのとこだと続きの画像表示したいときに不便だった
2018/11/04(日) 17:21:46.38ID:???
dataURI直で新規タブ開いて中身反映されないのはセキュリティ理由によるもの
blob→objectURL化が必要
const blob = new Blob([ '<!DOCTYPE html><html lang="en"><body>hoge</body></html>' ], { type: 'text/html' });
const url = URL.createObjectURL(blob);
window.open(url);
blob→objectURL化が必要
const blob = new Blob([ '<!DOCTYPE html><html lang="en"><body>hoge</body></html>' ], { type: 'text/html' });
const url = URL.createObjectURL(blob);
window.open(url);
735Name_Not_Found
2018/11/04(日) 18:43:51.03ID:plxWY2l12018/11/04(日) 19:09:43.38ID:???
>>733
勉強になった
勉強になった
2018/11/04(日) 21:50:56.98ID:???
漏れは、Ruby で、selenium webdriver, Nokogiri を使って、
5ch の書き込み内から、画像リンクだけを取り出して、
Nokogiri で、img タグを構築して、そのsrc 属性に設定して表示している
ブラウザに、5ch のスレを表示して、結果はそれとは異なる、新しいタブに表示している
driver.execute_script "window.open()" # 新しいタブを開く
driver.switch_to.window ( driver.window_handles.last ) # 新しいタブへ移動する
ERB みたいな、HTML 内にRuby プログラムを書ける、
埋め込みテンプレートを使えば、もっと簡単にできるのだろうけど
5ch の書き込み内から、画像リンクだけを取り出して、
Nokogiri で、img タグを構築して、そのsrc 属性に設定して表示している
ブラウザに、5ch のスレを表示して、結果はそれとは異なる、新しいタブに表示している
driver.execute_script "window.open()" # 新しいタブを開く
driver.switch_to.window ( driver.window_handles.last ) # 新しいタブへ移動する
ERB みたいな、HTML 内にRuby プログラムを書ける、
埋め込みテンプレートを使えば、もっと簡単にできるのだろうけど
2018/11/04(日) 21:56:18.15ID:???
jsならコンソールやブックマークレットでできることをそんな大がかりにしてバカみたい。
で、何をやってるかと思えばjs呼び出してるだけwww
そりゃそうだよなruうんこbyなんてブラウザで動かないもんなwwwww
で、何をやってるかと思えばjs呼び出してるだけwww
そりゃそうだよなruうんこbyなんてブラウザで動かないもんなwwwww
2018/11/04(日) 22:02:25.28ID:???
>>738
> そりゃそうだよなruうんこbyなんてブラウザで動かないもんなwwwww
いつの時代の話してるんだよwww
Ruby2.0はChromeブラウザでネイティブに動くようになりそう
http://hoshi.air-nifty.com/diary/2012/05/ruby20chrome-d6.html
> そりゃそうだよなruうんこbyなんてブラウザで動かないもんなwwwww
いつの時代の話してるんだよwww
Ruby2.0はChromeブラウザでネイティブに動くようになりそう
http://hoshi.air-nifty.com/diary/2012/05/ruby20chrome-d6.html
2018/11/04(日) 22:06:31.07ID:???
>>739
皮肉キツいぜwwwww
皮肉キツいぜwwwww
2018/11/05(月) 03:11:29.05ID:???
echo.jsより容量小さい画像遅延読み込みのスクリプトってあんの?
2018/11/05(月) 06:26:31.41ID:???
2018/11/05(月) 06:57:00.55ID:???
RubyみたいなポンコツエンジンをNative Clientで走らせるとか愚の骨頂の考えだった
WasmにコンパイルしてJSエンジン上で走らせる方がよっぽどパフォーマンス出る可能性がある
WasmにコンパイルしてJSエンジン上で走らせる方がよっぽどパフォーマンス出る可能性がある
744Name_Not_Found
2018/11/06(火) 22:07:50.79ID:G7U6fKUW jQueryだと
$(window).on('resize', data, func);
のようにdataを与える事が出来ますよね。
それを
window.addEventListener('resize', data, func);
とは出来ませんが、どうやれば同じようにdataをfuncにパス出来ますか?
$(window).on('resize', data, func);
のようにdataを与える事が出来ますよね。
それを
window.addEventListener('resize', data, func);
とは出来ませんが、どうやれば同じようにdataをfuncにパス出来ますか?
2018/11/06(火) 22:26:04.96ID:???
クロージャで
746Name_Not_Found
2018/11/06(火) 22:36:13.12ID:G7U6fKUW2018/11/06(火) 22:54:14.02ID:???
>>746
内部的にクロージャーを使っているから
内部的にクロージャーを使っているから
2018/11/06(火) 22:56:17.72ID:???
えっ、なにが疑問なのかよく分かんない…
function chinko(data) {
return 'I love ' + data;
}
function manko(func, data) {
if (!data) data = func.name;
console.log(func(data));
}
let data = 'unko';
manko(chinko); //=> "I love chinko"
manko(chinko, data); //=> "I love unko"
function chinko(data) {
return 'I love ' + data;
}
function manko(func, data) {
if (!data) data = func.name;
console.log(func(data));
}
let data = 'unko';
manko(chinko); //=> "I love chinko"
manko(chinko, data); //=> "I love unko"
2018/11/06(火) 23:02:33.42ID:???
2018/11/06(火) 23:30:28.38ID:???
>>744みたいな疑問が浮かぶ人はjQueryのソースを読んでみるべきだと思う
勉強になるぞ
勉強になるぞ
2018/11/06(火) 23:35:27.27ID:???
>>749
教えてよ。答えらんないの?
教えてよ。答えらんないの?
2018/11/07(水) 00:44:22.26ID:???
2018/11/07(水) 00:56:05.92ID:???
こう?
function chinko(data) {
return function() {
return 'I love ' + data;
}
}
function manko(func) {
console.log(func());
}
let data = 'unko';
manko(chinko(data)); //=> "I love unko"
function chinko(data) {
return function() {
return 'I love ' + data;
}
}
function manko(func) {
console.log(func());
}
let data = 'unko';
manko(chinko(data)); //=> "I love unko"
2018/11/07(水) 01:23:52.55ID:???
違う。クロージャーはmankoの引数にしろ
2018/11/07(水) 01:24:57.72ID:???
そしてdataはクロージャーの引数にしろ
2018/11/07(水) 02:00:00.12ID:???
もういいから教えてよ。
コードで示してくれりゃ分かるのにめんどくさい。
質問に回答するより煙に巻いて指示するのが好きなの?
コードで示してくれりゃ分かるのにめんどくさい。
質問に回答するより煙に巻いて指示するのが好きなの?
2018/11/07(水) 02:09:53.52ID:???
はい。大好きです(笑)
2018/11/07(水) 02:21:09.20ID:???
質問スレに何しに来てんだよ……
こう?
function chinko(data) {
return function() {
return 'I love ' + data;
}
}
function manko(func, data) {
if (!data) data = func.name;
console.log(func(data)());
}
let data = 'unko';
manko(chinko); //=> "I love chinko"
manko(chinko, data); //=> "I love unko"
こう?
function chinko(data) {
return function() {
return 'I love ' + data;
}
}
function manko(func, data) {
if (!data) data = func.name;
console.log(func(data)());
}
let data = 'unko';
manko(chinko); //=> "I love chinko"
manko(chinko, data); //=> "I love unko"
2018/11/07(水) 02:31:49.49ID:???
var clos = function closure( data ) {
return function( ) {
return 'I love ' + data;
}
}
function caller( func ) {
console.log( func() );
}
var data = 'cat';
caller( clos( data ) ); //=> "I love cat"
return function( ) {
return 'I love ' + data;
}
}
function caller( func ) {
console.log( func() );
}
var data = 'cat';
caller( clos( data ) ); //=> "I love cat"
2018/11/07(水) 02:55:16.89ID:???
2018/11/07(水) 03:21:23.96ID:???
>>744より
> では、jQueryの場合、スコープが異なるfuncになぜデータを渡せるんですか?
>
> jQueryだと
> $(window).on('resize', data, func);
> のようにdataを与える事が出来ますよね。
↑ この場合、jQueryのfuncは以下のように定義しますよね?
function func(event, data) {
console.log('I love' + data);
}
でも、>>758を見ると、以下のような書き方でjQueryの場合と全然違います。
何故でしょうか?jQueryはどんなマジックを使っているのでしょうか?疑問です。
function chinko(data) {
return function() {
console.log('I love ' + data);
}
}
--------------------------
>>748
わかったか? お前は何が疑問なのかよくわからないって言ったが、
これが疑問なんだよ。
> では、jQueryの場合、スコープが異なるfuncになぜデータを渡せるんですか?
>
> jQueryだと
> $(window).on('resize', data, func);
> のようにdataを与える事が出来ますよね。
↑ この場合、jQueryのfuncは以下のように定義しますよね?
function func(event, data) {
console.log('I love' + data);
}
でも、>>758を見ると、以下のような書き方でjQueryの場合と全然違います。
何故でしょうか?jQueryはどんなマジックを使っているのでしょうか?疑問です。
function chinko(data) {
return function() {
console.log('I love ' + data);
}
}
--------------------------
>>748
わかったか? お前は何が疑問なのかよくわからないって言ったが、
これが疑問なんだよ。
2018/11/07(水) 06:30:36.29ID:???
2018/11/07(水) 08:05:06.49ID:???
>>744
.on() が内部でコールバック関数を渡す前にクロージャでラップしてるから
ちなみに、>>761はjQueryの動きになってない上、コールバック関数を渡す実装もしていない無視して良い
http://api.jquery.com/on/
最も、addEventListenerなら、handleEvent付きのオブジェクトを指定する方がスマートだと思うが
.on() が内部でコールバック関数を渡す前にクロージャでラップしてるから
ちなみに、>>761はjQueryの動きになってない上、コールバック関数を渡す実装もしていない無視して良い
http://api.jquery.com/on/
最も、addEventListenerなら、handleEvent付きのオブジェクトを指定する方がスマートだと思うが
2018/11/07(水) 08:52:20.84ID:???
いいオチがつきましたね
2018/11/07(水) 11:44:49.22ID:???
function hoge(){ /*この中に重複作業をまとめたいときがある*/ }
例えば
function hoge(x,y){
function sum10(x) { return x+10; }
return [sum10(x),sum10(y)];
}
このsum10は汎用なのでhogeの外にsum10を書いても良いような気がしますが
仮に、hogeだけでしか使わないような関数でも
外に出しておいた方が良いのでしょうか?
今まで、単に見た目の問題なのかな?と思い、適当にやっていたのですが
例えば
function hoge(x,y){
function sum10(x) { return x+10; }
return [sum10(x),sum10(y)];
}
このsum10は汎用なのでhogeの外にsum10を書いても良いような気がしますが
仮に、hogeだけでしか使わないような関数でも
外に出しておいた方が良いのでしょうか?
今まで、単に見た目の問題なのかな?と思い、適当にやっていたのですが
2018/11/07(水) 11:45:31.97ID:???
訂正
>hogeだけでしか
>hogeの中だけでしか
>hogeだけでしか
>hogeの中だけでしか
2018/11/07(水) 12:03:24.66ID:???
>>765
一回しか使うかどうかで、関数にするかどうかを決めるんじゃない。
また同じ処理だからって言うだけで、関数にするのでもない
長いコードがあったとき、読むのが大変になるから、
その中の一部に適切な名前をつけて関数にすることで、名前だけから
やってることがわかるから中を読まなくていい。
読まなくていいから長いコードを読むのが楽になった!
という目的のために、関数にするんだよ
1回しか使わなくても、長いコードを読むのが楽になるなら
関数にするべきだし、関数にしたからと言って、長いコードを読む時に
関数の中まで見ないとやってることがわからないなら、
それは関数にするやり方間違ってる
読むべきコードを減らすのが関数にする目的
だから独自で作るよりも既存のライブラリを使ったほうが良いという話にもつながる
独自で作ると少なくとも一回は中を読まないといけない。
既存のライブラリは、たいてい中を読まないで使ってるだろう?
一回しか使うかどうかで、関数にするかどうかを決めるんじゃない。
また同じ処理だからって言うだけで、関数にするのでもない
長いコードがあったとき、読むのが大変になるから、
その中の一部に適切な名前をつけて関数にすることで、名前だけから
やってることがわかるから中を読まなくていい。
読まなくていいから長いコードを読むのが楽になった!
という目的のために、関数にするんだよ
1回しか使わなくても、長いコードを読むのが楽になるなら
関数にするべきだし、関数にしたからと言って、長いコードを読む時に
関数の中まで見ないとやってることがわからないなら、
それは関数にするやり方間違ってる
読むべきコードを減らすのが関数にする目的
だから独自で作るよりも既存のライブラリを使ったほうが良いという話にもつながる
独自で作ると少なくとも一回は中を読まないといけない。
既存のライブラリは、たいてい中を読まないで使ってるだろう?
2018/11/07(水) 12:19:30.73ID:???
関数ってよりサブルーチンとかプロシージャっぽい説明だね。
2018/11/07(水) 12:25:56.81ID:???
2018/11/07(水) 12:44:11.43ID:???
何か引数を受けて、何かしらの処理をし、何かを返すのがfunction(関数)
プログラムの中で一定の処理をひとまとまりにしてモジュール化したものを
メイン処理と対比して呼ぶのがsub routine(サブルーチン)
プログラムの中で、サブルーチンを作るために作られた
何も返さない関数がprocedure(プロシージャ)
であってるかな
横からですが
プログラムの中で一定の処理をひとまとまりにしてモジュール化したものを
メイン処理と対比して呼ぶのがsub routine(サブルーチン)
プログラムの中で、サブルーチンを作るために作られた
何も返さない関数がprocedure(プロシージャ)
であってるかな
横からですが
2018/11/07(水) 12:56:11.97ID:???
んにゃ、合ってない
それらの用語は各言語仕様やコミュニティ毎に定義されている
それらの用語は各言語仕様やコミュニティ毎に定義されている
2018/11/07(水) 13:23:52.42ID:???
本質的にはあってんじゃない?
いろんな方言的解釈があるのはその通りだが
いろんな方言的解釈があるのはその通りだが
2018/11/07(水) 14:00:38.33ID:???
で、どこが後者の話になってるの?
2018/11/07(水) 14:30:07.56ID:???
> 読むべきコードを減らすのが関数にする目的
???
['80', '9', '700', 40, 1, 5, 200]
.sort((a, b) => a - b);
???
['80', '9', '700', 40, 1, 5, 200]
.sort((a, b) => a - b);
2018/11/07(水) 14:33:41.17ID:???
2018/11/07(水) 14:47:22.52ID:???
2018/11/07(水) 14:52:27.59ID:???
>>776
じゃあsort関数の中身をここにコピペして
じゃあsort関数の中身をここにコピペして
2018/11/07(水) 15:04:11.21ID:???
2018/11/07(水) 15:13:40.55ID:???
>>778
sort関数に渡す引数?
(a, b) => a - b のこと?
なにを突っかかってきてるのか知らんが、
const byAsc = (a, b) => a - b;
const byDesc = (a, b) => b - a;
みたいなの並び替えアルゴリズムとして関数化しておけば、
aからbを引いて・・・ってどういうこと?って
もう読まなくてすみますね。
['80', '9', '700', 40, 1, 5, 200].sort(byAsc);
計算部分を読まなくてすむから楽になった!
sort関数に渡す引数?
(a, b) => a - b のこと?
なにを突っかかってきてるのか知らんが、
const byAsc = (a, b) => a - b;
const byDesc = (a, b) => b - a;
みたいなの並び替えアルゴリズムとして関数化しておけば、
aからbを引いて・・・ってどういうこと?って
もう読まなくてすみますね。
['80', '9', '700', 40, 1, 5, 200].sort(byAsc);
計算部分を読まなくてすむから楽になった!
2018/11/07(水) 15:28:58.55ID:???
(a, b) => a - bは既に関数。それは関数に名前をつけているだけ。
関数化www
関数化www
2018/11/07(水) 15:30:23.11ID:???
だから関数に名前つけるって言ってるじゃん
バカなのかな?
バカなのかな?
2018/11/07(水) 15:30:52.82ID:???
> その中の一部に適切な名前をつけて関数にすることで、名前だけから
2018/11/07(水) 15:36:40.08ID:???
訳:「読むべきコードを減らすのが関数にする目的」というのは嘘でしたすみません!「読むべきコードを減らすのが関数に名前をつける目的」でした!あと関数化とかいうオレオレ用語で混乱させてしまってすみません!
こうかな
こうかな
2018/11/07(水) 15:37:20.51ID:???
いや違うな。名前をつけて関数化したんだから
読むべきコードが減ってる。
重要なのは読むべきコードを減らすこと。
読むべきコードが減ってる。
重要なのは読むべきコードを減らすこと。
2018/11/07(水) 15:37:50.18ID:???
いやはや、また>>783はいつものキチガイなんだろうねw
2018/11/07(水) 15:42:58.80ID:???
2018/11/07(水) 15:45:40.86ID:???
それは関数じゃなくてアロー関数
重要なのは読まなくて良いコードを増やすことなんだが、
そっちへのレスがないってことは、逃げてんだね
重要なのは読まなくて良いコードを増やすことなんだが、
そっちへのレスがないってことは、逃げてんだね
2018/11/07(水) 15:46:35.31ID:???
2018/11/07(水) 15:51:56.72ID:???
790Name_Not_Found
2018/11/07(水) 17:14:19.84ID:D6OVyDfn >>787
なんで?読めばいいじゃん
なんで?読めばいいじゃん
2018/11/07(水) 17:53:16.41ID:???
2018/11/07(水) 17:53:56.85ID:???
.replace().replace().replace()....replace地獄になります
クールな書き方をおしえてください
クールな書き方をおしえてください
2018/11/07(水) 17:56:48.24ID:???
単なる数値ではないソートの場合に名前がめっちゃ長くなりそう
794Name_Not_Found
2018/11/07(水) 18:04:42.39ID:D6OVyDfn >>792
第二引数を関数にして中でゴニョゴニョするとか
第二引数を関数にして中でゴニョゴニョするとか
2018/11/07(水) 18:35:54.90ID:???
>>792
[
['私', '拙者'],
['シッコ', 'ウンコ'],
['マンコ', 'チンコ'],
['好き', '嫌い'],
].reduce((acc, [oldWord, newWord]) => acc.replace(oldWord, newWord), '私は、シッコとマンコが好きです。');
//=> "拙者は、ウンコとチンコが嫌いです。"
[
['私', '拙者'],
['シッコ', 'ウンコ'],
['マンコ', 'チンコ'],
['好き', '嫌い'],
].reduce((acc, [oldWord, newWord]) => acc.replace(oldWord, newWord), '私は、シッコとマンコが好きです。');
//=> "拙者は、ウンコとチンコが嫌いです。"
2018/11/07(水) 18:57:11.04ID:???
それでもいいけどreplacer関数作って渡す方が筋がいいかもな。
2018/11/07(水) 19:27:20.73ID:???
>>791
まあ、そこは本質的なところではないんでどうでもいいんだわw
バカに付き合ってあげただけ
重要なのは、読むべきコードを減らすのが関数にする目的
だ〜れも、なんでもかんでも関数にしろとか言ってない
関数にする基準の話をしてるところに
重箱おじさんが連れたので、つついてあげただけw
まあ、そこは本質的なところではないんでどうでもいいんだわw
バカに付き合ってあげただけ
重要なのは、読むべきコードを減らすのが関数にする目的
だ〜れも、なんでもかんでも関数にしろとか言ってない
関数にする基準の話をしてるところに
重箱おじさんが連れたので、つついてあげただけw
2018/11/07(水) 19:31:48.74ID:???
バカ「バカに付き合ってあげただけ」
重箱つつかれたのはお前ww
重箱つつかれたのはお前ww
2018/11/07(水) 19:33:30.33ID:???
読むコード減らすべきおじさん「読むコード減らす」
まで読んだ
まで読んだ
2018/11/07(水) 19:37:20.82ID:???
面白いように反応してくれるなw
で、いちばん重要な「読まなくて良いコードを増やすこと」には
ほら、反論できないでしょ?w
そういうとこやで
で、いちばん重要な「読まなくて良いコードを増やすこと」には
ほら、反論できないでしょ?w
そういうとこやで
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【速報】ドジャース・大谷翔平、第1子の長女誕生を報告 [冬月記者★]
- 首相、就職氷河期世代の支援表明 週内に関係閣僚会議設置 ★5 [どどん★]
- 京都で”1泊2食付き”をやめる旅館が続出。「素泊まり」「飲食店の予約代行」にシフトの背景には外国人観光客の≪正直な本音≫があった [どどん★]
- 「どっちもバラマキだが現金給付ダメ」岸博幸氏が見解「食料品の消費税“ゼロ”が効果的」 [パンナ・コッタ★]
- 【TBS】『報道特集』で「死を選んだ理由は立花孝志」との被害者実名の遺書を公開… 立花氏は撮影取材求める [冬月記者★]
- 【日テレNEWS】外出控え強まる…GWの“理想と現実” SNSで嘆き「宿が高い」「ガソリン代が高い」コンビニ大手でお得なキャンペーンも [おっさん友の会★]
- 【MLB】千賀滉大(防御率0.79)山本由伸(防御率0.93)日本人選手すごい! [696684471]
- 「子供の塾代(100万)は親が負担するのが当たり前?」子育て世帯の間で話題に【石破悲報】 [739066632]
- 【悲報】大谷の嫁、娘を産んでしまうWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
- 【画像】尾田栄一郎さんが描いたラムちゃんwwww [208234178]
- 🏡どんな人生歩んだらID無しスレで自演して誹謗中傷ばかりする人間に育つんだろう🏡
- 今永、千賀、山本、菅野、佐々木、全員エース級の活躍しててワロタw