========================================= JavaScript入門 ========================================= Hello, World! ======================= | それではJavaScriptについて勉強していきたいと思います。 | JavaScriptはHTML内に記述することができます。 | headタグ内、もしくはbodyタグ内に下記のような記述をしたHTMLファイルを作成してみてください。 .. code-block:: html | 作成したHTMLファイルをブラウザで確認してみましょう。 | Hello, World! と表示されたら成功です。 | 外部JavaScriptファイル(.js) ------------------------------ | JavaScriptもCSSと同様に、基本的にHTMLファイルから分離させます。 | 以下の1行を書いたファイルをsample.jsという名前で作成してください。 .. code-block:: js document.write("It Works!!"); | そして、このjsファイルを読み込むためのHTMLファイルを作成します。 | sample.jsと同じ階層に以下のようなファイルを作成してください。 .. code-block:: html | うまく外部ファイルを読み込めましたでしょうか? | It Works!!と表示されたら成功です。 コメント ========== コードを記述する中で、「何の処理なのかメモしたい」とか「他の人が見たときに分かり易いようにコメントを書こう」ということがよくあります。 JavaScript中にコメントを記述するには、コメントにしたい文章の頭に「//」を書きます。 .. code-block:: javascript //ここは表示されません。 | 「//」以降はコメントとして認識され、javascriptの実行時に無視されます。行の途中からコメントを記述することもできます。 .. code-block:: javascript alert("Hello World"); //ハローワールド | 上記の場合、「alert("Hello World");」は実行されますが、「//ハローワールド」はコメントとして扱われ無視されます。 | また、複数行に渡るコメントも設定可能です。 .. code-block:: javascript /* ここの領域は コメントとして 扱われ 無視されます */ | /\*と\*/で囲まれた部分はコメントとなります。 | Javascriptに限った話ではなく、後々のためにも、そして他の人のためにもプログラムには適時コメントを書き残しておきましょう。 行末 ======== | プログラムを書く際、「ココからココまでが1つの処理だよ!」ということを認識させてあげる必要があります。日本語の文章で言うところの句点です。 | 言語によっては改行が1つの処理を表すこともありますが、JavaScriptでは『;(セミコロン)』を使います。 .. code-block:: javascript document.write("Hello World!!"); | は、「Hello World!! と表示します。」という意味のプログラムで、document.write("Hello World!!")で1つの処理が終わる事を意味していました。 | 複数行のプログラムを記述する際、セミコロンが抜けてしまったら .. code-block:: javascript document.write("Hello World!!")document.write("Hello Japan!!"); | document.write("Hello World!!")document.write("Hello Japan!!"); で一つの処理と認識されてしまい、文法エラーとなってしまいます。 | 日本語で考えてみると「Hello World!! と表示しますHello Japan!! と表示します。」です。 | 慣れないうちはセミコロンを忘れてしまいがちです。エラーが出たら先ずセミコロンがもれていないか確認してみるとよいでしょう。 関数 ========= | 数学で関数を学習されたことがあると思います。例えば「f(x)」。これはxにある値を入れたら、値が変換されて返ってくるというものです。 | プログラムにおける関数も基本的には数学の関数と同じ理解で問題ありません。 .. code-block:: javascript document.write(x); | 先ほどから登場しているdocument.write(x)、これも関数です。xに入れた値をHTML本文中に表示します。 | | 他にも .. code-block:: javascript alert(x); // xに入れた値をアラートウィンドウで表示する print(); // 印刷を実行する scroll(x, y); // 座標x,yの位置まで画面をスクロールする | など、いろいろな関数がありますので調べて実行してみましょう。 | | 課題1 ----------- | document.write()、及びalert()を使って、自由に文章を表示してみましょう。 | 文章を表示することが出来たら、文章内にHTMLタグを打ち込んでみましょう。 .. raw :: html JS Bin データ型 ========== **文字列型** | JavaScriptに『文字列(String)』を記述する場合、文字列全体を『"(ダブルクオート)』あるいは「'(シングルクオート)」で括ります。 .. code-block:: javascript document.write("Hello World!!"); | はwrite関数に「Hello World」という文字列を渡したいから「"」で括られていたことがわかりますね。 .. code-block:: javascript document.write('Hello World!!'); | でも同じ挙動になります。 | | ひとつ注意しなければならないのが、文字列の中でシングルクオートやダブルクオートを使いたい場合です。 .. code-block:: javascript document.write("リンクだよ"); | と書きたくなりますが、""の間が文字列と認識されるので、「リンクだよ」という2つの文字列、そして間のindex.htmlというナニかである、と解釈されてしまいます。 | 後述のエスケープシーケンスを使うか、或いは .. code-block:: javascript document.write("リンクだよ"); document.write('リンクだよ'); | のように、ダブル(シングル)クオート中でシングル(ダブル)クオートを使うことで回避できます。 **数値型** | JavaScriptに『数値』を記述する場合は括る必要性はありません。 .. code-block:: javascript var a = 5; var b = 3; **論理型** | 論理型はtrue,もしくはfalseであらわされる2項の型です。これも括る必要性はありません。 .. code-block:: javascript var flag_a = true; var flag_b = false; **ヌル型** | nullは有効な値が存在しないということを表すための値です。これも括る必要性はありません。 .. code-block:: javascript var num = null; デバッガの使い方 ================== | デバッガは、何行目にどういうエラーが出ているかを教えてくれるツールです。 | これを使いこなせるととても便利なので、使う習慣を身につけましょう。 .. image:: /_static/error.png **Google Chrome、IEの場合** F12キーでデバッガを立ち上げることができます。 **FireFoxの場合** | FireFoxにはFirebugというアドオンがあります。下記のURLから入手できます。 | https://addons.mozilla.org/ja/firefox/addon/1843/ これを使うと、構文のエラー等、エラーの内容を表示してくれます。 | また、デバッガにはプログラムを特定に位置で中断するブレークポイント機能や、一段階ごとに実行するステップ実行などがついています。 変数 ======= | 先ほどのプログラムでは、コンピュータに指示をする関数の勉強をしました。関数と並んでプログラムで重要なのが、変数です。 | 変数はコンピュータである値を保管しておくための器です。数学でも'x'という変数がよく定義されます。xにはいろいろな数字が入ります。それを拡張して、データなら何でも入れられるようになっているのが変数です。 | 試しに、1つ変数を作ってみましょう。 .. code-block:: javascript var text = "Hello, World!"; | varというのは以下の文字が変数であることを示すものです。JavaScriptの場合、varをつけて変数であるという宣言をする必要はありませんが、変数を定義した場所が分かるので、varをつけておくことをお勧めします。 | =の意味ですが、この場合は数学のように等号を示すものではなく、代入を示すものです。つまり、textという変数の中に、"Hello, World!"という文字列を入れるということを意味しています。 このテキストの中身を表示するには、 .. code-block:: javascript document.write(text); | で可能です。先ほどと違うのは、ダブルクオーテーションがありません。これは、textという変数の中身を示しているからです。これを動かしてみると、 .. code-block:: none Hello, World! | と表示されるはずです。このtextに入れる文章の値をさまざまに入れ替えてみてください。 | 変数の名前も自由です。さまざまな名前の変数を作ってみてください。 演算子 =========== これらの数値は、演算子を使うことで計算することが出来ます。 ======== =========================== 演算子 説明 ======== =========================== \+ 加算 \- 減算 = 乗算 / 除算 % 剰余(割ったあまりを返す) ======== =========================== これとは別に、定型的な演算子もあります。 ======== ================================================== 演算子 説明 ======== ================================================== ++ インクリメント(整数型の値に1を足す) \- - デクリメント(整数型の値から1を引く) ======== ================================================== .. code-block:: none 注:表記上見難いですが、デクリメントはマイナス2つ連続して表記します。 | | | これらの演算子は、 .. code-block:: none ++a; a++; | のように使います。この場合、aが整数であれば、aに1が加算されます。 .. code-block:: javascript var a = 0; document.write(++a); | で試してみてください。これは、一見必要性がわかりにくいですが、後の単元で行う繰り返し処理などで非常に活躍します。 | ちなみに、++aとa++の違いですが、先に++を書いた場合、aに1を足してから処理が実行されます。あとに++を書いた場合、処理を実行してからaに数が足されます。 .. code-block:: javascript var a = 0; document.write(a++); document.write(a++); document.write(a); var b = 0; document.write(++b); document.write(++b); document.write(b); | を実行して、その挙動の違いを確かめてみてください。 | | 課題2 --------- - 2つの変数を作成し、一通り四則演算を行いましょう。 - 次に、変数に代入する値にダブルクオーテーションをつけ、文字列型に変更し、その結果を数列型と比較してみましょう。 例えば、 .. code-block:: javascript var a = 100+100; var b = "100"+"100"; と入力し、それぞれどういう違いがでるか確かめてみてください。 .. raw :: html JS Bin 条件分岐 ========== **if文** if文は以下のように記述します。 .. code-block:: none if (条件) { 処理A; } else { 処理B; } 条件に合致した場合は処理Aを、合致しなかった場合は処理Bを実行します。else節以降を外して、 .. code-block:: none if (条件) { 処理A; } | とすれば、条件に合致したときにのみ実行する処理を記述可能です。 | 「**もし条件ならば、処理Aを実行する。条件でなければ、処理Bを実行する**」ということです。 | 例として、与えられた数字が偶数であるかを判定するプログラムを作成します。 .. code-block:: javascript var a = 10; // 変数aを定義し、10を代入 if ( a % 2 == 0 ) { // もし変数iを2で割った余りが0であれば、以下の処理を実行 alert("偶数"); // アラートで「偶数」と表示 } else { // 上記条件に当てはまらなければ、以下の処理を実行 alert("奇数"); // アラートで「奇数」と表示 } この条件式の中に含まれている==ですが、これは等しいことを表す演算子です。左右の値が同じであれば、条件に合致したと見なされます。 この場合、条件式が真であるといいます。 **比較演算子** これらの演算子は比較演算子と呼ばれ、以下のようなものがあります。 ====== ======== 符号 説明 ====== ======== \== 等しい != 異なる < 小なり > 大なり <= 以下 >= 以上 ====== ======== **論理演算子** さらに複雑な条件式を組むために、論理演算子が使用できます。 ===== ===== && AND \|| OR ===== ===== 例えば、aが偶数かつ100より大きい、という条件を作る場合は、 .. code-block:: none a % 2 == 0 && a > 100 と書くことが出来ます。 **elseif文** if文をさらに高度にさせた文に、elseif文があります。if文のelseの場合、さらに条件分岐をさせるものです。 .. code-block:: none if (条件式A) { 処理A; } else if (条件式B) { 処理B; } else { 処理C; } 条件式Aが真の場合は処理A、条件式Aが偽の場合で条件式Bが真の場合はB、どちらも偽の場合はCが実行されます。else ifをたくさんつなげて、より高度な処理を行なうことも可能です。 インデント・字下げ =================== | プログラムを記述するときに注意しなければいけない事のひとつにインデント(字下げ)があります。 | HTMLやJavaScriptの構造を分かりやすくするために空白を入れたり、適切な所で改行することが求められます。 | 例えば以下の2つのプログラムは全く同じ働きをします。 .. code-block :: js if(a== b){document.write("aとbは等しい"); } else {document.write("aとbは等しくない"); } .. code-block :: js if (a == b) { document.write("aとbは等しい"); } else { document.write("aとbは等しくない"); } | 上のようにインデントを無視してしまうと、文法エラーを起こしやすくなったり、他の人が読みにくいコードになってしまいます。 | 単語や括弧の間には1つスペースを空ける。4つスペースを空ける等といったルールがあります。 | プログラミング言語によってはこのインデント自体がプログラム構造の解釈を決定づけるものもあります。 | 最初のうちは戸惑ってしまいがちですが、大事なことなので学習する時からしっかりと注意してみてください。 switch文 ================= | 条件分岐の項目でif文について理解したと思います。 | switch文は与えられた変数の値によって処理を分岐する方法です。 | caseの後に想定する変数の値を記述し、case毎に処理を記述します。 | 実行時に変数に渡された値と、caseの後に記述した値が一致すると処理が実行されます。 | それぞれの処理の終了部分には「break;」を記述します。「break;」が記述されていないと以下に続く処理が続いて実行されてしまいますので気をつけましょう。 .. code-block:: js var science = 'chemistry'; // 変数scienceを定義し、chemistryという文字列を代入 switch (science) { case 'physics': // 変数scienceの値がphysicsであれば以下の処理を実行 document.write("私は物理が好きです。"); // 「私は物理が好きです。」と表示する break; // switch文を終了 case 'biology': // 変数schienceの値がbiologyであれば以下の処理を実行 document.write("私は生物が好きです。"); // 「私は生物が好きです。」と表示する break; // switch文を終了 case 'chemistry': // 変数schienceの値がchemistryであれば以下の処理を実行 document.write("私は化学が好きです。"); // 「私は化学が好きです。」と表示する break; // switch文を終了 default: // 変数scienceの値がphysicsでもbiologyでもchemistryでもない場合、以下の処理を実行 document.write("私は理科が好きです。"); // 「私は理科が好きです。」と表示する break; // switch文を終了 } | 上記の例では変数scienceにchemistryが代入されているので「case 'chemistry':」の処理が実行され、「私は化学が好きです。」と表示されます。 | 課題3 --------- | 数値を入れ、100以上200未満の場合は、その数を3で割った余りを「漢数字」で表示するプログラムを作りましょう。 | if文とswitch文の両方を使ってください。 .. raw :: html JS Bin 繰り返し文 ========================== | プログラムを書いていると、ループ(繰り返し)をさせて複数の項目の表示を行いたいことがあります。 | 例えば1~99までの連番を表示させたいとき、いちいち手入力で入力するよりもループさせた方が確実に早いです。 | 繰り返し文の表記にはwhile文とfor文の2種類があります。 while文 ------------ | while文は条件式が真の間だけ、処理を繰り返し実行するものです。 .. code-block:: js while (条件式) { 処理; } | 以下は"ありがとう"を100回表示するプログラムです。 .. code-block:: js var i = 0; // 変数iを定義して0を代入 while (i < 100) { // 変数iが100未満であれば処理を実行、100より大きければ処理を実行せずループを終了 document.write("ありがとう"); // 「ありがとう」と表示する i++; // 変数iに1を加算する } // 条件式へ戻る | 処理を実行する度に変数iを1ずつ増やして、変数iが100未満の間だけ処理を実行するようにしています。 .. code-block:: js while (1 == 1) { document.write("ありがとう"); } | 上記のように必ず真になる条件式を設定してしまうと、永遠に"ありがとう"を表示し続けるプログラムが作成されてしまいます。 | こういった場合は、どこかでif文を組み込み、「break」という命令を入力することで処理を中断させることができます。 .. code-block:: js var i = 0; // 変数iを定義して0を代入 while (1 == 1) { // 1 == 1 は真となるので必ず処理を実行 document.write("ありがとう"); // 「ありがとう」と表示する i++; // 変数iに1を追加する if (i > 100) { // もし変数iが100より大きければ以下の処理を実行 break; // ループを終了 } } // 条件式へ戻る | while文は無限ループの原因になりやすいので、条件式をきちんと設定するように気をつけましょう。 for文 ------------ | while文以外のもうひとつの繰り返し処理の例が、for文です。 | for文は継続条件式が真の間繰り返し実行されるというものです。定義は以下の通りです。 .. code-block:: js for(初期化式; 継続条件式; 再初期化式){ 処理; } | こう書くととても難しいように見えますが、実際的には、限られた回数だけ処理を行ないたい場合、while文より便利です。 | 処理の流れを見てみましょう。 | | 1.「初期化式」を実行 | 2.「継続条件式」で真と判定された場合に内部の処理を実行、判定結果が偽の場合ループを終了 | 3.「再初期化処理」を実行 | ※以降2,3の繰り返しとなります。 | | 例えばwhileの例であった、「ありがとう」を100個表示するプログラムをfor文で記述してみましょう。 .. code-block:: js // 変数iを定義し0を代入 ※ループの初回のみ実行される for (var i = 0; i < 100; i++) { // 変数iが100未満だったら以下の処理を実行、変数iが100より大きければ処理を実行せずにループを終了 document.write("ありがとう"); // 「ありがとう」と表示する } // 変数iに1を加算し、継続条件式へ再び「i < 100」が真となるか判断する。 ネスト --------------- | if文の中にif分を書き込むことができるように、 | 繰り返し処理も、何重にも記述することができます。 .. code-block:: js for (var i = 0; i < 100; i++) { for (var j = 1; j <= 100; j++) { document.write(j); } } | この場合、1から100までの連番が100セット表示されます。 課題4 ------------ | ①while文を使って、xの3乗の値を表示させて下さい。xの定義域は-10以上10以下とします。 | | **出力例** | x = -10のとき, y = -1000 | x = -9のとき, y = -729 | ~~~~~~~~省略~~~~~~~~ | x = 10のとき, y = 1000 .. raw :: html JS Bin | | ②for文をネストさせて、使って九九の表を作ってください。 .. code-block:: js for (var i = 1; i <= 9; i++) { for (var j = 1; j <= 9; j++) { } } .. note:: | 適切なHTMLタグと文字を出力する処理を書き込めば、tableで表を出力できます。 | tableの作り方を思い出してみてください。テーブルは行の場合は