JavaScriptを知らない私がはまちちゃんのコードを解読してみる
ぼくならこういう実装にするかな
javascript:alert(((((prompt('1-9の好きな数字をいれてね')*2+5)*50)+*1-(prompt('西暦何年うまれ?')))+'').substr(1))
Hamachiya2 - 「年齢は3行で割り出せるぞ!」のコメント欄より
(カッコ)が多すぎて目が死ぬ!マトリョーシカかよ!!!うっうっ・・・。
このままだとさっぱり分からないので、(カッコ)を色分けして縦に書いてみた。
邪道ぽいけど、私はこの方が分かりやすい。
javascript:alert
( ( (
(
(prompt ('1-9の好きな数字をいれてね')*2+5)
*50)
+
(
(new Date) . getFullYear() -
(
(prompt ('今年の誕生日ってもう過ぎてたっけ?(y/n)') =='y'?0:1)
+249)
)
-
(prompt ('西暦何年うまれ?') )
) +'' ) .substr(1) )
さて、どこから手を付ければ良いものやら(;^ω^)
途方に暮れたが、ふと思い出した。
これ、[カッコ] が二重になってる。意味不明。
でもココは先週あきやんに聞いたの!
えとね、プログラミング言語っていうのはみんなそうらしいんだけど、
こういう場合は ”内側から評価” するらしい。
4日目 おみくじとか作っちゃうかモナー!
確かあのとき、あきやんは「プログラミングやってる人なら分かるんだけど」と言っていた気がする。
だからきっと javascript も内側から評価するはず。よし!出来る気がしてきた!
javascript:alert
ブラウザのアドレスバー(普段URLを入れたりURLが表示されたりしてるところ)に
javascript:alert(計算式); と打ち込んでみましょう。
[javascript]alertを活用する
ぉお!アドレスバーに直接これを打ち込むのか!
.js で保存してしまった。恥。
prompt()
promptメソッドは、指定したウィンドウに文字ダイアログを表示します。
window.prompt("ダイアログに表示される文字列","入力欄の初期値")と指定します。
JavaScriptリファレンス
だからウィンドウで「1-9の好きな数字をいれてね」と出てくるのか。
確かむかぁぁーしちょっとだけかじった javascript 入門書に、window は省略可能と書いてあった気がする・・・
と思って探してみたらやっぱりあった!
windowオブジェクトはブラウザのウィンドウそのものを指します。
わかりきっていることだから「暗黙の了解」ということで、
省略してもかまわないということなのです。
3ステップで覚えるJavaScript―こうすれば自分で書ける・作れる!
はっ、そうか。
いま入力欄の初期値がundefinedって入ってるんだけど、これは指定してないからなのか。
(prompt('1-9の好きな数字をいれてね','')*2+5)
こうするとブランクになる。なるほど感動した!
たぶんこれ常識なんだろうけど、私にとっては感動的なのだ><
*2+5)*50) は計算してるのかな。
算術演算子 - JavaScriptの演算子
そのあとの+ は、足し算じゃなくて文字列結合だろうか。
文字列結合演算子 - JavaScriptの演算子
(new Date) . getFullYear()
document.write((new Date).getFullYear()+"年")
現在の西暦を書き出す。
getFullYear()
現在の西暦を取得して、ここから何かを引くらしい。
(prompt ('今年の誕生日ってもう過ぎてたっけ?(y/n)') =='y'?0:1)
この一行の 'y'?0:1 が一番分からなかった><
== っていうのは、代入とは違う。
なんていうか、文字通りイコール。今度は本気のイコール。超イコール。だから2回書く。
5日目 もし私が女子高生だったら
javascriptの == もひょっとして超イコールか!?と思ったらやぱりそうだった!
比較演算子 - JavaScriptの演算子
「今年の誕生日ってもう過ぎてたっけ?」の答えがyesだったら、yだったら・・・なんなのさヽ(‘Д´)ノ
一瞬あきらめかけたんだけど、↑のページの一番下に希望を見た。
< 代入変数 > = < 条件式 > ? < 真 > : < 偽 > ;
条件演算子 - JavaScriptの演算子
む。条件演算子?
◆ exp1 ? exp2 : exp3 (e3/N2)
exp1 が真であれば exp2 を、さもなくば exp3 を返します。
演算子
とゆことは、「今年の誕生日ってもう過ぎてたっけ?」に対する答えが y だったら0,そうじゃなかったら1を返すってことか。
substr(1)
string の from 番目から len 文字分(最初の文字を 0 番目とする)の文字列を返します。
len を省略すると残りのすべてを返します。
文字列(String)
おおおおおおお!!!!!!
このスクリプト最大のなぞが!!!とけた!!!!!!!!!!!
や、最初に「1-9の好きな数字をいれてね」と言われて入力したのはどこに行っちゃったのかなあと。
あれはなんの意味があるんだろーって、いろいろな数字で試したけど結果は変わらず。
特に意味のない質問だったとしても、数字を入力したことは意味を持つ。
はまちちゃんの茶目っ気さ☆というニュアンスを、プログラムが組んでくれるはずがない><
そーかそーか、1番目の数字から残りすべてを返せ、と指定してるから、
0番目にあたる最初の質問の答えは表示されないのか!
すげー!すげーーー!!今年いちばん感動した!!!
しかし *2+5)*50 はなんだろう・・・うーむ。。。
冒頭のコードに数字を当てはめてみよう。
1979年11月12日生まれのござ先輩の場合でやってみる。
好きな数字には 9 を入力。
{ (9×2+5)×50 } + 2008 − 249 − 1979
答えは 930。substr(1) で 1 文字目から表示しろと指定してるので、30と出る。
あれ、ござ先輩って実はミソジー?
javascript:alert(((((prompt('1-9の好きな数字をいれてね')*2+5)*50)+*1-(prompt('西暦何年うまれ?')))+'').substr(1))
Hamachiya2 - 「年齢は3行で割り出せるぞ!」のコメント欄より
(カッコ)が多すぎて目が死ぬ!マトリョーシカかよ!!!うっうっ・・・。
このままだとさっぱり分からないので、(カッコ)を色分けして縦に書いてみた。
邪道ぽいけど、私はこの方が分かりやすい。
javascript:alert
( ( (
(
(prompt ('1-9の好きな数字をいれてね')*2+5)
*50)
+
(
(new Date) . getFullYear() -
(
(prompt ('今年の誕生日ってもう過ぎてたっけ?(y/n)') =='y'?0:1)
+249)
)
-
(prompt ('西暦何年うまれ?') )
) +'' ) .substr(1) )
さて、どこから手を付ければ良いものやら(;^ω^)
途方に暮れたが、ふと思い出した。
これ、[カッコ] が二重になってる。意味不明。
でもココは先週あきやんに聞いたの!
えとね、プログラミング言語っていうのはみんなそうらしいんだけど、
こういう場合は ”内側から評価” するらしい。
4日目 おみくじとか作っちゃうかモナー!
確かあのとき、あきやんは「プログラミングやってる人なら分かるんだけど」と言っていた気がする。
だからきっと javascript も内側から評価するはず。よし!出来る気がしてきた!
javascript:alert
ブラウザのアドレスバー(普段URLを入れたりURLが表示されたりしてるところ)に
javascript:alert(計算式); と打ち込んでみましょう。
[javascript]alertを活用する
ぉお!アドレスバーに直接これを打ち込むのか!
.js で保存してしまった。恥。
prompt()
promptメソッドは、指定したウィンドウに文字ダイアログを表示します。
window.prompt("ダイアログに表示される文字列","入力欄の初期値")と指定します。
JavaScriptリファレンス
だからウィンドウで「1-9の好きな数字をいれてね」と出てくるのか。
確かむかぁぁーしちょっとだけかじった javascript 入門書に、window は省略可能と書いてあった気がする・・・
と思って探してみたらやっぱりあった!
windowオブジェクトはブラウザのウィンドウそのものを指します。
わかりきっていることだから「暗黙の了解」ということで、
省略してもかまわないということなのです。
3ステップで覚えるJavaScript―こうすれば自分で書ける・作れる!
はっ、そうか。
いま入力欄の初期値がundefinedって入ってるんだけど、これは指定してないからなのか。
(prompt('1-9の好きな数字をいれてね','')*2+5)
こうするとブランクになる。なるほど感動した!
たぶんこれ常識なんだろうけど、私にとっては感動的なのだ><
*2+5)*50) は計算してるのかな。
算術演算子 - JavaScriptの演算子
そのあとの+ は、足し算じゃなくて文字列結合だろうか。
文字列結合演算子 - JavaScriptの演算子
(new Date) . getFullYear()
document.write((new Date).getFullYear()+"年")
現在の西暦を書き出す。
getFullYear()
現在の西暦を取得して、ここから何かを引くらしい。
(prompt ('今年の誕生日ってもう過ぎてたっけ?(y/n)') =='y'?0:1)
この一行の 'y'?0:1 が一番分からなかった><
== っていうのは、代入とは違う。
なんていうか、文字通りイコール。今度は本気のイコール。超イコール。だから2回書く。
5日目 もし私が女子高生だったら
javascriptの == もひょっとして超イコールか!?と思ったらやぱりそうだった!
比較演算子 - JavaScriptの演算子
「今年の誕生日ってもう過ぎてたっけ?」の答えがyesだったら、yだったら・・・なんなのさヽ(‘Д´)ノ
一瞬あきらめかけたんだけど、↑のページの一番下に希望を見た。
< 代入変数 > = < 条件式 > ? < 真 > : < 偽 > ;
条件演算子 - JavaScriptの演算子
む。条件演算子?
◆ exp1 ? exp2 : exp3 (e3/N2)
exp1 が真であれば exp2 を、さもなくば exp3 を返します。
演算子
とゆことは、「今年の誕生日ってもう過ぎてたっけ?」に対する答えが y だったら0,そうじゃなかったら1を返すってことか。
substr(1)
string の from 番目から len 文字分(最初の文字を 0 番目とする)の文字列を返します。
len を省略すると残りのすべてを返します。
文字列(String)
おおおおおおお!!!!!!
このスクリプト最大のなぞが!!!とけた!!!!!!!!!!!
や、最初に「1-9の好きな数字をいれてね」と言われて入力したのはどこに行っちゃったのかなあと。
あれはなんの意味があるんだろーって、いろいろな数字で試したけど結果は変わらず。
特に意味のない質問だったとしても、数字を入力したことは意味を持つ。
はまちちゃんの茶目っ気さ☆というニュアンスを、プログラムが組んでくれるはずがない><
そーかそーか、1番目の数字から残りすべてを返せ、と指定してるから、
0番目にあたる最初の質問の答えは表示されないのか!
すげー!すげーーー!!今年いちばん感動した!!!
しかし *2+5)*50 はなんだろう・・・うーむ。。。
冒頭のコードに数字を当てはめてみよう。
1979年11月12日生まれのござ先輩の場合でやってみる。
好きな数字には 9 を入力。
{ (9×2+5)×50 } + 2008 − 249 − 1979
答えは 930。substr(1) で 1 文字目から表示しろと指定してるので、30と出る。
あれ、ござ先輩って実はミソジー?
*1:new Date).getFullYear()-((prompt('今年の誕生日ってもう過ぎてたっけ?(y/n)')=='y'?0:1)+249