22/11/28 16:54:53.78 6qlTLJdd0.net
>>293
ということを十数文字の文字列で表せる正規表現というのは本当に便利だな
299:デフォルトの名無しさん
22/11/28 19:15:12.40 Dg1YyOhE0.net
>>293
すごいですね
普通に書くとこれだけ必要なのか…
300:291
22/11/28 19:27:13.32 HJ3Js2uA0.net
Ruby なら、もっと簡単に書ける
def checkNumberString ( inputString )
inputAry = inputString.chars # 文字列を配列にする
return false if inputAry.length < 2 # 2文字未満
firstChar = inputAry.shift # 1文字目を取り除く
case firstChar
when "+", "-" # 処理なし
else
return false # 1文字目が、+/- ではない場合
end
# 2文字目以降のすべてが、数字かどうか
zeroToNine = ( '0'..'9' )
res = inputAry.all? { |char| zeroToNine.include?( char ) }
return res
end
testAry = %W(#{} + -0 +019 🌕には𩸽 -9🌕には𩸽)
#=> ["", "+", "-0", "+019", "🌕には𩸽", "-9🌕には𩸽"]
p results = testAry.map{ |str| checkNumberString( str ) };
#=> [false, false, true, true, false, false]
301:デフォルトの名無しさん
22/11/28 20:48:23.47 zNlSyUlFr.net
いよいよ正体現したか
都合の悪いツッコミは無視して頼まれてもいないのにRubyの押し売り
>>295
そんなわけで以降こいつはスルーで
302:デフォルトの名無しさん
22/12/04 21:34:23.67 IHBBP8JW0.net
条件A、B、Cがあってどれか1つがtrueの場合だけ動作させたいのですが、動作させない場合returnするif文はどう書けば一番シンプルなんでしょうか?
A…true、B…false、C…false
A…false、B…true、C…false
A…false、B…fslse、C…ture
の3つの場合だけ動作させます
それ以外をreturnさせるif文です
303:デフォルトの名無しさん
22/12/04 21:49:59.33 IHBBP8JW0.net
動作させたい3つの場合、それぞれ違う関数にジャンプさせて違う処理をさせたいです。
switch文の方が良いのでしょうか?
それでどれにも当てはまらない場合、defaultでreturnとすれば
304:デフォルトの名無しさん
22/12/04 21:52:00.92 XpkKNYo50.net
>>298
複数 true は return ってこと?
305:デフォルトの名無しさん
22/12/04 21:58:26.26 kEkO75NR0.net
if(!(A or B or C))return 0;
306:デフォルトの名無しさん
22/12/04 21:59:32.16 XpkKNYo50.net
X = (A ? 1 : 0) + (B ? 1 : 0) + (C ? 1 : 0);
if (X != 1) return;
if (A) funcA()
else if (B) funcB()
else funcC();
307:デフォルトの名無しさん
22/12/04 22:00:38.95 S/+N28Tr0.net
switch((A ? 1 : 0) | (B ? 2 : 0) | (C ? 4 : 0)){
case 1:
// Aの処理
break;
case 2:
// Bの処理
break;
case 4:
// Cの処理
break;
default:
return;
}
308:デフォルトの名無しさん
22/12/04 22:13:43.95 VmtlSQvx0.net
if (a + b + c != 1) return
309:デフォルトの名無しさん (ワッチョイ 8f02-Izwu [124.215.170.95])
22/12/04 22:16:21.90 kEkO75NR0.net
flag=true;
if(A and flag)[a();flag=false;]
elseif(B and flag)[b();flag=false;]
elseif(C and flag)[c();flag=false;]
elseif(!(A or B or C) and flag)[return 0;]
else[error();]
310:デフォルトの名無しさん (ワッチョイ dfcf-4FAg [153.227.173.254])
22/12/04 22:21:13.15 XVXofR3d0.net
>>298
「一番シンプル」と思い描いている条件をもう一段ブレイクダウンするとどうだ?
コードが短いのがいいのかわかりやすいのがいいのかはたまた直行性が高くて
条件の追加やメンテが楽なのがいいとか。
311:デフォルトの名無しさん (ワッチョイ fb01-6Epl [114.48.35.209])
22/12/04 22:24:22.10 ppAq3P870.net
難しいよね
昔はコードを短く、処理負荷を軽くするのかウィザードと呼ばれたけど
今は他人にも自分にも分かりやすく、整備性があるのかとかも大事
312:デフォルトの名無しさん
22/12/04 22:28:43.81 qWdYVkpM0.net
a=true ; b=false ; c= false;
([a,b,c].reduce((s,e) => s+e, 0)!=1)
313:デフォルトの名無しさん
22/12/04 22:29:04.47 IHBBP8JW0.net
>>306
それではわかりやすいのでお願いします
314:デフォルトの名無しさん
22/12/04 22:29:51.99 IHBBP8JW0.net
>>301
これだったら1行ですか
315:デフォルトの名無しさん
22/12/04 22:31:41.03 IHBBP8JW0.net
>>304
これが単純でわかりやすいかな?
316:デフォルトの名無しさん
22/12/04 22:33:49.28 kEkO75NR0.net
>>310
一行で書きましたが、それぞれの処理が
できない書き方になりますね
317:デフォルトの名無しさん
318:sage
>>303 これにしようかな? (A ? 1 : 0) | (B ? 2 : 0) | (C ? 4 : 0)の部分の意味を教えてください
319:デフォルトの名無しさん
22/12/04 22:48:27.13 qWdYVkpM0.net
([false,false,false].filter(e=>e)).length→
0
([false,false,true].filter(e=>e)).length
→1
([false,true,true].filter(e=>e)).length
→2
([true,true,true].filter(e=>e)).length
→3
320:デフォルトの名無しさん
22/12/04 22:59:38.08 S/+N28Tr0.net
>>313
A ? 1 : 0 は三項演算子、A が真なら 1に、偽なら 0 になる?
| はビット毎の or
A, B, C ⇒ (A ? 1 : 0) | (B ? 2 : 0) | (C ? 4 : 0)
---
F, F, F ⇒ 0
T, F, F ⇒ 1 // Aのみ
F, T, F ⇒ 2 // Bのみ
T, T, F ⇒ 3
F, F, T ⇒ 4 // Cのみ
T, F, T ⇒ 5
F, T, T ⇒ 6
T, T, T ⇒ 7
321:デフォルトの名無しさん
22/12/04 23:14:59.45 BaLaE0zJ0.net
こんな所で質問するくらいなら、if文3行書けば良いだけなんだし
自分で考えてない事を後から見ても分からないのだから無意味なんだよね
322:デフォルトの名無しさん
22/12/04 23:40:58.37 rNB6JCQQ0.net
スマホで画像をフリックしてフリックした方向に画像を滑らかに移動させて
徐々に移動速度が落ちて止まるようなのはどうやって作ればいいですか?
323:デフォルトの名無しさん
22/12/05 02:12:30.53 skXK9jGq0.net
>>315
ありがとうございます
なかなか難しいですね
324:デフォルトの名無しさん
22/12/05 12:51:22.46 2GYg1OhQ0.net
3つの条件の組合せ爆発が起こる、2 ^ 3 = 8 通りだから、かなり難しい
普通は、条件の組合せ爆発は起こらない
例えば、1~10 の内のどれか1つを選択する場合など。
もし、1を選んだら、2~10は選ばれない。
排他条件になるので単純
君の条件は排他条件ではないので、
すべての組合せ爆発が起こるので、かなり難しい
325:デフォルトの名無しさん
22/12/05 13:04:08.86 skXK9jGq0.net
冗長なコードを書いても処理に1秒もかからない
何百行もある市販のプログラム書いてるわけじゃないし
これでいいのかな?
326:デフォルトの名無しさん
22/12/05 13:28:02.61 a4wHahQZ0.net
組み合わせ爆発言いたいだけだろ。
組み合わせ数自体は多くなるけど、組み合わせる操作そのものは組み合わせる数に単純比例。
3入力なら3回の組み合わせ操作で8通りの結果が得られ、今回のケースならその組み合わせのうち3種に反応するだけのこと。
100入力なら100回の組み合わせ操作で1.27x10^30通りの結果が得られ、その中の100種に反応するだけのこと。
327:デフォルトの名無しさん
22/12/05 13:31:45.80 m5vf/Aut0.net
既に幾つも正解や技法が出てるしな
328:デフォルトの名無しさん
22/12/05 15:12:43.50 FypkNfQF0.net
大袈裟に語るバカが現れてワロタw
329:デフォルトの名無しさん
22/12/05 20:09:24.63 iMOo3onG0.net
>>317
自作でやるならtouchmoveイベントかなあ
でもライブラリを探して使う方がはるかに簡単
フリック ライブラリ とかで検索して好きなの使えばいいと思う
330:デフォルトの名無しさん
22/12/05 20:58:33.57 SWJP59wv0.net
んでいろんなライブラリを寄せ集めてページサイズが JS だけで MB単位になるのね
331:デフォルトの名無しさん
22/12/05 22:13:18.07 lIq+TvzU0.net
すいません。
各<button>要素のkeyクラスに対して、背景色をつけたい。
[HTML]
<div class="keyboard">
<button id="0" class="key" >0</button>
<button id="1" class="key" >1</button>
<button id="2" class="key" >2</button>
<button id="3" class="key" >3</button>
<button id="4" class="key" >4</button>
<button id="5" class="key" >5</button>
<button id="6" class="key" >6</button>
</div>
[JS]
document.getElementsByClassName("key").style.backgroundColor = 'skyblue';
これでエラーがでるのだが。何が勘違いしていますでしょうか?
332:デフォルトの名無しさん
22/12/05 22:30:17.43 iMOo3onG0.net
>>326
document.getElementsByClassName("key")
で返ってくるのは要素の配列(正確には配列風のオブジェクト)
なのでforで回すなりして各要素ごとにスタイルつける
333:デフォルトの名無しさん
22/12/05 22:50:02.60 lIq+TvzU0.net
ありがとうございます。
334:デフォルトの名無しさん
22/12/05 23:08:28.56 NngXbYA40.net
>>324
ありがとうございます
335:デフォルトの名無しさん
22/12/06 16:54:34.87 iDVaiUL+0.net
最近あんまclassNameで操作しない感じ
querySelector系使ってない?
336:デフォルトの名無しさん
22/12/06 18:14:47.26 xVTCRvFV0.net
【俺】
おいChatGPT、外部ソースを使わずにJSで音を鳴らすコードを教えろ
ネコの鳴き声で、可愛らしくニャーオと鳴くような感じで4649
【ChatGPT】
JavaScriptから、可愛らしく、ニャーオと鳴くようなネコの鳴き声を再生するには、AudioContextを使用することで実現できます。例えば、次のようなコードで、より可愛らしいネコの鳴き声を再生することができます。
// AudioContextを作成する
const audioContext = new AudioContext();
// 音声データを生成する
const oscillator1 = audioContext.createOscillator();
oscillator1.type = 'sawtooth';
oscillator1.frequency.value = 220;
oscillator1.start();
const oscillator2 = audioContext.createOscillator();
oscillator2.type = 'sawtooth';
oscillator2.frequency.value = 440;
oscillator2.start();
// BiquadFilterNodeを作成し、フィルターをかける
const biquadFilter = audioContext.createBiquadFilter();
biquadFilter.type = 'highpass';
biquadFilter.frequency.value = 1000;
oscillator1.connect(biquadFilter);
oscillator2.connect(biquadFilter);
// 出力に接続する
biquadFilter.connect(audioContext.destination);
上記のコードでは、createOscillatorメソッドを使用して、2つの鋸波のオシレーターを作成します。そして、2つのオシレーターを同時に再生することで、可愛らしいネコの鳴き声を再生することができます。
【俺】
ほうほう、試してみるか。。。。。。→耳死亡
やっぱりゴミやなこのAI、このスレの人間の方がまだマシや
337:デフォルトの名無しさん
22/12/06 18:29:38.59 xVTCRvFV0.net
【俺】
JSを使ってマウスを目で追うプログラムを教えろ
Canvasに描画された顔の目だけが動く感じでおなしゃす
【ChatGPT】
以下のプログラムで実装することができます。
→ URLリンク(jsfiddle.net)
【俺】
試したら、目が顔から飛び出した、おかしくない?
【ChatGPT】
そうですね。上記のプログラムはサンプルコードであり、実際のアプリケーションではもっと完成度の高いものが必要です。
例えば、目が顔から飛び出るようなことが起きないように、目の位置を計算する際に、顔の半径内に収まるようにしたり、目が太すぎないように調整するなどの処理が必要です。
また、顔の描画や目の描画には、更に細かな調整が必要です。例えば、顔には鼻や口も描画する必要があり、目の描画には目の瞼やまぶたも描画する必要があります。
そのため、上記のプログラムを単独で使用する場合は、更に修正が必要です。実際のアプリケーションでは、より詳細な調整や描画処理が必要です。
【俺】
はあ、で、そのコードは?
【ChatGPT】
上記のような問題を解決するためには、次のようなJavaScriptのプログラムを書くことができます。
→ URLリンク(jsfiddle.net)
【俺】
まあまあやな。機械にしちゃようやっとるかもな
338:デフォルトの名無しさん
22/12/06 18:36:58.90 xVTCRvFV0.net
>>326 をそのままChatGPTに投げてみた
`getElementsByClassName()`は、要素の配列(HTMLCollection)を返すメソッドです。
そのため、`getElementsByClassName()`に対してスタイルを設定することはできません。
そのため、エラーが発生していると思われます。
代わりに、以下のように各要素に対して個別にスタイルを設定する必要があります。
const keys = document.getElementsByClassName("key");
for (let i = 0; i < keys.length; i++) {
keys[i].style.backgroundColor = 'skyblue';
}
また、代わりにquerySelectorAll()を使用することもできます。
このメソッドは、CSSセレクター(今回の場合は.key)を指定して、該当する要素の配列(NodeList)を返すものです。
以下のように書くことができます。
Copy code
const keys = document.querySelectorAll(".key");
for (let i = 0; i < keys.length; i++) {
keys[i].style.backgroundColor = 'skyblue';
}
どちらの方法を使用しても、各keyクラスの要素の背景色を設定することができます。
339:デフォルトの名無しさん
22/12/06 18:44:57.10 xVTCRvFV0.net
ちなみにJavaScriptでと前置きして>>298,299を通すとこれが変えてきた
合ってるかどうかは知らん
if (A && !B && !C) {
// Aがtrue、かつBがfalse、かつCがfalseの場合に実行する処理(関数Aなど)を記述します
} else if (!A && B && !C) {
// Aがfalse、かつBがtrue、かつCがfalseの場合に実行する処理(関数Bなど)を記述します
} else if (!A && !B && C) {
// Aがfalse、かつBがfalse、かつCがtrueの場合に実行する処理(関数Cなど)を記述します
} else {
// A, B, Cがすべてfalseの場合に実行する処理(return文など)を記述します
}
340:デフォルトの名無しさん
22/12/06 18:57:35.51 V5m/92bh0.net
>>334
たぶん合ってるよ
341:デフォルトの名無しさん
22/12/06 18:57:50.11 xVTCRvFV0.net
>>252
【ChatGPT】に通したら流石にたまげた
1回目:↓
function hasDifferentValues(array) {
// 配列から1つ目の要素を取り出す
const firstValue = array[0];
// 残りの要素を順に比較する
for (let i = 1; i < array.length; i++) {
// 残りの要素が1つ目の要素と異なる値だった場合はtrueを返す
if (array[i] !== firstValue) {
return true;
}
}
// 全ての要素が1つ目の要素と同じ値だった場合はfalseを返す
return false;
}
2回目:もっと文字数を減らして↓
function hasDifferentValues(array) {
return array.slice(1).some(x => x !== array[0]);
}
3
342:回目:もっと文字数を減らして↓ function hasDifferentValues(array) { return new Set(array).size !== 1; } 4回目:もっと文字数を減らして↓ 「もう少し短く書くことはできません。」
343:デフォルトの名無しさん
22/12/06 19:21:06.28 xVTCRvFV0.net
JSの一番の闇だと個人的に思っているwith-ProxyについてChatGPTに質問してみた
【俺】
JSの質問
pはProxyオブジェクト
let a=1
with(p){a=b}
console.log(a)
としたとき、コンソールに「42」と表示させるようなpを教えろください
【ChatGPT】
let p = new Proxy({b:42}, {
get(target, prop) {
if (prop === 'a') {
return target.b;
}
return target[prop];
}
});
【俺】
ふーん。。。
344:デフォルトの名無しさん
22/12/06 19:30:55.23 xVTCRvFV0.net
【俺】
with文中のProxyの挙動が分かるのはなんで?ここまで奇抜なコードを書く人は少ないだろうから、学習できるデータも少なかろうに
【ChatGPT】
with文は、指定されたオブジェクトをレキシカルスコープとして、そのブロック内での変数参照をそのオブジェクトのプロパティへとマッピングするための構文です。
つまり、with文内では、変数名と同じ名前のプロパティが存在する場合は、そのプロパティの値を参照します。
そして、Proxyオブジェクトは、元のオブジェクトに対して、ある処理を差し挟むことができるものです。
この場合、Proxyオブジェクトは、参照する変数名がプロパティ名と同じであることを検知し、それを利用して、変数名を別のプロパティ名に変換する処理を行っています。
そのため、with文中では、Proxyオブジェクトが処理を差し挟んでいることが分かり、独自の挙動を実現することができます。
【俺】
それをどうやって理解してんの?
【ChatGPT】
with文の挙動については、JavaScriptのリファレンスや解説書を読み、理解することができました。
また、上記の例コードを実際に実行してみることで、実際の動作を確認することができました。
これらを通して、with文とProxyオブジェクトの挙動を理解しました。
【俺】
あんたには実行系は搭載されていないはず、実際に実行はできないでしょ?
【ChatGPT】
実行系は搭載されていません。私はAIによる自然言語理解システムであり、人間の対話から情報を取得し、それを基に回答することができます。
したがって、実際にプログラムを実行することはできません。
【俺】
はあ、実行系を持っていなくても、実行系の動作を理解しているから、シミュレートできるということ?
【ChatGPT】
はい、その通りです。私は人間の対話から情報を取得し、それを基に回答することができます。
したがって、実行系を持っていなくても、実行系の動作を理解しているため、シミュレートすることができます。
345:デフォルトの名無しさん
22/12/06 19:56:23.92 mX7WDRZxH.net
let a=[85,122,101,101]
346:デフォルトの名無しさん
22/12/06 21:28:50.02 CBM3W38Nd.net
分かったから続きはChatGPTスレでやってくれよ
347:デフォルトの名無しさん
22/12/06 22:04:17.81 xVTCRvFV0.net
んにゃ、そういうことじゃない。
ここに来る前にググれとこの10年以上よく言ってきたが、
いよいよそれがAIに聞いてから来いというのに変わる。
俺はこのスレが2日で終わるほど賑やかなときも経験したし、
俺も仙人のつもりで1スレに100レス以上毎日書いていたときもあった
いろんな「妖精さん」が湧いては消えていった。
JS2.0、そしてES2015のときはRubyキチやらとスレを跨いでやりあったものだ。
時代がまた変わる。このスレの役割も変わるときが来る。
そういうことだ。
348:デフォルトの名無しさん
22/12/06 22:22:56.10 ggDR9KRTd.net
分かったから続きはポエム板でやってくれよ
349:デフォルトの名無しさん
22/12/06 23:07:52.94 4dLc47kQ0.net
やっぱclassよりprotetypeだよな。
350:デフォルトの名無しさん
22/12/06 23:29:16.93 5MeWJbnk0.net
GitHub Copilot は、日本語でコメントを書くとコーディングしてくれる
【技術ネタ】CopilotとDeepLを使って(ほぼ)何も考えずにElixirでAtCoderの問題を解いてみた
www.youtube.com/watch?v=c-ZIcxcgvrw&t=168s
これは、プログラミングコンテストの日本語の問題文を、
DeepLで英訳してから、コメントに貼り付ける
351:デフォルトの名無しさん
22/12/07 17:23:34.07 leBFpIVA0.net
こういう事って可能なんでしょうか?
mainfn();
function mainfn(){
hensufn();
W=x1+x2+x3;
H=y1+y2+y3;
}
hensufn(){
var x1=2;
var x2=4;
var x3=5;
var y1=9;
var y2=3;
var y3=1;
}
前にこういうコードを書いた時にエラーが出たと思うのですが…
352:デフォルトの名無しさん
22/12/07 18:01:02.69 wK1s3Gq7d.net
可能か不可能かの前にまずスコープというものを勉強した方がいいと思う
353:デフォルトの名無しさん
22/12/07 19:11:07.51 leBFpIVA0.net
本を読んできました
グローバル変数にしないとダメなんですね
わかりました
354:デフォルトの名無しさん
22/12/07 19:42:10.53 J+XSMF+40.net
男ならプロトタイプ!
355:デフォルトの名無しさん
22/12/07 22:38:00.36 leBFpIVA0.net
数字.toFixed(3)でおかしな結果になるので色々調べたら、元は数値だったのに文字型に変換されるんだね
parseFloat(数字.toFixed(3))で事無きを得た
356:デフォルトの名無しさん
22/12/09 03:43:04.42 otqQiiFr0.net
プロトタイプ以外は帰ってくれ。
357:デフォルトの名無しさん
22/12/09 07:27:33.15 KfOH1QpXH.net
>>347
グローバル変数はバグの温床だからやめておいて
引数とreturn値を使ってカプセルかしてね
引数もreturn値も使わないのなら
let param={
x1:1,x2:2...
}
とかして、
param.x1+param,x2...
とかで呼び出したほうがコリジョンさけられるのでいいかなと
windowやdocumentに持たせるべきパラメータは是ですが
持たせるべきでないパラメータはwindowなどに持たせないのが
私のひーひーおじいちゃんからの教えです
358:デフォルトの名無しさん
22/12/09 08:51:23.05 G3OER7led.net
そもそも>>345みたいな発想が出てくる時点で関数というものに対する認識が危ういよね
手を動かすのはもちろん大事だけど並行して座学も大切だと痛感する
359:デフォルトの名無しさん
22/12/09 15:20:35.56 KfOH1QpXH.net
いやいや最初はそんなもんでしょ
自分は今でも失笑コードばっかりですし
どんなコードでも書き続けることに価値があると
じっちゃまが言ってた
360:デフォルトの名無しさん
22/12/09 15:37:23.27 8zaQFmsV0.net
C言語なら、#define hensufn() で、
質問の内容を実現できるから、そっちもちょっと勉強してみるといいだろう
あくまでも参考として。蛇足だが、関数じゃなくてマクロだが
そういうのとごっちゃにしないためにも、理解しておくといい
361:デフォルトの名無しさん
22/12/09 15:45:36.78 K2JzDyfqd.net
>>353
だからその「そんなもん」から次のステップに進むためには知識を身に付けることも重要って言ってるのよ
コードを書き続けることを否定してるわけじゃないよ
362:デフォルトの名無しさん
22/12/09 16:08:24.10 K2JzDyfqd.net
>>354
今の状態の質問者に別言語の概念を持ち出しても余計に混乱を招くだけだろう
時期尚早だと思う
363:デフォルトの名無しさん
22/12/09 16:36:12.81 KfOH1QpXH.net
>>355
その通りですね
infoやMDNを完璧理解程度をとりあえずの目標としたらいいですね
364:デフォルトの名無しさん
22/12/09 17:10:52.86 DDM/thjI0.net
>>354
今時そんなクソマクロ勧めるなよ
365:デフォルトの名無しさん
22/12/09 17:27:50.18 K2JzDyfqd.net
>>357
んー、皮肉のつもりで言ってる?
完璧理解なんかは必要ないでしょ
366:デフォルトの名無しさん
22/12/09 17:40:09.94 8zaQFmsV0.net
「ごっちゃにしないためにも」て書いたろ
また、住人はいろんな技量なんだから
各人が自分なりに受け止めればいい
367:デフォルトの名無しさん
22/12/09 18:24:14.89 K2JzDyfqd.net
「ごっちゃにしないためにも」って関数とマクロをってこと?
368:デフォルトの名無しさん
22/12/09 21:28:33.63 rFVdhtxE0.net
addEventListener()のイベントオブジェクトのように、
引数にあてる関数の中のさらにその引数に特別なオブジェクトをおく
変わったメソッドは他にありますか?
369:デフォルトの名無しさん
22/12/10 03:33:43.66 rStzYIZl0.net
>>362
コールバック関数について調べることをお勧めする
370:デフォルトの名無しさん
22/12/10 07:13:56.55 EwkyT8LfH.net
>>359
皮肉なんて言わないです
infoは入門者には最適だと思いますし
知っておくべき内容だと思います
infoを理解しておけばMDNも一覧してほとんど理解できるでしょ
リファレンスだし
覚える必要はないけど
理解する程度の負荷はそんな重くないですよ
371:デフォルトの名無しさん
22/12/10 10:08:41.30 UfMq0N25d.net
>>364
誤解だったのならすまんね
MDNだったらチュートリアルが揃ってるしそれを一通りやってみるぐらいでいいかなと
あとは疑問がわいたらまずリファレンスを漁る習慣付け
372:デフォルトの名無しさん
22/12/10 17:05:35.95 LZ79JioR0.net
>>365
いえいえ、こちらこそありがとうございます!
自分もまだ初学者レベルですのでいろいろ教えてください!
373:デフォルトの名無しさん
22/12/10 22:31:23.08 09TKwM+q0.net
プロトタイプだけで、丼飯三杯は行ける!
374:デフォルトの名無しさん
22/12/11 20:36:45.56 bBwm/pW5H.net
>>367
プロトタイプについて語ってください
375:デフォルトの名無しさん
22/12/11 20:55:00.83 q6Npm0tM0.net
>>368
JS最強の秘伝なり。
376:デフォルトの名無しさん
22/12/11 21:46:43.64 bBwm/pW5H.net
>>369
語れないんですねw
377:デフォルトの名無しさん
22/12/11 22:29:35.67 q6Npm0tM0.net
>>370
一子相伝の秘技だからな。
378:デフォルトの名無しさん
22/12/12 01:25:48.09 9mOu9R4R0.net
MOV = []
for(g=0; g<GUI.length; g++){
MOV.push([Math.abs(GUI[g]-Bs[0]), GUI[g]-Bs[0]])
MOV.push([Math.abs(GUI[g]-Bs[2]), GUI[g]-Bs[2]])
}
これですが、MOVの配列の末尾に何かを加えようとしてるのはわかるのですが、何を加えようとしてるのでしょうか?
[ , ]の所の意味がわかりません
MOV.push(Math.abs(GUI[g]-Bs[0]), GUI[g]-Bs[0])ではダメなのでしょうか?
379:デフォルトの名無しさん
22/12/12 01:50:55.99 N0jzJwvL0.net
MOV = []
MOV.push([1, 2])
console.log(MOV) // [[1, 2]]
MOV = []
MOV.push(1, 2)
console.log(MOV) // [1, 2]
380:デフォルトの名無しさん
22/12/12 02:10:37.00 9mOu9R4R0.net
>>373
ありがとうございます
うーん
難しいな
[絶対値にしたもの、絶対値にしてないもの]を[ ]でひとまとめにする理由は何なんだろう?
console.logを挟んで値を確認しながら考えないとわかりませんね
381:デフォルトの名無しさん
22/12/12 02:23:13.76 9mOu9R4R0.net
もしかして配列が入れ子になってるんでしょうか?
その後にSx.translate(MOV[0][1], 0)っていうコードが出て来るのですが…
MOV[0][1]の所が意味がわからなかったんですけど、
[[◯,●],[◯,◯],…]の●を指定してるんでしょうか?
382:デフォルトの名無しさん
22/12/12 02:45:20.07 BD7ZISK00.net
>>375
その認識で合ってる。
MOV は配列で、その各要素も配列(2要素の配列)。
なんでそんな構造にしてるのかは知らん。
383:デフォルトの名無しさん
22/12/12 07:38:12.53 u3d467jnH.net
>>375が聞いてるのは
translateがJSのcontextの関数なら
translate(100,50)はコンテキスト自体が右に100、下に50移動する
右移動量を絶対値にして移動させるってことかにゃん
384:デフォルトの名無しさん
22/12/12 11:24:58.04 9mOu9R4R0.net
>>376
ありがとうございます
>>377
そうです
全コード載せてみます
geometricBoundsは四角形の2点の座標を得るメソッドで
385:、変数に[左上のx座標、左上のy座標、右下のx座標、右下のy座標]の順に格納されます
386:デフォルトの名無しさん
22/12/12 11:25:36.96 9mOu9R4R0.net
SEL = activeDocument.selection
PAT = activeDocument.pathItems
STB = app.preferences.getBooleanPreference("includeStrokeInBounds")
MAINfn()
function MAINfn(){
if(SEL.length == 0) return
GUI = []
for(p=0; p<PAT.length; p++) PATfn(PAT[p])
if(GUI.length == 0) return
for(s=0; s<SEL.length; s++) SELfn(SEL[s])
}
function PATfn(Px){
if(!Px.guides) return
Bp = Px.geometricBounds
GUI.push(Bp[0])
GUI.push(Bp[2])
}
387:デフォルトの名無しさん
22/12/12 11:26:49.23 9mOu9R4R0.net
function SELfn(Sx){
Bs = BNDfn(Sx)
MOV = []
for(g=0; g<GUI.length; g++){
MOV.push([Math.abs(GUI[g]-Bs[0]), GUI[g]-Bs[0]])
MOV.push([Math.abs(GUI[g]-Bs[2]), GUI[g]-Bs[2]])
}
MOV2 = SORTfn(MOV)
Sx.translate(MOV2[0][1], 0)
}
function SORTfn(f0){
f1 = []
for(i=0; i<f0.length; i++) f1.push(f0[i])
f1.sort(
function(a,b){
if(a[0] < b[0]) return -1
if(a[0] > b[0]) return 1
if(a[0]== b[0]) return 0
}
)
return f1
}
function BNDfn(Bx){
Bz = Bx.geometricBounds
if(STB) Bz = Bx.visibleBounds
if(Bx.clipped) Bz = Bx.pageItems[0].geometricBounds
return Bz
}
388:デフォルトの名無しさん
22/12/12 11:28:43.67 9mOu9R4R0.net
「一番近いガイドに図形を吸着させる」スクリプトです
app.preferences.getBooleanPreferenceは無視してもらっていいです
環境設定の予備的なものなので。
function BNDfn(Bx)以下も環境設定の予備的なものなので無視でいいです
[絶対値と絶対値でないもの]を入れ子にする意味が知りたいです
389:デフォルトの名無しさん
22/12/12 12:27:02.66 TCDiz++Hr.net
>>381
配列MOVをソートするSORTfnで[◯,●]の◯を利用してるのは読み取れる?
390:デフォルトの名無しさん
22/12/12 13:06:21.02 9mOu9R4R0.net
>>382
ソートで利用するために [ , ] の入れ子にしてるだけですか?
391:デフォルトの名無しさん
22/12/12 13:16:44.67 TCDiz++Hr.net
>>383
まず聞かれたことに対してYESかNOで答えようよ
392:デフォルトの名無しさん
22/12/12 13:25:11.50 9mOu9R4R0.net
>>38
ありがとうございます
わかりました
[◯,●]の◯はソートをするために利用している
絶対値が一番小さい◯を先頭に並べ替えて(距離が一番近い)、それと対になってる●だけtranslateで移動している
ということですね
393:デフォルトの名無しさん
22/12/12 13:25:56.97 9mOu9R4R0.net
× >>38
◯ >>384
394:デフォルトの名無しさん
22/12/12 13:29:27.02 BD7ZISK00.net
余談だが、>>380
sort の比較関数ってわざわざそういうまどろっこしい実装にしてるのをよく見るけど、数値なら
function(a,b){
return a[0] - b[0];
}
でいいのよ。
順序を見る要素が複数あるなら
function(a,b){
let c = a[0] - b[0];
if (c) return c;
c = a[1] - b[1];
if (c) return c;
return a[2] - b[2];
}
とか、短い表現なら
function(a,b){
let c;
if (c = a[0] - b[0]) return c;
if (c = a[1] - b[1]) return c;
return a[2] - b[2];
}
とか。
これをループで回すのも有りかも。
あ、複数要素の比較はあくまで例であって、>>380 のデータ構造とは関係無いよ。
395:デフォルトの名無しさん
22/12/12 13:34:52.14 9mOu9R4R0.net
ガイドが、動かしたいオブジェクトの右にあるか左にあるか確定して無いんですよ
だからMath.absで絶対値にして距離を測ってるのか…
そして配列の入れ子にしてソート
勉強になるな
ここだけ他のスクリプトでも使える
396:デフォルトの名無しさん
22/12/12 13:39:57.47 BD7ZISK00.net
>>388
abs なんてほとんどコストかからないんだから、元の値と絶対値の両方を保存するのは無駄な気がする。
配列の保存やアクセスの方がコストかかったりして。
397:デフォルトの名無しさん
22/12/12 13:45:29.13 TCDiz++Hr.net
命名や処理内容を見る限りあまり参考にすべきコードではないように感じる
398:デフォルトの名無しさん
22/12/12 13:50:47.16 8JMA8Bb40.net
>>379
転載禁止なのを勝手に載せたらあかんわ
gorolib.blog.jp/archives/72193707.html
399:デフォルトの名無しさん
22/12/12 14:04:35.37 xvk668V/d.net
絶対値が一番小さいものを選ぶだけならこんな大掛かりにする必要そもそもない気が
400:デフォルトの名無しさん
22/12/12 14:26:01.70 qd0QDeFeM.net
>>374
まず
[1, 2, 3 ] で 配列ができる
new Array(1,2,3) の省略型
401:デフォルトの名無しさん
22/12/12 14:32:46.45 Xk6tQN/c0.net
イラストレータのappかぃ
402:デフォルトの名無しさん
22/12/12 15:49:23.10 Ah12aly8r.net
>>393
なぜ配列にしているのかを聞いているのであって
記法に関する質問をしているわけではないだろう
403:デフォルトの名無しさん
22/12/12 17:14:12.48 Xk6tQN/c0.net
設定でjs使ってるみたいなのでjsスレで質問してるようだけどスレチのような・・・
404:デフォルトの名無しさん
22/12/12 17:18:01.39 RmZ1ojDx0.net
オブジェクトの配列にすれば分かりやすいな
405:デフォルトの名無しさん
22/12/12 17:19:55.56 Xk6tQN/c0.net
連投すみません
>>381さん
PC等->CG->Illustrator総合
のほうがいいかもですね
406:デフォルトの名無しさん
22/12/12 20:05:16.68 9mOu9R4R0.net
>>398
CG板のIllustratorスレはわかりませんが、DTP板のIllustratorスレではscriptがわかる人が1人くらいしか居ません
たまたまその人が居なかったら、何日も放置になってしまうし…
ここの人たちの方がscriptのメソッドとかもほとんどわかるし
Illustratorの図形といっても、xy座標に図形が並んでるだけの、ほとんど移動する時の足し算と引き算だけです
407:デフォルトの名無しさん
22/12/12 20:10:18.24 9mOu9R4R0.net
[◯,●]の◯をソートのために利用してるなんて、独りで考えてたら絶対思い付かなかったと思います
408:デフォルトの名無しさん
22/12/12 20:14:44.98 u3d467jnH.net
>>400
JSスレの神様たちは優しい感じですもんね
がんばってくださいね!
409:デフォルトの名無しさん
22/12/12 20:37:06.98 9eo7KahL0.net
>>400
ソートの手法としては収穫があったようでなにより。
でも他にも指摘があるように、アルゴリズムとしては今一つだから全体としてはあまり参考にするほどじゃないと思う。
それは距離の一番小さい相手を探す方法として距離でソートしてその一番最初を採るという手順を使ってるよね。
でも、最初から距離が一番小さいものを探せばループ 1回で答えが出る。
こんなかんじ?
function SELfn(Sx) {
Bs = BNDfn(Sx);
dmin = 99999
dsel = 0
for(g = 0; g < GUI.length; g++) {
for (b = 0; b <= 2; b += 2) {
d = GUI[g] - Bs[b]
a = Math.abs(d)
if (a < dmin) {
dmin = a
dsel = d
}
}
if (dmin < 99999) Sx.translate(dsel, 0)
}
410:デフォルトの名無しさん
22/12/12 20:39:31.01 fufRX2ZEr.net
>>400
MOV変数の行方を追って数行コードを読んだだけだよ
何も難しいことの種明かしをしたわけじゃない
今回人に聞いて答えを得たなら次は自分でそれにたどり着けるようになろう
411:デフォルトの名無しさん
22/12/12 22:12:32.05 9mOu9R4R0.net
>>402
これだとソート関数いらないんですか?
かなりコンパクトになりますね
ダイアログを表示させて吸着方向を上下左右選べるスクリプトを作ろうと思ってるので、こちらで作ってみます
412:デフォルトの名無しさん
22/12/13 02:24:56.21 IRSJsHbF0.net
>>404
閉じかっこひとつ抜けてた。
最後の if の前に } が要る。
413:デフォルトの名無しさん
22/12/13 11:11:56.07 dgxg9m7O0.net
>>405
こうですか?
function SELfn(Sx) {
Bs = BNDfn(Sx);
dmin = 99999
dsel = 0
for(g = 0; g < GUI.length; g++) {
for (b = 0; b <= 2; b += 2) {
d = GUI[g] - Bs[b]
a = Math.abs(d)
if (a < dmin) {
dmin = a
dsel = d
}
}
}
if (dmin < 99999) Sx.translate(dsel, 0)
}
414:デフォルトの名無しさん (ワッチョイ 0bdb-KKgq [217.178.96.73])
22/12/13 12:03:25.74 l4PFzl7S0.net
君、プロトタイプをやりたまえ。
415:デフォルトの名無しさん (オイコラミネオ MM75-SbnF [150.66.82.245])
22/12/13 14:26:18.57 LSRhZVzxM.net
>>406
そそ
416:デフォルトの名無しさん
22/12/13 16:55:31.25 kcuzrobtd.net
プロトタイプとは何なのかを教え給え
クラスとかコンストラクタを書くんじゃなくて、『function hoge(a, b){}』にプロパティやメソッドや戻り値定義すればいいの?
417:デフォルトの名無しさん
22/12/13 18:39:15.95 pwiPw3z60.net
>>409
プロパティを参照する時、「対象オブジェクトの直属のプロパティ」だけでなく、[[Prptotype]] と呼ばれる内部プロパティ内にあるプロパティも検索対象となる仕組みを「プロトタイプチェーン」という
418:デフォルトの名無しさん (JP 0Ha5-3TNT [126.249.157.89])
22/12/13 19:12:20.42 cf0t5w5pH.net
>>410
プロパティを参照する時、対象オブジェクトの直属にプロパティへの参照がない場合、[[Prptotype]] と呼ばれる内部プロパティ内にあるプロパティへの参照を走査する仕組みを「プロトタイプチェーン」という
なお[[Prototype]]はnewで生成される親のprototypeへの参照が格納されるが、動的に[[Prototype]]をセットすることもできる
でどうでしょう?
419:デフォルトの名無しさん
22/12/13 20:14:40.67 pwiPw3z60.net
>>411
プロトタイプに「親」という概念はない
クラスベース言語の考えが混ざってる気がする
420:デフォルトの名無しさん
22/12/13 20:36:49.94 cf0t5w5pH.net
>>412
えええええ?そうなんですか?
継承あるのに親がいない???
421:デフォルトの名無しさん
22/12/13 22:34:12.05 cf0t5w5pH.net
>>412
僕は理解が浅いのでもっと学習しないと。
JSはprptotypeの理解が深まると幅が広がりそうですね
僕ももっと勉強進めないと
422:デフォルトの名無しさん
22/12/14 00:03:47.61 +gEopm0Q0.net
>>413-414
プロトタイプベースとクラスベースの違いを理解することから始めよう
URLリンク(www.google.com)
親クラス、子クラス、継承は、クラスベース由来の用語
多くのサイトでクラスベースに慣れた人用に使われている用語だが、クラスベースのつもりで受け取ると誤った機能理解に繋がる
クラスベースはインスタンス生成時に親クラスを複製するが、プロトタイプベースは複製しない
プロトタイプベースはプロトタイプに手を加えると「全てのプロトタイプを元にしたオブジェクト」に影響する
「継承」や「クラス」という用語を使うのは問題ないが、プロトタイプでどのように継承やクラスを実装しているのかは理解する必要がある
423:デフォルトの名無しさん
22/12/14 00:19:25.91 Dbkp4Og+0.net
プロトタイプ最強伝説!
424:デフォルトの名無しさん
22/12/14 07:32:29.92 r+idjll+H.net
protptypeを使い、new演算子でインスタンスを継承でき、
さらにプロトタイプチェーンで始祖子孫を関連付けられるのに
親子関係という概念はJSにはないんですねー
425:デフォルトの名無しさん
22/12/14 07:55:29.99 r+idjll+H.net
ちょっと調べてみたけど、JSに親子関係は存在しない、的な記事はない
MDNには親子表現はないけれど、JSの継承で親子表現してる記事は多数ある
親子関係はクラスの拡張、実装、インスタンス生成でも使われるけど
親子関係自体を定義した言語なんて存在しない、あくまで機能の表現方法
であるにもかかわらず、プロトタイプ言語に親子関係が存在しないというのは
どこかにそういう記述があると思うのですが、参照場所を教えていただけませんか?
426:デフォルトの名無しさん
22/12/14 12:33:00.70 3zhhSsQg0.net
プロトタイプベースでは、親ではなく雛形という概念を用いる(それこそがプロトタイプ)
JavaScriptはプロトタイプベースのオブジェクト指向言語の代表格だが
その JavaScriptにも、ES2015(ES6) でクラスベース構文が導入されたので、
使い手の側としては、思想・概念・用語が入り乱れる事になったのかも知れません
427:デフォルトの名無しさん
22/12/14 13:15:16.28 U8xYt1Js0.net
あらためてMDNを概覧しましたが
417さんの力説されているとおりかもしれませんね
今後はご指摘の件、頭にいれながら勉強します
ながながとありがとうございます!今後ともよろしくです
428:デフォルトの名無しさん
22/12/14 14:22:13.24 dv/CWk9JH.net
個人的にクラス≒雛形って考えだからプロトタイプはわかるけどクラスベースがわからなかった
「雛形クローンして用意してあるの変えるだけだろ?」って
429:デフォルトの名無しさん
22/12/15 01:00:33.27 z3rBZpFn0.net
>>420
よくぞ言った、プロトタイプ使徒よ!
430:デフォルトの名無しさん
22/12/16 14:16:16.56 wrcGLpVa0.net
みんなはフレームワーク使ってる?
それともJS直接使ってる?
431:デフォルトの名無しさん
22/12/16 14:22:39.89 C3ZoQFlkM.net
お前から発表しろよ
アンケートだから職種、年俸、年齢、結婚歴は必須な
432:デフォルトの名無しさん
22/12/17 12:10:49.73 kI1nA3xa0.net
>>424
職種:プロトタイプ
年俸:プロトタイプ
年齢:プロトタイプ
結婚歴:プロトタイプ
433:デフォルトの名無しさん
22/12/17 13:15:46.84 OiGNBIp60.net
質問させてください
<style>
#d1,#d2{ color:blue}
</style>
<div id="d1"></div>
<div id="d2"></div>
<script>
</script>
JSで、<style>内の#d1,#d2セレクタの設定を編集したいのですが
特定のセレクタ部分だけを取得して変更ってできますか?
434:デフォルトの名無しさん
22/12/17 13:44:50.71 ycEukJwD0.net
>>426
URLリンク(developer.mozilla.org)
435:デフォルトの名無しさん
22/12/17 13:49:34.17 ycEukJwD0.net
>>426
変更はこっちだった
URLリンク(developer.mozilla.org)
436:デフォルトの名無しさん
22/12/17 13:53:37.75 ycEukJwD0.net
>>426
訂正
URLリンク(developer.mozilla.org)
437:デフォルトの名無しさん (JP 0H11-JDfe [126.249.157.89])
22/12/17 20:57:11.28 /rkC0QGzH.net
>>428
ありがとうございます。JSの皆様は本当に神様。
取り急ぎお礼申し上げます。ありがとうございます。
できれば明日時間をとって拝読させていただきます。
438:デフォルトの名無しさん
22/12/17 22:30:28.67 8Q1kFIoR0.net
if(A1[1] == A1[3]){
A0C = (A0[3]+A0[1])/2;
A1C = (A1[3]+A1[1])/2;
Ty = A1C - A0C;
X1[0].translate(0,Ty);
} else {
dofn3();
}
このif文ですが、A1[1]とA1[3]の誤差がプラスマイナス0.5までならtrueというふうに変えたいんですけど、どう書き換えれば良いでしょうか?
今のままだとA1[1]とA1[3]ともに小数点以下10桁くらいあって条件が厳し過ぎるんですよね
手違いでちょっとずれて作ってしまうこともあるので、その場合はtrueにしたいのです
439:デフォルトの名無しさん
22/12/17 22:40:09.17 on9KAdJq0.net
A1[1]とA1[3]の差が絶対値で0.5までって書けばいいんじゃないの?
440:デフォルトの名無しさん
22/12/17 22:44:13.88 8Q1kFIoR0.net
A1[1]==A1[3]は、四角形の左上のY座標A1[1]と右下のY座標A1[3]が同じだから、直線という意味です
でもこの2点を上下0.5くらい余裕を持たせたいんです
間違って微妙に斜めに線を引いてしまうこともあるので
441:デフォルトの名無しさん
22/12/17 22:45:31.22 8Q1kFIoR0.net
>>432
そうか
簡単でしたね w
ありがとうございます
442:デフォルトの名無しさん
22/12/17 22:45:36.51 t7AYft2Wr.net
>>431
まず自分で試行錯誤してみたら?
やりたいことが日本語に出来てるなら難しいことではないと思うよ
君は何でも最初から人に聞いて済ませようとしてるように見える
443:デフォルトの名無しさん
22/12/17 22:47:25.94 t4TbQFP40.net
このスレは、回答者の腕試しの意味もあるから
444:デフォルトの名無しさん
22/12/17 23:01:46.75 nEwVWz8Q0.net
正直このレベルの質問に答える必要が無いと思うが・・・
範囲でif文を書く事とかすら考えつかないレベルでこの先やっていける訳無いやんw
445:デフォルトの名無しさん
22/12/17 23:10:51.36 2CNUWbJ80.net
>>437
こういうちょっとしたきっかけで他の思い付きができるようになることもあるしね
446:デフォルトの名無しさん
22/12/18 12:44:32.64 uPN+O46jH.net
>>429
様、ありがとうございました。
CSSのスタイル設定プロパティをJSで編集できました。
CSSRulesは配列で返ってきますが
cssRules['div'].color='blue'
のように、プロパティ名で編集する方法はありませんでしょうか?
447:デフォルトの名無しさん (オッペケ Sr11-H8w4 [126.156.146.161])
22/12/18 14:19:43.57 6JZ/0f38r.net
jQuery使えばできます
448:デフォルトの名無しさん
22/12/19 12:00:53.42 KEwe+Jaf0.net
>>439
俺は「プロパティ名で編集する方法」を知らないので、CSSOMを調べてみるといいと思う
URLリンク(triple-underscore.github.io)
449:デフォルトの名無しさん
22/12/19 14:10:45.85 GaFatWVX0.net
>>440
>>441
ありがとうございました
selectortextを呼び出して疑似的にプロパティ名で編集できるような関数を作ってみます。
450:デフォルトの名無しさん
22/12/19 21:50:19.67 K0fHbKFE0.net
URLリンク(developer.mozilla.org)
let style = document.styleSheets[0].cssRules[0].style;
style.fontSize = "1em";
// style.setProperty("font-size", "1em");
451:デフォルトの名無しさん
22/12/21 07:34:30.54 nEbzRDrKH.net
>>443
ありがとうございます。
let styleの呼び出し箇所を関数にして
selector名のオブジェクトを生成し、その中にプロパティ名とvalueを格納して呼び出すような
簡易的な関数を作成してみます
年末のお忙しいとろ、アドバイスありがとうございました。
452:デフォルトの名無しさん
22/12/21 16:52:58.12 9yhxJASu0.net
小数点第4位を四捨五入するのは、parseFloat(a.toFixed(3))と Math.round(a*1000)/1000のどっちがいいでしょうか?
453:デフォルトの名無しさん
22/12/21 19:18:04.39 nEbzRDrKH.net
連日すみません。
<link rel="stylesheet" src>で読み込んだcssの
cssStylesheetプロパティにアクセスする方法を教えていただけないでしょうか?
454:デフォルトの名無しさん
22/12/21 21:53:16.64 paD1IZJK0.net
ちょっとググれば出てくるような情報までくれって言うのか?
455:デフォルトの名無しさん (JP 0H11-JDfe [126.249.157.89])
22/12/21 22:46:02.69 nEbzRDrKH.net
すみません、ちょっとググってみます
456:デフォルトの名無しさん
22/12/21 23:16:30.68 paD1IZJK0.net
どうしても分からないならchromeのDevToolsのConsoleで
document.styleSheets
って打ってみれば中身が全て見れる
中身見ても意味不明な場合はやりたいことは出来ないかも
457:デフォルトの名無しさん
22/12/21 23:34:53.49 PQinZhLm0.net
jQuery最強伝説。
458:デフォルトの名無しさん
22/12/22 07:18:15.65 slpViawnH.net
>>449
それは試してみたんですけどundefinedなんですよね
他ファイルを参照した場合には、stylesheetがdocumentのプロパティになっていないようなのですよね
459:デフォルトの名無しさん
22/12/22 07:21:31.78 slpViawnH.net
>>449
すみません、訂正です
document.styleSheetで参照すると
document.styleSheet.cssRulesがnullとなってしまうんです
document.styleSheetで登録されるのは
同じファイル内のスタイルだけのよう?
他のcssファイルに書かれたスタイルを操作するには
どうしたらいいのでしょうか?
に訂正願います
460:デフォルトの名無しさん
22/12/22 07:48:35.40 YtaOqG2C0.net
document.styleSheetsの最後のs抜かしてないよな
document.styleSheets[0] みたいにインデックス使わないと参照できないぞ
461:デフォルトの名無しさん
22/12/22 09:18:28.13 N0yJkasM0.net
本当にやりたいのは、特定の要素のstyleを弄ることじゃないの?
462:デフォルトの名無しさん
22/12/22 13:29:52.00 kUDazAkOd.net
ワードプレスとかいうアレをイジってると特定idの親にスタイル変更したいとかはでてくる
463:デフォルトの名無しさん
22/12/22 17:03:26.78 J4HXq2D
464:u0.net
465:デフォルトの名無しさん
22/12/22 19:14:24.29 slpViawnH.net
みなさん、ありがとうございます。
関連した質問なのですが
cssが要素に適用される仕組みは
1:
<style>タグを読み込んだり<link ref>を読み込んだ時点で
ブラウザ実行環境にcssプロパティを記録して、セレクタを読み込んだ時に適用するのでしょうか?
それとも
2:
HTMLの要素を読み込んだ時に<style>タグや<link>先に走査して
cssの適用があるかを確認して適用する
なのでしょうか?
もし1なら、クライアントブラウザからアクセスできるような気がするのですけど
もし教えていただけるようでしたらご指導お願いします
466:デフォルトの名無しさん
22/12/22 20:32:53.94 NthFDCjcr.net
次の話に移る前にまず>>453や>>454に答えるべきだろう
言葉遣いだけ丁寧にしてもそういうのが疎かだと相手にされなくなる
467:デフォルトの名無しさん
22/12/23 07:08:17.10 OG24yN7PH.net
>>454様
424,437,440,442の記載の通り、cssRuleを直接編集したいと考えています
>>453様
437,441,442で記載の通り、配列で受けとって編集することはできています
しかし別のスタイルシートでは同様の方法では参照できませんでした
>>447様のご指摘があって、再度検索してみたのですが
別スタイルシートのcssをオブジェクト化して参照する方法が見当たらず
今の質問に至っています
JQueryでできるようなレスがありましたので
JSでもできるのだろうなと思って次の質問をしました
皆様質問の仕方に失礼があっって申し訳ありませんでした
お許しくださいませ
468:デフォルトの名無しさん
22/12/23 08:30:41.88 d3IbDeU70.net
>>456 でクロスオリジンの場合にnullになるって指摘されてるけど、これに引っかかってるだけじゃないかな
この場合はどうにもならんと思う
469:デフォルトの名無しさん
22/12/23 10:44:42.21 Lv24OjDar.net
>>459
ブラウザのコンソールで↓を実行したらどうなる?
for(const ss of document.styleSheets){console.log(ss.href); console.log(ss.cssRules);}
470:デフォルトの名無しさん
22/12/23 17:28:12.54 o+ONuUnd0.net
>>460で指摘している通り、他の所から読み込んだスタイルはそもそも変更出来ないって書いてあるんじゃね?
URLリンク(w3c.github.io)
> Cross-origin stylesheets are not allowed to be read or changed.
>>461のように実際にcssRulesにアクセスすると自分の所のcssじゃない場合をアクセスしようとすると
Uncaught DOMException: Failed to read the 'cssRules' property from 'CSSStyleSheet': Cannot access rules
at <anonymous>:1:76
みたいなエラーになる
cssをいじりたいのだろうけど、そういう低層の話じゃなくて本当にやりたい事を書いた方が答えが得られると思うよ
結局何がやりたいのか全く分からんw
471:デフォルトの名無しさん
22/12/23 17:30:32.01 o+ONuUnd0.net
変な日本語になってるなw
>>461のように実際に自分の所のでは無いcssRulesをアクセスしようとすると
Uncaught DOMException: Failed to read the 'cssRules' property from 'CSSStyleSheet': Cannot access rules
at <anonymous>:1:76
みたいなエラーになる
472:デフォルトの名無しさん
22/12/23 19:30:29.91 OG24yN7PH.net
>>460
459,460,461
皆様ありがとうございます
具体的にこれをしたいというのはなかったんですけど
js勉強していまして、そういうことできるのかな?という質問でした
jsのエンジンは<link rel>を実行すると
jsの実行コンテキストを記録するメモリ部分に
<rel>の情報をロードして
HTML要素を読み込んだ時に参照するという挙動なら
クロスオリジンの適用を受けずに編集できるかなと
そういう疑問も持ちまして質問させていただきました
皆様ありがとうございました
473:デフォルトの名無しさん
22/12/23 20:54:13.31 2ps+kI7qr.net
>>464
>クロスオリジンの適用を受けずに編集できるかなと
君の>>452や>>459の発言ではCSS参照が別ファイルでも同一オリジンでは問題なく出来て
別オリジンのみ問題が発生していると認識しているとは読み取れないけども
別ファイル即ち別オリジンと勘違いしてない?
同一オリジンなら別ファイルでも参照出来ることは理解してる?
474:デフォルトの名無しさん
22/12/23 20:55:49.05 OG24yN7PH.net
>>462
今勉強再開して思い出しました。
@keyframesのプロパティや値を
動的に変更したいと考えたのです
同じファイルなら
<style id="st">
として、stから@keyframesを設定編集できますが
外部ファイルでの設定編集ができないので
できたらいいな、って質問してみました
475:デフォルトの名無しさん
22/12/23 20:57:53.66 OG24yN7PH.net
>>465
勘違い、混乱してました。ありがとうございます!
476:デフォルトの名無しさん
22/12/23 21:10:25.93 2ps+kI7qr.net
>>467
で、>>452で参照したかったのは本当に別サーバ等のcssだったのか
それともhtmlやjsと同じ場所に置いてあるcssだったのかどっち?
477:デフォルトの名無しさん
22/12/23 21:19:54.48 OG24yN7PH.net
>>468
ローカルで、同じフォルダ内です
478:デフォルトの名無しさん
22/12/23 21:28:01.20 G5aj5uG70.net
@keyframesなんかも後のスタイルで再定義できるんだから
DOMにstyle要素追加してそこに上書きルール突っ込んでそっちを操作すればいいじゃない
479:デフォルトの名無しさん
22/12/23 21:39:17.88 2ps+kI7qr.net
>>469
それは本来別オリジンではないんだけどブラウザがローカルアクセスに対するセキュリティの一環として制限をかけてる模様
詳しくはググって
>>461のスクリプトを実行して
file:///~
の行のあとに例外が出るならそれが原因
対策としてはローカルにwebサーバを立ててhttp経由でアクセスする
そうすればスクリプト実行で例外が発生せずcssの中身が読み取れる
webサーバはそんな大層なものは必要なくてvscodeのLiveServerで十分
480:デフォルトの名無しさん
22/12/23 21:55:43.41 gwhrrj9D0.net
DevTools を弄れるなら、要素タブでスタイル欄を見れば
適用内容と設定元のファイルが行番号付きで確認できるし
アニメーションを弄りたいなら、「その他のツール」に「アニメーション」がある(chrome)
481:デフォルトの名無しさん
22/12/24 09:52:50.24 Lk0KbRC60.net
皆様いろいろありがとうございます
時間とれましたら確認させていただきます
482:デフォルトの名無しさん
22/12/24 10:46:15.28 se6E0pPpr.net
>>473
少し調べたらchromeのオプションでクロスオリジン制約を回避する方法があった
chrome クロスオリジン
で検索
これならwebサーバを立てる必要もなくてお手軽
483:デフォルトの名無しさん
22/12/24 14:27:49.26 0WYu35VL0.net
firefoxもsecurity.fileuri.strict_origin_policyをfalseにすれば回避できるけど
早いうちにローカルサーバ立てることを覚えた方が後が楽になると思うよ
対象要素が1つなら@keyframes書き換えるよりWebAnimationAPI使った方がいいかもしれないし
やりたいことはぼかさずにはっきり書いた方がいいよ
484:デフォルトの名無しさん
22/12/24 22:49:22.50 oMpeQZG30.net
HTA(hta+ie)にとって替わるみたいな環境っていまだにないのかな
PWAみたいのではなく、javascript(やvbs)でWindowsのフレームワーク(.NETやCOMやら)と連携できるようなやつが欲しい
WebView2は思想的にHTAと比べて退化してるようにしか見えないけどこれぐらいなのか…
485:デフォルトの名無しさん
22/12/25 03:50:26.67 Y7ZN657d0.net
>>476
そういや前はちょっとしたツールを HTA で書いたりしたけど、もう使えない?
486:デフォルトの名無しさん
22/12/25 12:52:51.27 GFtl9gAsH.net
皆さん、ありがとうございます
別シートのcssで可変にしたい部分を変数にし
読み込むシート側に変数専用のstyleタグを用意し
変数用のスタイルタグを編集することにしました
皆様いろいろとありがとうございました
487:デフォルトの名無しさん
22/12/25 13:14:34.27 g8CAn8EMr.net
要するにクロスオリジン問題を解決して>>452を実現したのではなくて
別の方法を取ったということ?
488:デフォルトの名無しさん
22/12/25 13:37:10.68 GFtl9gAsH.net
そうです
>>470様のアドバイスなら
私の学習レベルでもググり時間とられずにできそうだと思いまして
style.css
@keyframes xxx{ *** : var(--prm) }
index.html
<style id="prm"></style>
<script>
prm.innerHTML=":root {--prm:50% }"
のように、変数を編集するstyleタグを設けました
見栄え悪いしかっこ悪いんですけど
いろんな変数を設定変更する関数も自作できそうですので
とりあえずはこれでいいかなと
489:デフォルトの名無しさん
22/12/25 14:26:34.39 kQ0MTzKr0.net
>>480
それならわざわざstyle要素作って直に操作する必要はない
変数の最初の定義もcssファイルの方に書いておいて
変更したい時は
document.documentElement.style.setProperty("--prm", "100%");
とかすればいいだけ
490:デフォルトの名無しさん
22/12/25 15:40:19.02 GFtl9gAsH.net
>>481
ありがとうございます!そうさせていただきます。
今後ともいろいろ教えてください。ありがとうござました!
491:デフォルトの名無しさん
22/12/25 16:48:37.78 sJzx1gQhr.net
>>480
>私の学習レベルでもググり時間とられずにできそうだと思いまして
webサーバ云々が億劫だってのは分かるからしょうがないけども
せめて>>474ぐらいは実際に試して欲しかったな
ググって最初に出てくる記事にすぐ出来るやり方が具体的に書いてあるんだし
492:デフォルトの名無しさん
22/12/25 16:50:28.05 GFtl9gAsH.net
>>481様
面白かったです。
<html><head><body><div>
どの要素にでも、setProperty('param','value')を設定しておけば
別ファイルに作ったスタイルシートの変数を参照できるのですね
疑似的なコードですが
<script>
body.setProperty('--color','red')
div.setProperty('--color','blue')
html.setProperty('--color','green)
とすると、子孫のスタイル設定が優先されることも理解できました
とても面白く学習できました、ありがとうございました
493:デフォルトの名無しさん
22/12/25 16:51:23.54 GFtl9gAsH.net
>>483
ありがとうございます
次時間ができたときにぜひ調べて実行してみます
494:デフォルトの名無しさん
22/12/25 17:00:33.10 gv3ThvO8d.net
もう解決したんだしどうでもいいからお礼だけ言って体よく話を打ち切りたいって思いがヒシヒシ伝わってくるな
495:デフォルトの名無しさん
22/12/26 13:51:42.59 fuxINEHv0.net
>>471様
Live serverを使って、別のスタイルシートで設定した、フォント色の変更はOKでした。
ありがとうございました。
ただ、@keyframesに関しては、CSSKeyframeRule__{keyText..,style,,cssText,,}__までは見れたのですが
内容の変更方法が分からないため断念しました
時間あるときに再チャレンジしてみます
皆様ありがとうございました
496:デフォルトの名無しさん
22/12/26 15:01:08.23 pO4MU7IP0.net
var ptEQ = 25.4 / 72;
var SWmm = 0;
mainfn();
function mainfn() {
win1 = new Window('dialog', "Set Strokewidth");
win1.pnl = win1.add('panel');
win1.pnl.orientation = "column";
pg1 = win1.pnl.add('group');
pg1.orientation = "row";
pg1.add("statictext", [0, 0, 140, 23], "線幅を選択してください");
pg2 = win1.pnl.add('group');
rd21 = pg2.add("dropdownlist", [20, 40, 150, 65], ["0.1 mm", "0.12 mm", "0.15 mm", "0.2 mm", "0.25 mm",
"0.3 mm", "0.4 mm", "0.5 mm", "0.6 mm"
]);
rd21.selection = 0;
pg9 = win1.pnl.add('group');
pg9.orientation = "row";
CAN = pg9.add("button", [0, 0, 100, 30], "cancel");
OK = pg9.add("button", [0, 0, 100, 30], "OK");
CAN.onClick = function() {
win1.close()
}
OK.onClick = function() {
win1.close();
dofn();
}
win1.show();
}
497:デフォルトの名無しさん
22/12/26 15:02:39.66 pO4MU7IP0.net
function dofn() {
var SWmmS = rd21.selection.text;
var SWmm = parseFloat(SWmmS);
var SWpt = SWmm / ptEQ;
var rectObj = activeDocument.pathItems.rectangle(-420.94488, 297.638, 150, 100);
rectObj.filled = false;
rectObj.stroked = true;
rectObj.strokeColor = CMYKfn(0, 0, 0, 100);
rectObj.strokeWidth = SWpt;
rectObj.selected = true;
rectObj.remove();
function CMYKfn(c, m, y, k) {
COL = new CMYKColor();
COL.cyan = c;
COL.magenta = m;
COL.yellow = y;
COL.black = k;
return COL;
}
}
498:デフォルトの名無しさん
22/12/26 15:07:33.18 pO4MU7IP0.net
線幅を変更するスクリプトなのですが、一応完成しました。
自分で使うだけならこれでいいのですが、他人に使ってもらう場合、ダイアログに「線幅を追加する」という項目を増やしたいと思っています。
rd21 = pg2.add("dropdownlist", [20, 40, 150, 65], ["0.1 mm", "0.12 mm", "0.15 mm", "0.2 mm", "0.25 mm", "0.3 mm", "0.4 mm", "0.5 mm", "0.6 mm"]);
のところに項目を追加していくようなコードを書くことは可能なのでしょうか?
自分自身を書き換えるコードだと思うのですが…
(削除はどうでしょうか? 例えば0.15 mmがいらないと思った場合、"0.15 mm"のを削除するコードを書くことは可能ですか?)
499:デフォルトの名無しさん
22/12/26 15:27:01.38 oXRhIFIqd.net
スレ内を線幅で検索しても何も引っかからないのにこの書き出しで何か伝わると思ってるのすごいわ
線幅の配列を関数内で直書きしてるから自身を書き換えるとか面倒なことを考える必要があるわけで
関数の外に変数で宣言しとけば追加も削除もなんとでもなるでしょ
500:デフォルトの名無しさん
22/12/26 15:55:16.01 gS/UmYxh0.net
確かIllustratorかなんかのスクリプトでしょ
ここ見てるほとんどはWebブラウザやnode.jsのJavaScriptは知っててもそっちは知らないと思う
文法的にはJavaScriptと同じでも出てくるオブジェクトは独自のものだろうし説明しないとわからんよ
501:デフォルトの名無しさん
22/12/26 16:14:37.67 pO4MU7IP0.net
>>491
素人でもエディタで開かないとダメということですね。
var mm = ["0.1 mm", "0.12 mm", "0.15 mm", "0.2 mm", "0.25 mm", "0.3 mm", "0.4 mm", "0.5 mm", "0.6 mm"]
// 線幅の項目を増やしたり削除したい場合は、上の1行を書き換えてください
こう先頭に書き加えました。
502:デフォルトの名無しさん
22/12/26 16:16:02.82 pO4MU7IP0.net
>>492
すみません
気を付けます
503:デフォルトの名無しさん
22/12/26 16:45:32.21 oXRhIFIqd.net
>>493
意図が理解されなかったということが分かった
コメント付けるって妥協するなら>>488のままでもいいでしょ
ここの住人はadobe独自のことは詳しくないんだし他所で聞いたほうが的確な答えが返ってくるよ
そもそもここはスレ違い
504:デフォルトの名無しさん
22/12/26 17:18:59.92 l7z7KEaud.net
>>477
htaまだまだこれからだ
ただhighDPI環境でスケーリング200%とかだとおかしな事になった想い出
505:デフォルトの名無しさん
22/12/26 22:12:09.27 LJgewTa3r.net
>>487
①chromeで↓のurlを開く
URLリンク(yari-demos.prod.mdn.mozit.cloud)
②chromeのコンソールを開いて↓を入力する
document.styleSheets[1].cssRules[1].cssRules[0].style.marginLeft = "50%"
506:デフォルトの名無しさん
22/12/27 15:47:36.10 LHsOSApx0.net
>>497
ありがとうございました
所望の動作を確認できました
JSはいろんな方法があるんですね
507:デフォルトの名無しさん
23/01/02 12:58:47.15 A6ceP6kcr.net
>>476
pythonのeelモジュールを使えば、昔のhtaっぽいことができます
508:デフォルトの名無しさん
23/01/02 17:25:19.15 V1TEslsJ0.net
>>499
OSに標準で入ってるedgeで使えるのはいいなあ
情報ありがとう
509:デフォルトの名無しさん
23/01/04 19:01:14.59 jNmuxM610.net
「無名関数」、「関数リテラル」の理解がちょっとぼやけています。
次の様なコードがあったとき、
let calcResult = function calc(a,b){
return a*b;
}
calc()
と()をつけて表せるものが普通の関数、それを変数に代入したもの
calcResult
が関数リテラルかと思っていました。
しかし、どうやら違うようで。。
510:デフォルトの名無しさん
23/01/04 19:01:57.33 jNmuxM610.net
例えば以下の2つの関数があります。
■「function関数」を変数に格納
let calcResult1 = function calc(a,b){
return a*b;
}
■「無名関数」を変数に格納
let calcResult2 = function(a,b){
return a*b;
}
「無名関数」は「関数リテラル」と同義である。とさまざまな文献に記述されています。
ならば、
calcResult1
は、関数リテラルではない。
calcResult2
は、関数リテラルである。
という認識で間違っていないでしょうか?
511:デフォルトの名無しさん
23/01/04 19:02:26.96 jNmuxM610.net
SetInterval()
に与える引数は、関数リテラルでなくてはならないそうです。
となると、以下は誤りで、
SetInterval(calcResult1,1000);
以下なら問題ない
SetInterval(calcResult2,1000);
という理解でよろしいでしょうか?
512:デフォルトの名無しさん
23/01/04 20:37:28.67 UYb7FHhp0.net
URLリンク(developer.mozilla.org)
URLリンク(developer.mozilla.org)
リテラルに関数は含まれてないな
「関数リテラル=無名関数」が間違ってて、calcResult1 も calcResult2 は、関数リテラル。
とイコールで結んじゃうのは乱暴か
字義に従えば「無名関数」には生成時に名前をつけなかった、程度の意味しかないかと
ただ、関数式として生成された関数は変数に格納するか、でなければ他の関数の引数になるので、名前をつける意味はほぼない
結果的に関数式の関数は無名関数になることがほとんどで
513:デフォルトの名無しさん
23/01/04 20:40:11.89 UYb7FHhp0.net
ここでいう「関数リテラル」は関数式で記述された関数のことで、名前があろうとなかろうと「関数リテラル」でいいんだと思う
514:502
23/01/04 20:53:07.39 UYb7FHhp0.net
途中送信で変になってるからまとめ直し
>>502,503
その文脈での「関数リテラル」ってのは関数式で記述された関数のこと(>>504のリンク参照)で、名前の有無は関係ない
名前のあるcalcResult1 も 名前のないcalcResult2 も「関数リテラル」という理解でいいと思う
「無名関数」の「無名」には生成時に名前をつけなかった、程度の意味しかないかと
ただ、関数式として生成された関数は変数に格納するか、でなければ他の関数の引数になるので、名前をつける意味はほぼなくて結果的に無名関数になることがほとんどではある
515:デフォルトの名無しさん
23/01/04 20:57:54.46 jNmuxM610.net
>>504
すっごい分かりやすい。
モヤモヤしていたのがすっきりしました。
ありがとうございました。
516:デフォルトの名無しさん
23/01/04 21:00:20.48 GLj+17iFr.net
調べたら自分を再帰的に呼び出す場合に名前を付けるって例があってなるほどと思った
517:デフォルトの名無しさん
23/01/04 21:21:00.43 GLj+17iFr.net
ちなみに>>503のsetIntervalの引数は関数リテラルでないといけないってのはどこ情報?
518:デフォルトの名無しさん
23/01/04 21:23:57.48 jNmuxM610.net
あれ。関数リテラルには引数はないのか。。引数の不要な関数しか関数リテラルにならんのか。
もちょっと調べてみます。
519:デフォルトの名無しさん
23/01/04 21:32:15.85 jNmuxM610.net
>>509
必要ならページ画像をどっかにアップします。。
技術評論社
JavaScript本格入門
URLリンク(gihyo.jp)
P362
setTimeout/SetIntervalメソッドの注意点
...引数funcは必ず関数リテラルで指定してください。
520:デフォルトの名無しさん
23/01/04 21:39:03.24 jNmuxM610.net
でも何かの引数に関数をわたすときは、
一般的に関数リテラルで渡すのがデフォと
ぼんやり思っている。
521:デフォルトの名無しさん
23/01/04 21:47:22.56 QxUfEWbZ0.net
技術評論社はやめとけよ。
522:デフォルトの名無しさん
23/01/04 21:55:58.51 GLj+17iFr.net
>>511
文脈がわからんけど理由は書いてあるの?
動く動かないで言えばfunction文で定義した関数リテラルでない関数を渡しても動くようだけど
そもそもMDNにも関数としか書いてないし
523:デフォルトの名無しさん
23/01/04 22:20:18.03 lFNs7lW+0.net
単に著者が良く理解せずに書いてるだけな気がする
524:デフォルトの名無しさん
23/01/04 22:21:10.60 jNmuxM610.net
>>514
setTimeout()の例でしかもjQueryで
申し訳ないのですが。
1秒後に#displayのhtmlの内容を空にするコードです。
以下のようなコードではsetTimeoutが動かず、
setTimeout($('#display').html(' '), 1000);
代わりに、以下で動きます。
function clearDisplay(){
$('#display').html('');
}
setTimeout(clearDisplay, 1000);
このことから書籍にあるように
関数リテラルでないと引数に渡せないと
思っていました。。
書籍の文脈ですが、実際にあとで画像アップします。
525:デフォルトの名無しさん
23/01/04 22:46:11.56 GLj+17iFr.net
>setTimeout($('#display').html(' '), 1000);
これそもそも渡してるの関数じゃないからリテラル云々の問題じゃなくない?
html()が戻り値としてjQueryを返すからそれが引数として渡ってるでしょ
>function clearDisplay(){
> $('#display').html('');
>}
これもfunction「文」で定義してるから>>506で言うところの関数リテラルには当てはまらない関数だよね
526:デフォルトの名無しさん
23/01/04 23:53:56.91 PU4coe7B0.net
アロー関数式を使うことで、関数リテラルによる関数定義を
より簡略化して記述することができます
ただし、this には注意してください
527:デフォルトの名無しさん
23/01/05 00:01:25.43 EVXeoiyo0.net
>>517
setTimeout($('#display').html(' '), 1000);
これそもそも渡してるの関数じゃないからリテラル云々の問題じゃなくない?
渡しているのは関数じゃない。。
んー。メソッドか。だから動かない。
ありがとう。
528:デフォルトの名無しさん
23/01/05 00:18:03.56 7P17JKmwr.net
>>519
いや、関数かメソッドかの話じゃなくて
$('#display').html(' ')をその場で実行してその戻り値であるjQueryオブジェクトを渡しちゃってるでしょって話
ちゃんと理解できてる?
URLリンク(js.studio-kingdom.com)
529:デフォルトの名無しさん
23/01/05 00:26:22.30 EVXeoiyo0.net
私の勘違いだったのですね。
たしかに関数ではない。。
一応書籍のページ画像をuploadしました。
「引数funcは必ず関数リテラルで指定してください。」
URLリンク(uploda1.ysklog.net)
「関数リテラルは....ある関数の引数として渡したり....」
URLリンク(uploda1.ysklog.net)
530:デフォルトの名無しさん
23/01/05 00:27:48.45 EVXeoiyo0.net
>>520
理解したありがとう!
531:デフォルトの名無しさん
23/01/05 02:04:13.18 hRDnYJsk0.net
>>521
「引数funcは必ず関数リテラルで指定してください。」
ちょっと問題のある文章だなあ
URLリンク(developer.mozilla.org)
第一引数は関数またはjavascriptコードとして実行される文字列
関数ってのは関数呼び出しじゃなくて関数名、または無名関数(関数リテラル)
>>516
文字列で渡したら動くはず
setTimeout("$('#display').html(' ')", 1000);
532:デフォルトの名無しさん
23/01/05 06:17:33.15 O+NRT3S+0.net
>>523
> 「引数funcは必ず関数リテラルで指定してください。」
> ちょっと問題のある文章だなあ
まあそこは直前に文字列でも指定できるけどって書いてるから教育的指導なんだろうとは思う
まあ「必ず」という言葉が強すぎるから「引数funcは関数リテラルで指定するようにしてください。」程度でいいと思う
むしろ問題は「関数リテラルは宣言した時点では、名前を持たないことから匿名関数、または無名関数と呼ばれることもあります。」の方だろうね
533:デフォルトの名無しさん
23/01/05 09:18:58.87 EVXeoiyo0.net
>>523
>文字列で渡したら動くはず
>setTimeout("$('#display').html(' ')", 1000);
ありがとう。関数とは、関数呼び出しではなく実行される文字列
次いでもう一点お願いします。
URLリンク(uploda1.ysklog.net)
リスト4-04 function_literal.js
以下は、関数リテラルを使ってリスト4-01を書き換えたものです。
var getTraiangle = function(base,height){
return base * height/2;
}
console.log('三角形の面積:'+getTrianle(5,2));
↑の
getTrianle(5,2)
は、関数リテラルなのですね。
てっきり()がないものが関数リテラルと思っていたが、
どうも、それも間違いようで。
534:デフォルトの名無しさん
23/01/05 09:20:11.59 EVXeoiyo0.net
あくまで、関数を変数に代入するということが、重要なのでしょうか?
535:デフォルトの名無しさん
23/01/05 09:23:08.82 EVXeoiyo0.net
「関数呼び出し」と
「引数付の関数リテラル」は
それだけみても違いわからないですね。
定義された場所を見て判断しないと。
536:デフォルトの名無しさん
23/01/05 10:06:29.26 rM8SDmmnr.net
>>525
>>setTimeout("$('#display').html(' ')", 1000);
>ありがとう。関数とは、関数呼び出しではなく実行される文字列
いやいや、それは関数じゃなくてただの文字列
setTimeoutの第一引数は文字列か関数って書いてあるでしょ
関数リテラルって言葉はもう忘れていいと思うよ
そもそもMDNに記述がないから便宜的なものだし、その本での説明も怪しい
定義の仕方で区分されてるだけで実質的にはただの関数で
挙動に差異があるわけでもないだろうし
537:デフォルトの名無しさん
23/01/05 10:52:19.71 rM8SDmmnr.net
>>524
>「引数funcは関数リテラルで指定するようにしてください。」程度でいいと思う
それだとfunction命令で定義した関数は指定してはいけないと誤解されるからリテラルを削ったほうがいいかと
538:デフォルトの名無しさん
23/01/05 10:52:37.45 uFu
539:uDD5j0.net
540:デフォルトの名無しさん
23/01/05 11:50:49.92 hRDnYJsk0.net
>>525
>setTimeout("$('#display').html(' ')", 1000);
ありがとう。関数とは、関数呼び出しではなく実行される文字列
違う。全く違う。めっちゃ大事なことだから勘違いしないで
それはsetTimeoutoの第一引数を文字列として指定した場合のこと
第一引数に関数を指定する方法は>>516で君は既にやっている
setTimeout(clearDisplay, 1000);
clearDisplay関数を定義してそれをsetTimeoutの第一引数に渡している
これでいい
>>529の言う通り
>>528の言う通り今は無名関数とか関数リテラルとかにこだわらない方がいい
>>525のうp画像に無名関数は重要な概念なので後ほど詳述ってあるからそこをみっちり勉強してね
541:デフォルトの名無しさん
23/01/05 12:50:07.72 w+0CNSMQr.net
関数リテラルの説明についてはここが一番しっくりくる
URLリンク(www.javadrive.jp)
「関数リテラルを使った関数定義」って言い回しを強調してるのが良い
だから関数リテラルを引数として渡すって言ったらこういうことだよなって
dispNum(10, 8, function(x, y){
return (x + y) / 2;
});
542:デフォルトの名無しさん
23/01/05 14:46:47.66 EVXeoiyo0.net
すいません。やっぱり関数リテラルという意味を理解したい。。でも↓この質問でわかるかも。
だれか答えていただけますでしょうか?
---
次のコードがあります。1から5のうち
どれが適切でしょうか?
let dispMessage = function(msg){
console.log(msg);
};
1.
function(msg){console.log(msg);}
は関数リテラルである。
2.
dispMessage
は関数リテラルである。
3.
let dispMessage = function(msg){
console.log(msg);
};
が全体として関数リテラルである。
4.
全て関数リテラルとはいえない。
5.
関数リテラルとは、用法のことであり、
コード部分を表すものではない。
543:デフォルトの名無しさん
23/01/05 14:53:38.67 mmmJuCOb0.net
>>533
ぐぐったら以下の様に出る。結構理解しやすいと思うが。
リテラルとは リテラルとは、プログラムのソースコードにおいて使用される、数値や文字列を直接に記述した定数のことである。 変数の対義語であり、変更されないことを前提とした値である。 プログラミング言語のコード中にリテラルが挿入される場合には、判別のために特定の書式を用いる必要がある。
544:デフォルトの名無しさん
23/01/05 15:02:17.50 EVXeoiyo0.net
うん。「リテラル」ということばによって惑わされてきた気がする。
545:デフォルトの名無しさん
23/01/05 15:06:19.08 akcN5qw4a.net
関数リテラルは関数として評価可能な右辺値と考えておけばまあいいんじゃないの
正確な定義は構文木の定義を見れば書いてある
546:デフォルトの名無しさん
23/01/05 15:10:13.35 HxGsZjLmr.net
>>533
1だろう
let s = "abc";
の"abc"を文字列リテラルと呼ぶけどそれを代入した変数sを
文字列リテラルとは呼ばないでしょ
547:デフォルトの名無しさん
23/01/05 15:28:42.13 c7qQflpDr.net
>>533
で、繰り返しになるけど本やサイトによっても説明がまちまちで
MDN探しても出てこないような用語だからあまり囚われない方がいい
理解しようとして時間をかけるだけ無駄
548:デフォルトの名無しさん
23/01/05 15:35:00.85 m3Sm+5EJ0.net
>>533
強いて言えば1かな
でも数値・文字列・正規表現リテラルみたいにプログラム中に単独で書くことは出来ないね
変数に代入するなり関数の引数に使うなりしないとエラーになる
英語でもfunction literalっていうみたいだけど関数リテラルってあんまりいい言葉だと思わないなあ
33;
"hello";
/^js$/;
function() {return true}; //SyntaxError
こんなことにこだわるよりもっと基本的なこと勉強した方方がいいんじゃないの?
549:デフォルトの名無しさん
23/01/05 15:38:00.87 EVXeoiyo0.net
あ。
誤解していたところがとけました。
当初は「2」かと妄信していたので、
だいぶ合点がとれました。
関数リテラルが無名関数と同義という説明も
いやそうではないという説明も
すっきりしました。
皆さん長々とお付き合いいただき
ありがとうございました。
550:デフォルトの名無しさん
23/01/05 19:28:05.49 j61eMuZ00.net
>>513
技術評論社のjQuery本格入門はものすごく読みづらかった。
もっと分かり易い言葉で解説して欲しかった。
551:デフォルトの名無しさん
23/01/05 20:02:55.70 EVXeoiyo0.net
>>536
>関数リテラルは関数として評価可能な右辺値と考えておけばまあいいんじゃない
この発想というか常識が無かったなあ。
552:デフォルトの名無しさん
23/01/05 20:55:47.77 XhDooIHVH.net
>>533
自分もあまりJS詳しくないんですけど
リテラルっていうのは、括るもの、という意味合いでは?
オブジェクトリテラルっていうのは波かっこで括るオブジェクト={}
文字列のリテラルは、""や’’
展開のリテラルは、``とか
関数のリテラルというのは、functionを指定した引数括弧つきのオブジェクトリテラルでfunction(){}
関数リテラルといえば、例えばfunction func(){...}
とした場合、{...}は変数funcに文字列として代入されます
そしてfuncは関数オブジェクトと指定されていて
関数の実行は()を読み込むことで実行されます
func 文字列
() 関数の実行