+ JavaScript の質問用スレッド vol.123 + [無断転載禁止]©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
2017/04/02(日) 23:30:38.56ID:Qcd0Qmy10
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:vvvvvv:1000:512:----: EXT was configured
2021/08/18(水) 04:14:03.58ID:MlgFIKsc0
>>751
レスありがとうございます。

ご助言頂いた後に、何故「parent」を包括してるのに
わざわざ「...parent」と展開しているのかに悩まされたのですが、
継承元のメソッドをオーバーライドしているため、
継承元のメソッドを参照するための措置だと理解するに至りました。

何はともあれすっきりいたしました。ありがとうございました。
2021/08/18(水) 12:01:29.72ID:PUOUx4QT0
>>754
100万人の内JavaScript使える奴は50万人はいるね…。

がっかり。
2021/08/18(水) 13:25:34.20ID:tXUUSdLY0
デザイナーですらjsバリバリですから
2021/08/18(水) 15:45:08.23ID:wgqyPKZK0
今やデザイナーもJSは必須だよなあ
2021/08/18(水) 16:45:19.75ID:UItnOrZNr
デザイナーの方が
複雑なアニメションや3Dとか
実装のスキル高かったりしますよ
cssとかのビルドシステムとかも
開発同等ですし
760デフォルトの名無しさん (ワッチョイ 0b6e-YgaZ [150.246.100.179])
垢版 |
2021/08/19(木) 20:25:30.16ID:DoSdBCp10
プログラミングにはまる方法ありますか?
もう1日獣コーディング出来るという感じの
761デフォルトの名無しさん (ブーイモ MM7f-Vt5m [163.49.207.219])
垢版 |
2021/08/19(木) 20:29:27.31ID:XQ1nrb4AM
百獣の王ライオンのように獣分勉強することが獣要だ。
2021/08/19(木) 21:40:17.09ID:1kNwAhId0
獣コーディングってカッコいいな
コーディングバトルものにありそう
2021/08/19(木) 23:00:55.88ID:JbrAGmXW0
地水火風のコーディング
光と闇のコーダー
764デフォルトの名無しさん (ワッチョイ 356e-hCLa [150.246.100.179])
垢版 |
2021/08/20(金) 10:32:33.93ID:Z+g/1lv60
javascriptでゲージを表示出来るライブラリってないですか?
かんたんなものでいいんですが

円形や半円形で、残り時間を表示出来るようなもの
2021/08/20(金) 10:52:39.21ID:kEo814pT0
>>759
> cssとかのビルドシステムとか

どういう意味?
2021/08/20(金) 11:10:11.76ID:fkI3imbk0
scssとかのcssプリプロセッサやら普通に使うんやから
glupとかGruntとかのビルドシステム組むでしょ
そもそもjsでアニメーションコード書いてんだし
2021/08/20(金) 11:13:32.72ID:fkI3imbk0
あと、UI/UXの設計もデザイナー側でやることが多くなった

そうすると、開発屋はデザイナーの下位作業(下請け感がある)ぽくなる
2021/08/20(金) 11:46:11.89ID:lyH6KwTF0
工程として下流になるのはわかるがなんで下請けやねん
2021/08/20(金) 13:30:58.07ID:TjGw1Vbs0
JavaScript, CSS のビルドは、Ruby on Rails でも使う。
Webpack, Babel, Gulp など

Bootstrap も、SCSS

>>764
「javascript グラフ ライブラリ おすすめ」で検索!

Google Charts, Highcharts, Chart.js, C3(D3)
770デフォルトの名無しさん (ワッチョイ 356e-hCLa [150.246.100.179])
垢版 |
2021/08/20(金) 14:54:30.33ID:Z+g/1lv60
没頭できる方法はないかしら
771デフォルトの名無しさん (アウアウウー Sad9-LN3e [106.129.73.97])
垢版 |
2021/08/20(金) 21:46:27.63ID:a4ptYSCBa
>>764
円じゃなくてバーみたいのじゃダメかな?
https://itest.5ch.net/test/read.cgi/future/1476229483/375
http://imgur.com/9yuYIAR.gif
772デフォルトの名無しさん (アウアウウー Sad9-LN3e [106.129.73.17])
垢版 |
2021/08/20(金) 22:31:55.01ID:FxyObMJ7a
>>764
円じゃなくてバーみたいのじゃダメかな?
https://itest.5ch.net/test/read.cgi/future/1476229483/375
http://imgur.com/9yuYIAR.gif
773デフォルトの名無しさん (ワッチョイ 356e-hCLa [150.246.100.179])
垢版 |
2021/08/21(土) 06:10:37.76ID:kZOy5p0X0
>>772
それにしときます
774デフォルトの名無しさん (ワッチョイ 356e-hCLa [150.246.100.179])
垢版 |
2021/08/21(土) 13:43:38.68ID:kZOy5p0X0
プログラミン好きになりたい
2021/08/21(土) 17:31:43.12ID:8vON4ltjr
好き好き好きぃーー好き好き〜〜♪
2021/08/21(土) 19:36:40.29ID:IJG/Rocua
>>770
JavaScriptでのアプリってさ
静止画で動かないものをプログラミングするよりも
動きのあるものやインタラクションで即応性のあるもののが楽しいと思うよ
canvasやったらお絵描きやら、three.js使ってマウスでグリグリ動かせる3Dも作れるし
777デフォルトの名無しさん (ワッチョイ 356e-hCLa [150.246.100.179])
垢版 |
2021/08/22(日) 12:53:46.24ID:M/f8ZXpG0
>>776
ゲームエンジンも使ってますね
確かに楽しい
778デフォルトの名無しさん (ワッチョイ 356e-hCLa [150.246.100.179])
垢版 |
2021/08/24(火) 08:35:43.20ID:MyDy/SP/0
コツコツやってれば楽しくなるかしら
2021/08/24(火) 12:57:17.13ID:jjxwJFYFa
自分の好きなものとか作ってみたいアイデアを形にすれば楽しい
2021/08/26(木) 12:42:23.70ID:ReNipBHPM
セールストークのような短文が浮かんでは消えるようなスクリプトを書きたいです
その場で表示されて、消えて、別の短文が表示されるみたいに
リストした候補を順番、ランダムで代わる代わる表示させるには
どんなキーワードで検索したら似たような機能のスクリプトを探せますか?
素人が引き継ぎをするようになり、webプログラムの機能の専門用語が分からず難儀しています、、
2021/08/26(木) 17:49:38.75ID:QBOoVl/3a
>>780
そのままJavaScriptアニメーションとかでググればいい
基本的な仕組みは紙芝居やアニメーションと同じで
setIntervalの関数で
DOMの要素なりプロパティを一定時間毎に入れ替えれば良い
2021/08/27(金) 00:44:52.42ID:B3pyqp0/M
>>781
有難うございます!
週末に色々試してみます
783デフォルトの名無しさん (ワッチョイ 7d6e-+pMA [150.246.100.179])
垢版 |
2021/08/27(金) 13:43:18.46ID:qCuii4QT0
>>779
プログラミン楽しくなった瞬間とかありますか?
やっぱりある程度スキルがつかないとつまらんですわな

まず継続化の時点で躓いている
784デフォルトの名無しさん (ワッチョイ 7d6e-+pMA [150.246.100.179])
垢版 |
2021/08/27(金) 14:09:02.43ID:qCuii4QT0
即時関数ってのは全体の構造を把握しやすくするために使うんでしょうか?
関数化すればアウトラインに出ますもんね。
2021/08/27(金) 15:39:43.68ID:+rhdjjD60
スキルというか目的じゃないかな
出会い系サイトで女に足跡つけまくるスクリプト書いてた時とか楽しかったわ
すぐ対策されたけど
2021/08/27(金) 17:07:32.29ID:h8MNocFf0
java/C++/C#辺りやってたのでオブジェクトの扱いがよく分からないというかプロトタイプベース?というのを聞いて分からない!文化が違う!ってなってます
なんかその辺上手いこと説明してくれてるとこないですかね
2021/08/27(金) 17:44:28.50ID:H0yOmdsJa
jsもクラス対応してたっしょ
788デフォルトの名無しさん (ワッチョイ 7d6e-+pMA [150.246.100.179])
垢版 |
2021/08/27(金) 18:57:04.42ID:qCuii4QT0
>>785
目的あるけど、スキル不足でまだ楽しくない
2021/08/27(金) 19:32:29.78ID:eShI7uDWa
まず目的を明確にすれば?
「Program」には「計画」と言う意味があって
目的に沿って計画を書くのがプログラミング(手続き型言語)
2021/08/27(金) 21:24:03.62ID:cMIVTei20
>>780
要素が自動的に流れ続ける、loop slider, slide show とか
2021/08/27(金) 21:27:41.85ID:cMIVTei20
>>784
IIFE (Immediately Invoked Function Expression; 即時実行関数式)は、内部を隠ぺいできる

外から、内部にアクセスできなくなる
2021/08/27(金) 21:58:17.72ID:cMIVTei20
>>786
prototype, __proto__ は継承チェーン

let Person = function (name) {
this.name = name;
};

let taro = new Person('太郎');
taro.age = 20;
console.log(taro); //=> Person { name: '太郎', age: 20 }

let jiro = new Person('次郎');
console.log(jiro); //=> Person { name: '次郎' }

taro.age = 20;
みたいに、インスタンスにメンバー(データ・関数)を直接追加しても、
そのインスタンスにしか追加されない。
Ruby の特異メソッドと同じ

1階層上に追加しないといけない。
それをプロトタイプチェーンを遡ると言う
2021/08/28(土) 19:18:57.18ID:g8WbsRiO0
>>780

function f() {
const ary = ["あ","い","うう"]
let i = 1;

const timer_id = setInterval(function () {
// 0〜配列の要素数未満の乱数を発生させて、少数点以下を切り捨てる。つまり、0〜2
idx = Math.floor(Math.random() * ary.length)
console.log(i, ary[idx]);
i++;

// 指定回数でタイマーを解除する
if (i > 5) { clearInterval(timer_id); }
}, 1000);
}

f()
2021/08/29(日) 15:56:34.06ID:IDEI2UK0M
>>793
有難うございます!
これはJavaScript?
自分で考えてからあれこれ加工するまでには全然至っていません・・
アニメーションも探すとcss3でも可能みたいですね

セールストークの文字列が2箇所あって
例「みんなのお役に立てる」「◯◯です」みたいな感じなのですが
こういう場合は一個づつの要素を動かしてあげる方が簡単ですよね?

3つくらいの組み合わせを、季節ごとに変えようとか考えていて色々試行錯誤してます
ワンセットで、1→2→3と時間指定で変えられれば一番楽なのですが
2021/08/30(月) 14:47:37.94ID:4x4SXrWk0
>>793
idxは宣言しないんか?
2021/08/30(月) 17:56:17.86ID:RiczHxxva
無名関数内スコープでなおかつ実行時未確定乱数だからかなぁ・・
2021/08/30(月) 18:26:37.84ID:v1JP3SQOM
多分忘れただけでしょ
とりたてて言うことでもない
2021/09/03(金) 20:32:19.52ID:L3QItCYH0
オブジェクトのプロパティの値に対して、falseを入れておくと、その一つ下のプロパティの存在チェックが
できるのですが、nullにするとエラーが出てしまいます。
一体どのような理由なのでしょうか?

obj = {
obj.abc = false;
// obj.abc = null;
};
if (obj.abc,def) {...}
799デフォルトの名無しさん (ワッチョイ d535-sk6x [180.145.179.243])
垢版 |
2021/09/03(金) 21:34:31.02ID:KftlCW3D0?2BP(1000)

>>798
falseはではない(表示しない)
trueはである(表示する)
nullはなにもない(どちらでもない)
だからだと思う
2021/09/03(金) 22:30:41.85ID:5CZYJcHV0
>>798
falseはBooleanなオブジェクトだから
nullでやりたいなら?.使うべし
2021/09/03(金) 22:57:56.98ID:pInph4TO0
>>793
自己修正

>idx = Math.floor(Math.random() * ary.length)
let が抜けていた

VSCode で、拡張機能・ESLint も入れているけど、
letが無くても警告されない
2021/09/04(土) 09:37:20.21ID:EhGYuF7y0
>>799-800
ありがとうございます。
falseはオブジェクトだったのですね。
理解できました!


ちなみに "?." とはなんでしょうか?
ググってみましたが出てきませんでした…
2021/09/04(土) 11:16:44.89ID:F9ZtkFjVM
>>802
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Optional_chaining
2021/09/04(土) 14:34:40.34ID:EhGYuF7y0
>>803
新しい文法なんですね
全然知りませんでした。
ちょろっと勉強してみます!!
2021/09/05(日) 00:45:07.05ID:UFxCuC9Y0
ぼっち演算子・Null条件演算子・Null安全演算子か

Ruby にも導入された。&.
object&.method
806デフォルトの名無しさん (ワッチョイ c56e-nzYM [150.246.100.179])
垢版 |
2021/09/05(日) 04:32:46.84ID:oH2jfftx0
戻り値のない関数ってどういうときに使うんでしょうか?
2021/09/05(日) 06:50:44.94ID:uH4eg5q/M
無数にあるけど例えばalertとか
808デフォルトの名無しさん (ワッチョイ c56e-nzYM [150.246.100.179])
垢版 |
2021/09/05(日) 10:32:02.35ID:oH2jfftx0
>>807
alertやconsole.logなどの何らかの出力処理を関数内に含めるか、returnを使うかしないと、外部とのやり取りは出来ないんですよね?
2021/09/05(日) 11:31:11.96ID:aRsSXuKi0
ごめんけど何言ってるか分からん
810デフォルトの名無しさん (ワッチョイ c56e-nzYM [150.246.100.179])
垢版 |
2021/09/05(日) 12:47:36.39ID:oH2jfftx0
>>809
関数は数値などを加工するものだと思います。
その加工した値を取り出す手段がないと、使う意味がないと思うのですが。
2021/09/05(日) 13:42:05.76ID:rMLShDrA0
>>806
「プログラミング 関数を作る意味」でググっていくつか読めば分かると思う
2021/09/05(日) 14:46:48.17ID:7oSpDR4l0
>>808
alertやconsoleに限らず、その関数内から呼び出せる任意の関数を使って外部とのやりとりはできるわけだが。
813デフォルトの名無しさん (ワッチョイ c56e-nzYM [150.246.100.179])
垢版 |
2021/09/05(日) 18:55:22.30ID:oH2jfftx0
>>811
>>812
はい
814デフォルトの名無しさん (ワッチョイ c56e-nzYM [150.246.100.179])
垢版 |
2021/09/07(火) 11:24:53.81ID:S+wKaSSK0
localStrageに複数のデータを保存して、ループで取り出したいのですが、pushで保存は可能です。しかし、forで取り出すとカンマの区切りが機能していないようです。
[1,2,3]
こういう配列があった場合、forで取り出すと以下のようになります。
1
,
2
,
3
つまりこれは配列ではなく、文字列として扱われているのだと思います。
localStrageへの保存はどのような方法が一般的なのでしょうか?

以下はstartを押すとlocalStrageに配列を保存し、outputで取りだすというものです。
<button id="start">ボタン</button>
<button id="test">output</button>
<div id="timer" style="border:1px solid red;width:500px;height:500px;"></div>
<script>
let startButton = document.getElementById("start");
let testButton = document.getElementById("test");
let timer = document.getElementById("timer");
let num = 0;
let arr = [];
startButton.addEventListener("click" , function()
{num += 1;
timer.insertAdjacentHTML("afterbegin" ,"<div>" + num + "</div>");
arr.push(num);
localStorage.setItem("saveArray" , arr);
});
testButton.addEventListener("click" , function()
{let array = localStorage.getItem("saveArray");
for(let i = 0;i < array.length ; i ++)
{console.log(array[i]);}});
</script>
2021/09/07(火) 11:29:52.51ID:cJmyi1+i0
>>814
JSON.stringify(), JSON.parse()
816デフォルトの名無しさん (ワッチョイ c56e-nzYM [150.246.100.179])
垢版 |
2021/09/07(火) 15:35:10.78ID:S+wKaSSK0
>>815
jsonにするということですが、なぜ配列だと駄目なんですかね。
2021/09/07(火) 15:44:10.61ID:1upJrmlw0
pythonにとって読み込んだテキストは単なる文字列だから。
“[1,2,3]”と同じ。
2021/09/07(火) 15:48:32.44ID:1upJrmlw0
おっとpythonスレじゃなかった。javascriptにとってね。
819デフォルトの名無しさん (ワッチョイ c56e-nzYM [150.246.100.179])
垢版 |
2021/09/07(火) 15:57:51.34ID:S+wKaSSK0
>>818
そういう仕組だと覚えるしかないですね
localstrageって一種の変数みたいなもんじゃないんでしょうかね
2021/09/07(火) 20:38:17.68ID:YcIWO4/P0
外部とのやり取りは、文字列だけ

オブジェクトのシリアル化(直列化)、serialize
2021/09/07(火) 22:51:34.49ID:G3yrM4UCM
localstorageだと強制的に文字列に変換されるから、それが嫌ならlocalforageとかのラッパーを使うといい
822デフォルトの名無しさん (ワッチョイ c56e-zxq2 [150.246.100.179])
垢版 |
2021/09/08(水) 15:58:10.14ID:Zc9KUQv/0
はい(´・ω・`)
823デフォルトの名無しさん (ワッチョイ c56e-zxq2 [150.246.100.179])
垢版 |
2021/09/08(水) 21:31:41.92ID:Zc9KUQv/0
innerhtmlはfor内では機能しないのでしょうか?
クリックしたときにtimerの中にnum_arrの中身をセットしたいです。
しかし、console.log(num_arr[i])での展開はされますが、innerhtmlでのセットは機能していないです。
なぜでしょうか?
<button id="test2">
test2
</button>
<div id="timer"></div>
<script>
let testButton2 = document.getElementById("test2");
let num_arr = [1,2,3,4,5];
testButton2.addEventListener("click" , function()
{
for(let i = 0;i <num_arr.length ; i ++)
{
timer.innerHTML = "<div>" + num_arr[i] + "</div>" ;
console.log(num_arr[i]);
}
});
</script>
2021/09/08(水) 21:50:08.74ID:PiHp4Uh3M
書いた通りに動いてるじゃん
一瞬で上書きされるから人間の目には何が起きてるか見えんけど
2021/09/08(水) 21:52:59.07ID:pthgZojC0
>>823
> for(let i = 0;i <num_arr.length ; i ++)

i ++ とは?
2021/09/08(水) 21:56:09.90ID:dK8gXF1C0
変数timer が未定義だから

let timer = document.getElementById("timer");
が必要なのでは?
2021/09/08(水) 22:05:24.18ID:pthgZojC0
>>826
その方がお行儀がいいのでそうすべきだが、定義はされてる
2021/09/08(水) 22:13:11.22ID:6Ur8A06Za
>>823
プラスイコールにしてみればわかるよ
timer.innerHTML = "<div>" + num_arr[i] + "</div>" ;
timer.innerHTML += "<div>" + num_arr[i] + "</div>" ;
2021/09/08(水) 23:14:26.26ID:pthgZojC0
>>828
innerHTMLでなくていい気はするが、原因はその通りだな
https://developer.mozilla.org/ja/docs/Web/API/Element/insertAdjacentHTML
830デフォルトの名無しさん (ワッチョイ 6501-lYlz [60.126.191.83])
垢版 |
2021/09/09(木) 00:07:10.15ID:nyRHg+r60
chrome拡張機能を作っているのですが、insertRuleしようとするとたまにエラーが出てしまいます。
調べてもよくわからなかったのですが、原因わかる方いますか?
Error handling response: Error: Failed to execute 'insertRule' on 'CSSStyleSheet': Failed to parse the rule 'undefined'.
2021/09/09(木) 00:10:23.30ID:4mdtO86la
>>823>innerhtmlはfor内では機能しないのでしょうか?

>>828の様にすればinnerHTMLはfor内でも機能してるのが確認出来る

>クリックしたときにtimerの中にnum_arrの中身をセットしたいです。

なら
//num_arr[i] ではなく

timer.innerHTML = "<div>" + num_arr.join() + "</div>" ;

とすべし、あと名前はtimerではなくてtimesだろう
2021/09/09(木) 00:21:08.30ID:sZM33J3R0
>>830
そのエラー文字列で、Google 検索すれば?
2021/09/09(木) 01:04:57.92ID:gVcxc3AP0
jsを勉強し始めたんですがコールする関数タイポしてもコンパイルエラーとかないんで実行してコケて気づいて直す、を繰り返してしまいます。
こういうテスト以前のコーディングミスについて、コンパイル言語のように事前に検知する方法はないでしょうか?
ちなみにvscodeで開発してます。
834デフォルトの名無しさん (ブーイモ MM6b-FGfd [163.49.207.128])
垢版 |
2021/09/09(木) 01:27:37.42ID:BO4ka+Z8M
コケちゃいました
2021/09/09(木) 01:53:20.98ID:EzLIxC6LM
eslintとかtypescript使うとか
2021/09/09(木) 03:49:44.49ID:sZM33J3R0
漏れは、VSCode で、スクラッチパッドみたいな拡張機能・Quokka.js で、
コードを入力してるけど、文法エラーでは、赤い波線が表示される

拡張機能・ESLint も使っているからかな?

もちろん、Node.js もインストールしているから、
Quokka.jsに書いたコードは、Node.jsで実行されるので、時刻が9時間ずれる
837デフォルトの名無しさん (ワッチョイ c56e-zxq2 [150.246.100.179])
垢版 |
2021/09/09(木) 06:09:13.65ID:MrnZHVcA0
>>828
これで解決しました
ありがとう

加算にしないと駄目なんですね(´・ω・`)、、、
2021/09/09(木) 08:16:04.83ID:gVcxc3AP0
eslint、こんなのあるんですね ありがとうございます
839デフォルトの名無しさん (ワッチョイ c56e-zxq2 [150.246.100.179])
垢版 |
2021/09/09(木) 15:28:43.86ID:MrnZHVcA0
プログラミンコードの校正ってどこでアドバイスもらえますか?
ストップウォッチ作ったはいいものの、コードぐちゃぐちゃで読んでて分からない
分かりやすく書く方法を教えてほしいのです(´・ω・`)、、、
2021/09/09(木) 15:40:55.41ID:MjE68I3R0
処理や変数など要所にコメント入れるようにして、
自分でわかるように書き直してみたらいい。
理解も深まるし無駄なところもわかったりする。
841デフォルトの名無しさん (ワッチョイ c56e-zxq2 [150.246.100.179])
垢版 |
2021/09/09(木) 15:52:13.51ID:MrnZHVcA0
https://ideone.com/O5tsDV
ideonにupしました(´・ω・`)、、、
コメント入れているのですが、改善点のアドバイスもらえますか?
コメントアウトしている部分はとりあえずは使わない機能です。
2021/09/09(木) 16:17:46.87ID:MjE68I3R0
>>841
適当にコード拾ってきてつなぎ合わせたのでなけりゃ、十分理解できるコードだと思うが。
それなりにコメント入ってるし。
むしろ具体的にどこがわからんのよ。

自分で理解して書いたコードだったら、一回全内容にコメント入れてみたら?
843デフォルトの名無しさん (ワッチョイ c56e-zxq2 [150.246.100.179])
垢版 |
2021/09/09(木) 19:26:54.34ID:MrnZHVcA0
>>842
どういう部分と言われても難しいですが、しばらく放置してから見ると動きを理解するのに少し時間がかかるというか
この程度の短いコードですが

複数ファイルに分けたりしたほうがいいのでしょうか?

おそらく、良くわからないのは実行の流れです
フローチャートなどは苦手で書いていません
2021/09/09(木) 20:13:16.49ID:B3AuMWY60
>>843
できるだけ関数化するのと、その関数の名前にはこだわった方がよいかも
ファイルは分けなくてよい
フローチャートは自分も書いたことはない

例えばタイマの初期化が先頭部分とリセットボタンクリックイベントの2箇所にあるが、読みづらい上に不具合のもと
実際にリセットボタンクリック時にはミリ秒がクリアされるのに
起動時にはミリ秒がクリアされていないように見える(ローカルストレージから前回の値を拾ってきてる?)

関数外にはグローバルっぽく扱いたい変数の宣言のみを置いて
初期化は名前を付けて関数にする

イベント内の処理も関数化する

そうするとソースを読むとき、先頭から追いかけるときは
原則関数だけが並んでいる形になり、そこでは細かな処理を気にする必要はない

イベントの処理ではイベント関数の先頭からソースを追いかけるが、
そこでも関数だけがあって細かな内容は気にしなくてよい、という形にする

あとはセンスも必要になるけど、処理の内容を的確に表す分かりやすい関数名であれば、
関数名それ自体がコメントのような役割をはたすので、さらに読みやすくなる
2021/09/09(木) 20:27:52.09ID:sZM33J3R0
フレームワーク無しで開発すると、最後には暴発する。
デザインパターン・ファイル分割などが、統一的に決まっていないから

他人のクソコードを誰も読みたくない

だから、Ruby on Rails を使って、
全員が同じ規約で、レールに乗る。Rails Way

Rails では、Node.js, React, Vue.js, Bootstrap を使う。
これらもフレームワークだから、規約で決まっている

だから、独自のデザインパターンを使うことや、我流は、すべて禁止されている。
つまり、全てフレームワークに従う

コードレビューも、フレームワークに従っていない部分を、修正させられる。
フレームワークのやり方と違いますよと

例えば、伊藤淳一のコードレビュー。
YouTube 動画、2018/10

RSpecで書かれたRailsチュートリアル 第6章のテストコードをレビューしてみた
2021/09/09(木) 20:34:47.79ID:B3AuMWY60
>>844
関数化すると、レビューやテストがやりやすくなる
というのも追加で

あと、関数化といっているのは規模が小さいからで、
規模が大きくなってきたらクラス化したりファイルを分けたりとかの考慮は当然必要になる
2021/09/09(木) 20:52:57.96ID:kZqbipt0M
関心事がごっちゃ混ぜだから分かりにくい

アプリケーションが管理する状態(モデル)とその状態をユーザーに見せる表現(ビュー)に対する処理を意識して分けること
MVCの基本を学ぶと良い

モデルの初期化処理やビューの初期化処理、モデルのsave/load処理を関数等でまとめること

モデルの変更イベント(mode: stopped -> running)をリッスンしてビューを更新する作りにすると関心事の分離的にも依存性の方向的にも見通しがよくなる
2021/09/09(木) 21:53:27.14ID:t1bpdD770
ねこ
2021/09/10(金) 00:38:04.25ID:mUaFezuu0
eslint、入れてみたところ明らかに怒られる筋合いのない箇所で大量に怒られが発生して鎮火に試行錯誤してたらクソ時間食って本末転倒だったので切ってしまいました・・・
2021/09/10(金) 11:56:08.39ID:L+jftwLU0
糞コード書くなゴラーかな?
851デフォルトの名無しさん (ワッチョイ 396e-GwBl [150.246.100.179])
垢版 |
2021/09/10(金) 15:55:30.36ID:rOEuM+530
>>844
変数は出来るだけローカルにして、関数化出来る部分は出来るだけ関数化するということですよね。
MVCも調べているところです。
これはMVCの3つのクラスに分ければいいんでしょうか?
2021/09/10(金) 21:07:41.01ID:kAVp3Lay0
Ruby on Rails が、MVC の代表

React, Vue.js のFlux 系フレームワーク。
Store, View, Action

サーバーがRails のAPI モード・Web Socket などで、
クライアント側のHTML が、React, Vue.js, Bootstrap が多い
2021/09/11(土) 04:28:54.23ID:TBXgXRUv0
>>851
ソースを修正してみた
https://codepen.io/cocotto/pen/OJgmXyo

自分はMVCとかよく分からんので、元のロジックは基本的にそのままで
機械的に細かく関数に分けてみただけだが

一応意識したのはタグの操作(insertAdjacentHTMLとかsetAttributeなどの行)は
ソースとしては非常に読みづらいので1行2行でも関数化したのと、
ボタンの状態変化をupdateButtonStatus()の1箇所にまとめ、
アクションの種類によらずその1種類の関数だけを呼べばよいようにしたことくらい
854デフォルトの名無しさん (ワッチョイ 396e-GwBl [150.246.100.179])
垢版 |
2021/09/11(土) 06:58:37.14ID:Uw+xpz9o0
mvcってどうやってエリアを分けるんでしょうか?
model controller viewのエリアです
単にコメントアウトで分けるのですか?
■ このスレッドは過去ログ倉庫に格納されています