1: :2021/04/07(水) 18:24:58.25 ID:0.net
Javascript Logic


EyNnvf9XIAI9-pl

3:名無し募集中。。。:2021/04/07(水) 18:30:18.29 ID:0.net
プリミティブ型とオブジェクトの違いを理解しているか否か
4:名無し募集中。。。:2021/04/07(水) 18:32:49.27 ID:0.net
エクセル使ってれば文字列と数値の違いくらいわかるだろ
5:名無し募集中。。。:2021/04/07(水) 18:35:48.13 ID:0.net
おもろいやん
6:名無し募集中。。。:2021/04/07(水) 18:37:42.69 ID:0.net
プログラマじゃないからわからない
7:名無し募集中。。。:2021/04/07(水) 18:38:44.88 ID:0.net
数字扱いが文字列きたら全部文字列扱いになるのが変って意味かな
ほとんどのスクリプト言語ってそうだけどな


8:名無し募集中。。。:2021/04/07(水) 18:39:50.49 ID:0.net
>>1
スクリプト言語では型が動的で自動キャストされるものも多い
さらに演算子は型ごとにオーバーロードされる
その自動キャストで型がどう引っ張られるかの醍醐味
状況はプログラミング言語毎に異なる
9:名無し募集中。。。:2021/04/07(水) 18:42:01.61 ID:0.net
これの正解って"156"だけどな
11:名無し募集中。。。:2021/04/07(水) 18:44:18.91 ID:0.net
>>9
だよね
ポイントは
・演算子の左右結合優先度
・演算子のオーバーロード適用時の自動キャスト優先度
12:名無し募集中。。。:2021/04/07(水) 18:47:28.77 ID:0.net
JavaScriptなんだし別に演算子をオーバーロードしてるわけじゃない
14:名無し募集中。。。:2021/04/07(水) 18:49:48.38 ID:0.net
>>12
しています
例えばperlだと「.」を迂闊にも贅沢に文字列結合演算子に割り当てているので
「+」はオーバーロードされず数値和演算子に専用に用いられているため
文字列が数値へ自動キャストされて「21」となってくれるが「.」の使い方がもったいないよね
50:名無し募集中。。。:2021/04/07(水) 20:46:43.63 ID:0.net
>>14
Perlじゃ比較演算子も文字列用と数値用が分かれていて
振る舞いが非常に明確
これが良い所で贅沢でももったいなくもない
13:名無し募集中。。。:2021/04/07(水) 18:48:44.93 ID:0.net
わからん
15:名無し募集中。。。:2021/04/07(水) 18:50:55.54 ID:0.net
意味はわかったけどだから何としか
16:名無し募集中。。。:2021/04/07(水) 18:52:33.68 ID:0.net
キャストの話か
17:名無し募集中。。。:2021/04/07(水) 18:52:54.19 ID:0.net
爆笑したわwww
20:名無し募集中。。。:2021/04/07(水) 19:03:04.57 ID:0.net
JavaScriptで「+」演算子は
・数値に適用される時は足し算、文字列に適用される時は文字列結合、とオーバーロード適用される
・オーバーロードの優先順位は文字列が優先であり、文字列と数値に対して適用される時は、数値側が文字列へ自動キャストされる
・いずれの場合でも「+」は左結合であり複数の「+」が同順位にある場合は左から適用

つまり1+2+3+4+5+"6"の結果は文字列の"156"となる
21:名無し募集中。。。:2021/04/07(水) 19:20:56.97 ID:0.net
>>1
クッソwwwwwwwwwwwwwwwwwwwww
22:名無し募集中。。。:2021/04/07(水) 19:21:40.87 ID:0.net
文字列になったらもう数字じゃないから紫マンは1人でなければいけない
25:名無し募集中。。。:2021/04/07(水) 19:27:11.18 ID:0.net
昭和のプログラマだけどわからんかった
26:名無し募集中。。。:2021/04/07(水) 19:28:04.62 ID:0.net
1+2の時点で3にならないのに
1+2+3+4+5+"6"が"123456"や"156"になるのはおかしい
29:名無し募集中。。。:2021/04/07(水) 19:31:42.83 ID:0.net
>>26
1+2は3で合ってるよ
あなたの主張が間違っている
36:名無し募集中。。。:2021/04/07(水) 19:41:02.30 ID:0.net
>>29
>>1の漫画で3になってないんだよ
1+2が1+2のままで3になる"きっかけ"が与えられていない以上、1+2+3+4+5+"6"もいつまでも1+2+3+4+5+"6"ってこと
誰が1+2は3が間違ってると言ったよどアホ
39:名無し募集中。。。:2021/04/07(水) 19:44:49.95 ID:0.net
>>36
つまり漫画の作者がアホすぎて
+が二項演算子であるという基本事項を知らなかったことが敗因だよね
もちろん+がn項演算子ならば漫画のような状況になりうるが事実は違う
27:名無し募集中。。。:2021/04/07(水) 19:29:13.99 ID:0.net
別に面白くはない
映画館でこのジョーク分かるって大声で笑う恥ずかしさ
28:名無し募集中。。。:2021/04/07(水) 19:31:24.82 ID:0.net
"6"がおかしいってのが分かるだけで全く理解できない
こんな計算やるやつなんかいないし
プログラムが融通が利かないゴミだってことはむかつくだけで笑ったことなど一度もない
30:名無し募集中。。。:2021/04/07(水) 19:34:25.77 ID:0.net
>>28
面白くはないが全てのプログラミング言語で>>20のような演算子などに関する規則は決まっている
それを理解できない人はプログラマー失格
32:名無し募集中。。。:2021/04/07(水) 19:36:17.86 ID:0.net
ただの解説なだけで面白くは無いな
35:名無し募集中。。。:2021/04/07(水) 19:38:55.11 ID:0.net
>>32
面白いだろ
必死に漫画を描いたのに>>1の漫画は結果も間違っているんだぜ
爆笑だよ
38:名無し募集中。。。:2021/04/07(水) 19:42:22.36 ID:0.net
お前らちょっと待て!
>>1のダブルクオートは半角じゃなくて全角だぞ
こんなもん実行時にシンタックスエラー出てそこで止まるぞ
42:名無し募集中。。。:2021/04/07(水) 19:53:16.25 ID:0.net
自動で属性変わるような言語使ってんじゃねえよ
44:名無し募集中。。。:2021/04/07(水) 20:13:24.11 ID:0.net
コンパイラがこんなおかしな計算はじくはずなんだけど
JavaScriptっておかしなことやってんだな
47:名無し募集中。。。:2021/04/07(水) 20:18:58.95 ID:0.net
>>44
インタープリタとコンパイラの違い教えてほしい?
57:名無し募集中。。。:2021/04/07(水) 21:22:31.74 ID:0.net
>>44 >>45
スクリプト言語すら使ったことがない連中は無知すぎてヤバイな
もちろんスクリプト言語しか使ったことがない連中も当然ヤバイけど
特定のプログラミング言語方面しか知らない連中は知っている世界が狭すぎてプログラマーとして疑問符
58:名無し募集中。。。:2021/04/07(水) 21:31:15.06 ID:0.net
>>57
昔はJavaしか知らんのが幅利かせたりしてたが
今はフルスタックでないとIT技術者としては認められにくいのか
62:名無し募集中。。。:2021/04/07(水) 21:47:59.38 ID:0.net
>>58
Java土方は視野が狭いよね
それはともかく普通にIT技術者なら例えばシェルスクリプトくらい書けて当然であるし
シェルスクリプトでの数値と文字列の取扱いを知っていれば明白な型区別や型宣言がない世界も知っているはず
45:名無し募集中。。。:2021/04/07(水) 20:16:16.52 ID:0.net
こういうガバガバ結合できる 言語ってどうなん?
48:名無し募集中。。。:2021/04/07(水) 20:22:14.62 ID:0.net
>>45
スクリプト系はみんなこーだぞ
46:名無し募集中。。。:2021/04/07(水) 20:18:06.77 ID:0.net
あ、スクリプトだからコンパイラなんかねーか
55:名無し募集中。。。:2021/04/07(水) 21:17:31.75 ID:0.net
ちょっと面白かったけど
不正確なところがちょっとモヤる
65:名無し募集中。。。:2021/04/07(水) 22:34:44.42 ID:0.net
俺のスクリプト言語だと>>1のような記述すると"6"のアドレスの15バイト後ろを指す仕様
66:名無し募集中。。。:2021/04/07(水) 22:52:42.37 ID:0.net
>>65
C言語でも同じだろ
文字列をそのままポインタとして扱う言語ならそうなる
67:名無し募集中。。。:2021/04/07(水) 23:21:05.83 ID:0.net
>>66
バーカwwwww
68:名無し募集中。。。:2021/04/08(木) 00:18:44.83 ID:0.net
Cで試してみた
"6"だとわからないままなので延長
main() { printf("%c", *(1+2+3+4+5+"6abcdefghijklmnopqrstuvwxyz")); }
これでoと出力された
"6"のアドレスの15バイト後ろを指しているね
72:名無し募集中。。。:2021/04/08(木) 00:32:11.77 ID:0.net
変数の型を宣言しない物や関数のプロトタイプ宣言をしない物はプログラム言語ではない
使うべきでは無いとハッキリ言い切れる
78:名無し募集中。。。:2021/04/08(木) 00:55:09.53 ID:0.net
>>72
そんな特殊なものだけがプログラミング言語というわけではないですよ
例えば>>68のC言語のコードもそんな宣言は皆無です
80:名無し募集中。。。:2021/04/08(木) 04:13:54.01 ID:0.net
>>72
そこはあまり本質的じゃない
例えばそれを満たすTypeScriptはトランスパイルされてほぼ同じコードのJavaScriptとなって実行される
プログラミング言語として何か能力が上がったわけでもなく余分に記述した情報で静的に可能な範囲でチェックしてくれる
つまり余分に記述するコストと自動チェックしてくれるメリットを秤にかけて用途や規模などに応じてどちらにするか程度の話となる
83:名無し募集中。。。:2021/04/08(木) 07:05:29.35 ID:0.net
>>80
型宣言しないとプログラミングできない型バカもいるよ
臨機応変に色々使い分けることが出来ない
73:名無し募集中。。。:2021/04/08(木) 00:33:34.20 ID:0.net
スクリプトはプログラムではないな
75:名無し募集中。。。:2021/04/08(木) 00:40:33.84 ID:0.net
スクリプトも大量に書くとプログラムだな
引用元:http://hayabusa3.2ch.sc/test/read.cgi/morningcoffee/1617787498
人気サイト更新情報
人気記事ランキング