+ 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/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のエリアです
単にコメントアウトで分けるのですか?
855デフォルトの名無しさん (ワッチョイ 396e-GwBl [150.246.100.179])
垢版 |
2021/09/11(土) 07:18:42.95ID:Uw+xpz9o0
>>853
回答どうも
似たような

タグの操作というのはmvcでいうところのviewですよね。
ボタンの状態もviewですよね。

controllerはキーイベントなどのことだと思います。

modelってどの部分が該当するんでしょうか
2021/09/11(土) 09:52:12.58ID:IblrjkB00
100年やっても、MVC を作れない。
MVC のRuby on Rails をやった方が良い

それで、React, Vue.js のFlux 系フレームワークで、
Store, View, Action

Model, Store は、データ
View は、HTML
Controller は、それ以外の雑多なもの
Action は、データを変更するイベント
2021/09/11(土) 09:56:20.99ID:sItjqXqz0
スネークマンショーのチリ紙交換のコント思い出したw
2021/09/11(土) 13:02:57.50ID:TBXgXRUv0
>>855
modelはビジネスロジックを扱う部分
今回のプログラムでは
modeなどの状態管理や累積時間を操作する処理が該当

>>似たような
最初からロジックは変更してないといっている

MVCやフレームワークはアプリを作成する上の考え方やお作法なので、
多人数のプロジェクトに参加する場合には覚えて使いこなすことが必須で、
理解している人同士では話が通じやすい

一方で、たとえばLaravelというフレームワークでは新規にプロジェクトを作成すると、
コードを1行も書いていない状態で、数千のファイルが生成される
開発ではお作法に従って適切なファイルを適切に修正していく必要があるが、
そもそもお作法を理解するまでに学習コストがかかり、理解するまでは読みやすいとは限らない
1ページ2ページのwebアプリでフレームワークを導入すべきかも検討が必要

とはいえ小規模なプログラムでも
ビジネスロジック部分ではUI操作を混ぜない、
UI操作の途中でビジネスロジックに影響を与えない、
などとした方が読みやすく保守性も上がる、とは言われていて、
本来的にはMVCなどの考え方を導入すべきかもしれないが、
小規模な趣味的アプリならUI操作部分を関数化して追い出すだけで
多少見やすくなるんじゃないか、というのが 853 の例

趣味でなく就職のトレーニングのつもりならMVCでもフレームワークでも頑張って勉強してもらうしかない
859デフォルトの名無しさん (ワッチョイ 396e-GwBl [150.246.100.179])
垢版 |
2021/09/11(土) 20:24:46.63ID:Uw+xpz9o0
↑回答どうも
趣味程度ですね。

ただ、それでも分かりやすくはしたいので、mvcの考え方だけ取り入れます。
本物のmvcがよくわかりませんけどね。
2021/09/11(土) 22:16:23.61ID:V1xpgUeJ0
>>859
早速、teratailでMVCの質問をしたんだな...
https://teratail.com/questions/358996
861デフォルトの名無しさん (ワッチョイ 396e-GwBl [150.246.100.179])
垢版 |
2021/09/12(日) 10:42:23.75ID:9YHRam0P0
javascriptだとmvcがなじまないから何らかのフレームワークを使うってことなんですかね?
2021/09/12(日) 11:03:01.64ID:iEJNB1kw0
>>861
それはhentaimanに直接聞くべき内容だと思うが
2021/09/12(日) 12:19:17.43ID:jZMYjdNi0
>>856
に書いたように、

Ruby on Rails は最初から、Node.js, Webpack, Babel を使う

多いのは、React, Bootstrap。
日本では、Vue.js も使う

最近の転職では、Vue.js, TypeScript も有利だと、
YouTube で有名な、雑食系エンジニア・KENTA が言ってる

サーバー側がRailsのAPIモードで、
フロントエンドが、React, Vue.js

ほとんどのベンチャー・学校・サロンは、これ
2021/09/12(日) 12:24:38.96ID:jZMYjdNi0
例えば、食べチョクでは、AWS, Ruby on Rails, React

若い娘が1人で起業するような場合は、Heroku, Rails, Bootstrap とか
2021/09/12(日) 14:42:19.18ID:KICGsmTmM
テラワロスな回答が2つもついててteratailのレベルの低さに驚愕した
一番基本のクライアントサイドのMVCを知らずにまともなUIコードを書けるわけがない
866デフォルトの名無しさん (ワッチョイ 396e-GwBl [150.246.100.179])
垢版 |
2021/09/12(日) 16:49:42.17ID:9YHRam0P0
javascriptでmvcは使うんですか?
違う概念があるんでしょうか?
2021/09/12(日) 17:04:40.45ID:jZMYjdNi0
YouTube で有名な、雑食系エンジニア・KENTA のサロン・動画を見ればわかるけど、

基本的には、どこの会社も転職用ポートフォリオは、Ruby on Rails のみ。
他のフレームワークのシェアが少ないので、それらで作っても誰も見ない。
Laravel, Django など

React, Vue.js も、バックエンドで使うかと言われれば、使わない

だから基本、サーバー側は、Rails のAPI モードで、
フロントエンドに、React, Vue.js, Bootstrap を使う
2021/09/12(日) 17:40:45.71ID:jZMYjdNi0
単純な例では、a.html に、
<button id="btn_1">押して</button>
と書いて、jQuery を読み込んでから、ボタンを押すと、ajax で、a.json を読み込む

$( function ( ) {
$('#btn_1').click(function(){
$.ajax({
url: 'a.json',
type: 'GET',
dataType: 'json'
}).done(function(data){
console.log( data )
});
});
} );

a.jsonには、
{ "title": "指輪物語" }
と書いておく

a.html上で、右クリックメニューから、
VSCode の拡張機能・Live Server を起動すれば、HTMLが表示される
(VSCode, Node.js は、インストールしておく)

a.jsonがデータ(モデル)で、a.htmlがView。
データがデータベースになれば、Rails などの本格的なフレームワークを使う

他にも、多くのページ・routing を設定するなら、Controller も必要になる
2021/09/12(日) 20:26:44.95ID:DMcq09zza
ttps://radiko.jp/reader/
Widgets: Google Tag Manager
JavaScript Libraries and Functions: Moment JSMoment JS
Web Servers: nginx
2021/09/13(月) 17:35:06.53ID:1UYrFVx4M
xamppのローカル上では何故かjQueryが作動してくれるのですが、そのファイルをエックスサーバーに上げると作動してくれません、、
気になったのはCDNの位置で、何故かheader.phpに記載されています
jQuery本文はindex.phpに記載してます

phpのファイルにはbodyが無いため、ネットで調べても検索結果が無いのですが・・確認すべき点があればご指摘いただけませんか?

教えていただきたいのは
jQueryを読み込ますCDNの位置とjQuery本文の記載場所です、、

宜しくお願い致しますm(_ _)m
2021/09/13(月) 17:39:20.42ID:AXurLSEfa
cdnはhead内
header.phpがどうなってるか知らんがそこにheadタグがあるならそこ
本文?はcdnのjQueryの読み込みより後ならhead内でもbody内でもいい
bodyが無いというのは抜け落ちてるか見落としかどっちか
2021/09/13(月) 18:25:35.94ID:grNREgJpM
もしかしてWordPress?
回答に必要な情報があるならちゃんと書いてね
2021/09/13(月) 20:51:33.89ID:HGulW+Fz0
header.php が単に、メニューバーなどを定義した、
部分テンプレート・パーシャルなのか、
それとも、HTML の<head>タグなのか?

<head>タグなら、body よりも、先に読み込まれるでしょ?
試しに、bodyの終了タグ直前で、読み込んでみれば?

もちろん、jQuery は、自分のコードよりも先に読み込まないと動かない
2021/09/13(月) 22:43:40.11ID:+vyrVLS2M
>>871-873
皆様有難うございます!
業者にwordpressで作成していただいたものをカスタマイズしてます
素人で検索ワードも効率的に選べなかったのですが、アドバイスをもとにネット検索をして少しだけわかってきました
今回、改修したいファイルはindex.phpですが、headとbodyはheader.phpにありました(何故か</body>は見当たらず・・)
なので、明日は</body>を書き込み、その直前にjQueryの本文を入れて試してみようと思います
2021/09/13(月) 23:20:03.86ID:grNREgJpM
まず今日までの作業は忘れて「WordPress jQuery」で検索
大抵jQueryは導入済で、自作のスクリプトの側を工夫すれば使える
正直不理解なまま業者の納入物をブッ壊してるように見えるぞ
2021/09/14(火) 00:46:24.59ID:b3xfsiCuM
>>875
有難うございます!
確かにCDNでjQueryが導入済みだったので、いきなりFanction以下の本文を記入してもxampp上では動いてくれたのですが、、
一応、ローカル環境だけでいじくり回して解らなくなったらバックアップのデータで復元してます

何故かサーバーにアップしたら動かない、、
ライブラリのバージョンが違うのかはどうやって判断すれば良いのでしょうか?
業者は2.2.1でしたが、3.6.0にすべきかどうか?
なぜ、bodyの終了タグが無いのか?
一応、body自体を消してみたけど、何ら崩れたりもせず動いてました

header.phpのheadの終了タグの前にjQueryの本文を記入しましたが、レイアウトが崩れました
index.phpに記載した内容に影響のあるscriptなので、別のファイルに記載したら駄目なのか?

一晩寝て、アドバイスの通り検索から始めて理解を深めてから先に進むことにします、、
2021/09/14(火) 08:12:14.43ID:b3xfsiCuM
>>873
一晩寝て思いついたのですが
header.phpはメニューだけを記述したファイルのようです
そこのheadにhtmlの宣言?CSSの呼び出し、CDNが記載されてました
他にhead,body,CDNを記述したファイルは見つかりません

そもそも.htmlというファイルが無いサイトって成り立つのでしょうか?
index.phpはトップページの内容を記述してますが、headもbodyも記述がありません、、
index.phpに記載の内容に対してjQueryを作動させたいのですが、、
xampp上では何故か上手くいってるんですよね
index.phpにbodyを新たに記述するってのは違反行為でしょうか?

そもそもhtmlの知識もなくカスタマイズしようとしてまして、、
2021/09/14(火) 09:07:31.26ID:O4ZAi6mt0
>>877
一般に公開するwebならその程度の知識でいじるのはやめといた方がいいよ
2021/09/14(火) 09:10:16.30ID:Hja/bGISM
body云々の話はどうでもいい
(header.php、footer.phpでワンセット)
htmlの勉強も必要だけどまずWordPressのお作法を勉強しろ(WordPress javascriptで検索)
原因を探るならページを表示した際のソースをxamppと本番環境で見比べてみればいい
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況