「JavaScriptのすべてを語ろう」

な〜んて大それたタイトルを付けてますが、実はJavaScriptの超入門の入門。つまりJavaScript入門の本を読む前に読むといいかも的内容です。会社でセミナーを受けたので、その内容を社内用に書いたものを載せてますので、言い回しが一般的でない箇所があります。ご了承ください。
 

第1回「JavaScriptとは?」

第2回「JavaScriptちょー基本」

第3回「JavaScriptもそっと基本」

第4回「JavaScript貯めとけ!箱」

第5回「JavaScriptかんたんかんたん文法」  

第6回「JavaScript出たり入ったり1」

第7回「JavaScript出たり入ったり2」

第8回「JavaScript出たり入ったり3」

第9回「JavaScriptトホホの堂々めぐり」

第10回「JavaScriptトホホのブラウザ問題」

このページのトップへ

第1回「JavaScriptとは?」


JavaScript(以下JS)とはホームページ上で(正確に言うとWEBブラウザ上で)動作させるためのプログラムの一種。ホームページに文字や写真を表示するにはまずHTMLというプログラムを作らなければならないが、これではただ表示してるだけ。「コンピュータなんだからもうちょっと色々やってよねぇ」というわけで登場するのがプラグイン。これはブラウザ自体に機能を追加する物。動画や音楽の再生によく使われる。さらに「もっと」という御仁のために登場するのが、CGI。HTML文書を保存してあるサーバがとてもいろんな仕事をこなしてくれる。これがあればホームページ上で見積もりが作れたりしちゃう。でも人気のあるホームページのサーバはCGIをテキパキこなしすぎて、たまに知恵熱を出して寝込んでしまったりする。でJSの出番。JSはHTML文書の中にあり、ホームページを見てる人のパソコンの中でプログラムを実行するから、サーバが風邪をひくことはない。

今あげたいろんな拡張形式は一長一短があり、TPOで使い分けるべき物で、どれが悪いとかいう話ではないので注意。たとえば、プラグインは動画や音声を扱うのが得意なので、動画付きの見積書なら(意味ないけど)まかしてよって感じ。CGIはサーバーを使うので、複数の人が同じファイルをみる(たとえばデータベース)という使い方が可能。掲示板なんかがそう。逆にJSは個人のPCで動くため、掲示板には不向きで、占いなどの使い方が考えられる。

今回のセミナーでは、そのJSのプログラミングの基本を学んだ。

次回「JavaScriptちょー基本」乞うご期待。

このページのトップへ

第2回「JavaScriptちょー基本」


JSは

<Script Language = "JavaScript">

で始まり

</Script>;

に終わる。

このタグの間にスクリプトが書かれ、実行される。HTML文書のどこに配置してもよい。実行結果は、たとえば文中の語句を入れ替えるかもしれない。フォームのフィールドの内容を変更するかもしれない。ボタン名が変わるかもしれない。背景色がレインボーになるかもしれない。絵が移動するかもしれない。

スクリプトは何かのきっかけで、実行に移される。ホームページが開いたときかもしれない。ボタンをクリックしたときかもしれない。アンケートフォームに入力したときかもしれない。これを「イベント駆動型プログラム」という。大げさなネーミングだが、今のパソコンソフトはみんなこのタイプ。

実行に移されたスクリプトは、ホームページ上の何らかのパーツに対して、何らかの働きかけをする。でないと、なにも変化がない。イコールなにもしてない。スクリプトは「ウインドウさん、閉じてください」「イラストさん、ほかのイラストと交代してください」「フォーム内のテキストさん、ご登場ですよ」。これを、「オブジェクト指向プログラミング」という。

だから、ホームページ上のパーツ(オブジェクト)には、属性(プロパティ)があり、動作(メソッド)に対するコマンドが、用意されている。

ウインドウ内に表示するなら

document.write("これを表示");

とすればよい。(document=このウインドウ、write=書き込む)

次回は「JavaScriptもそっと基本」。

このページのトップへ

第3回「JavaScriptもそっと基本」


さて、もうちょっとつっこんだ話。

似たようなプログラムが、同じHTML文書で何回もでてくるとする。そうすっと、似たようなスクリプトを何回も書かなければいけない。たとえば、A+Bという計算とC+Dという計算ができるホームページだとする。そんなとき僕は人として「スクリプトを流用させてください」と切に願う。何かと何かを足すというスクリプトが流用できるから。

人類皆兄弟。みんなそう考えている。だから、「関数」という概念がでてくる。関数はあるスクリプトから呼び出すための部品。車が外装だけを変えて別の車種になるように、スクリプトも流用すれば安上がりってワケ。実は、手間の問題だけではなく、ブラウザが呼び出すデータも軽くなるわけで、一石二鳥。

じゃどうやって使うか。

<scirpt language="JavaScript">
function keisan(a,b){
〜aとbを足す〜
}
</script>

これで流用部品ができた。

functionここから流用パーツでっせという宣言。keisannこれはパーツの名前。何でもいい。(a,b)呼び出し側は答えがほしいけどそのために素材を渡さなくてはいけない。かっこ内はそれを受け取る場所。この例では、aやbと名前を付けた受け皿を用意している。〜aとbを足す〜のところはそういう内容のスクリプトが入るという意味でこの例ではスクリプトではありません。{と}で囲ってある範囲が関数なんですな。

これをどこへ書くか?ブラウザは当然ファイルの頭から読み込んで、逐一解析して表示するわけだけど、関数が呼び出し側より後に書いてあると、「関数ないやんけ」ということになる。エラーである。というわけで、関数は呼び出し側より前に書こうね。以上。

次回「JavaScript貯めとけ!箱」to be continue!

このページのトップへ

第4回「JavaScript貯めとけ!箱」

箱。本当は「変数」といいます。

何の箱か?データの格納庫です。数字とか、テキストとか。箱がないと、関数できません。なぜって?色々当てはめられて、様々な計算に使えるのが、関数でしょう?データの格納庫の中身を使いたいときに使いたい内容で、使い回せなきゃさ、意味ないじゃん。前回、受け皿という言葉を使ったけど、あれも変数の一つなのだね。

使いたい内容にする。これ大事。代入という。

a = 150

今、aという箱に150という数字を代入しました。イコールで繋がってるけど、イコールと覚えると間違える。

b = a + 200

今、bという箱にaと200を足した数字を代入しました。さっきaには150を入れていたからbは350になりました。

document.write(b)

今ブラウザに計算結果bを表示させました。画面には350という数字が表示されたのです。めでたし、めでたし。ちょっとプログラムっぽくなってきたじゃん。

ようやく、JSの輪郭が見えてきたところで、次からディテールをレクチャーしよう。

次回「JavaScriptかんたんかんたん文法」見逃すな!!

このページのトップへ

第5回「JavaScriptかんたんかんたん文法」


さてなにをプログラムするか、という話の前に、JSの「てにをは」を理解するべきだ。JSは数あるスクリプト(プログラム)の中でも、文法が甘い部類に入る。そう肩肘張る必要はない。今までの話と少しダブるかもしれないが、改めてここに書いてみよう。

●<SCRIPT>タグの中に記入する

<SCRIPT language="JavaScript">
うんたらかんたら </SCRIPT>

関数の場合は

<SCRIPT>
function(受け皿){
うんたらかんたら
}
</SCRIPT>

※functionの後ろが{}で囲まれていることに注意。これは常に対で使われなければならない。

●大文字・小文字は関係ない

ただし日本語では書けない(データとして扱うテキストとしての日本語は可)

●スペース・タブ・改行は無視

これらはあくまでもスクリプトを書く上で文章を整形し、見やすくするためにある。だからこれらをスクリプトの結果の中に埋め込みたい場合は、特殊な記号を使う

●"うんたらかんたら"の部分は、いくらでもスクリプトを書くことができるが、一つの実行単位につき、行末に;が入る

a = b + c;
document.write("こんにちは");

●HTML文書の中のタグ以降にスクリプトを書く場合は、念のためコメントアウトする

まれにJSに対応していないブラウザで見ている人がいる。その人のための配慮。コメントアウトとは注釈のことで、HTML文書中に作者自身のために書くメモのような物。ブラウザのウインドウには表示されない。このタグを利用して、スクリプトをメモ扱いにする。これを忘れると、スクリプトの内容がそのまま表示されてしまう。

これくらいを頭に入れて、さぁ次回「JavaScript出たり入ったり」から書き方を学ぼう。

このページのトップへ

第6回「JavaScript出たり入ったり1」

あ、さて第2回で「イベント駆動型」「オブジェクト指向」と書いた。これは実際はどういうことなのか?

たとえばボタンをクリックした、フォームに入力したなど、ホームページにはユーザに何かしらのアクションを起こさせる仕掛けがある(ま、見せるだけでなにもないページもあるけど)。そのアクションがきっかけとなって、スクリプトが動き出す。これが「イベント駆動型」プログラム。JSのスクリプト内で、まず書かなきゃいけないのがイベントをキャッチする部分。「イベントハンドラ」という。これを画像なら画像の、フォームボタンならフォームボタンのタグに忍ばせる。

<img src="image.gif" onClick="gonext()">

最初の<img src〜の部分は通常のHTMLで画像を表示しますというタグ。次のonClickにご注目。これがイベントをキャッチするスクリプト。そう、HTMLタグの中にスクリプトが同居している。で、gonext()は第3回で話した、関数(function この場合gonextという適当に今命名した名前の関数)を呼び出している。で、関数内に書かれたスクリプトが、動作するってワケ。

一応断っておくけど、ホームページが表示されるってのもれっきとしたイベントなので、ユーザがまだ何もしていないうちから、起動させる方法もある。

「イベントハンドラ」には何があるか?

さっき出てきたonClick、これはそのパーツがクリックされましたというイベントハンドラ

そのほか代表的な物をあげてみよう。

OnMouseOverマウスがそのオブジェクトの上にきたことを伝える
OnMouseOutマウスがオブジェクト上空からはずれた
onChangeフォームなどのオブジェクトに入力した後など、ほかのフォームへ入力が移ったとき

といった具合。もちろんパーツによって、受け取れるイベントが違う場合もあるので、本などをみて確認。

さ、スクリプトが動き出した、と書こうとしたけど、ちょっと長くなりそうなので、続きは次回「JavaScript出たり入ったり2」。

第7回「JavaScript出たり入ったり2」

さ、でスクリプトが動き出した、と、その答えをどうするか?どこに戻すかが問題。

ふつうならユーザが何かしらのテキストを入力したくなるフォームにその答えを表示するもよし。まっさらな新しいページを表示して、そこに答えを表示させるか。またスクリプトによっては、画像を入れ替えるってのもスクリプトのリアクションだ。

そういったホームページ上の(ブラウザの、といった方が正確かな?)様々なパーツにリアクションを働きかけることができる。JSの仕事とは大ざっぱにいうとそんな感じ。で、スクリプトが操作できるパーツは一般的に「オブジェクト」と呼ばれているので、これが「オブジェクト指向」プログラムというもんなんですな。

んだばオブジェクトはどないなもんなんだ?ということだが、下を見てほしい。

PluginMimeType
window
frameLayer
dcument───LinkTextarea
locationAnchorText
historyAppletHidden
ImageSubmit
AreaCheckbox
PluginFileUpload
Form───Password
Reset
Radio
Select────Objecct
navigator

長くなったけど、見て分かるとおり、階層構造になっている。

なぜか?

ブラウザには上からタイトルバー、ボタン類、URL記入欄、ホームページ表示スペース、というような順で並んでおり、決まった位置にある。あったり前田のクラッカーじゃないか!!といわれそうだけど、たとえば、「戻る」ボタンがURL記入欄の中にあったりしないよね?フォーム記入欄はタイトルバーにはないよね?といった具合に決まった位置がある。上の図のwindowとは要はホームページ表示スペースのことだけど、画像(image)もフォーム(Form)も送信ボタン(Submit)もその中にあるって寸法だね。

このオブジェクトに対してどうするか?ちょ〜どお時間と〜な〜りました。べんべん。続きは次回に繰り越し「JavaScript出たり入ったり3」見てね。

第8回「JavaScript出たり入ったり3」

5〜6回で終わるつもりだったんだけどな〜。終わらね〜なあ〜。さ、いくよ。

オブジェクトをどう使うか?

オブジェクトには、属性(プロパティ)と動作(メソッド)というのがある。

いきなり新しい単語を出して申し訳ないけど、つまりプロパティやメソッドを操作することによってスクリプトの結果を表示しようというわけ。

たとえば第2回で

document.write("これを表示");
(document=このウインドウ、write=書き込む)

というのを書いたけど、documentというオブジェクトに対して、"これを表示"をwriteしなさい、としたんだね。このwriteがメソッド。動作を指定した。

form.ans.value = 5;

さてこれは分かるかな?formがフォームオブジェクトだというのはたぶん察しがつくでしょう。

ansとは?これはそういう名前のフォームオブジェクトを指定しているだけ。僕が勝手に名前を付けた。なぜ名前が必要なのかは、フォームでアンケートなどに答えたことのある人なら分かると思うけど、いくつものテキストフィールドや、選択ボタンがセットになって一つのフォームとして機能する場合が多いので、フォームの場合はそれぞれに名前を付けていないと指示が出せないのだね。それでansという名前を付けた。

さてvalueは何か?そうこれがプロパティ。「中身」というプロパティなのですな。で、イコール5。これはイコールじゃないって言ったよね?そう代入。これで全部分かった。

つなげてみよう。

「フォームオブジェクト君や、ansってパーツがあるだろう?それのだな、中身をだな、5にしてくんね〜か」

というあなたの指示に従ってansフォーム君は「わかりやした親方!!」と5と表示と相成りましたとさ。

オブジェクトもいろんな種類があるので、ここには書ききれません。本を読んで納得してください。

そいじゃ復讐。じゃなかった復習。

●イベントを捕まえてスクリプトを起動する。(たとえばクリック)
●実行スクリプトはそこにじかに書いてもいいけど、関数へ渡すこともできる。
●スクリプトが実行される。(たとえば計算)
●計算結果はオブジェクトに指示を出して表示する。

以上ですべてのスクリプトが、終了する。

見えたでしょ?ここまでくりゃもう何でもできるのよ、ホントは。なかなかそうはいかないけどね〜。

次回「JavaScriptトホホの堂々めぐり」トホホ〜といくよん。

第9回「JavaScriptトホホの堂々めぐり」

この回が終われば、君はもうJavaScriptマスター!!とは言えないけど、基本のほぼすべてをマスターしたことになる。みんな読んでる?ちょっと寂しい気がするのは気のせい?

スクリプトやプログラムを書いていると、場合によって、たとえば数値が100以下と以上の時に、実行方法を変えたい場合が出てくる。関数などは使い回ししたいわけだから、特にそういう機会が多いはず。

そんなときは、条件分岐構文を使う。もしaだったらxを実行。bだったらyを実行、という具合。

IF文とFOR文がある。(ほかにもあるけど本を読んでね)これがつかえれば、怖い物なし。

●IF文

 if(条件){
〜条件に合致した場合の実行文〜
else
〜条件に合わなかった場合の実行文〜
}

(条件)をたとえば(a<100)としよう。このIF文の前の処理で、aという変数に何らかの数値が代入されているはず。そこでIF文が始まった。

aに50が代入されていたなら、〜条件に合致した場合の実行文〜がはじまりその処理が終わればIF文の外へ(}より下へ)出ていく。そして次の実行文が処理されていく。〜条件に合わなかった場合の実行文〜は無視。

aが100ならもしくは100以上なら〜条件に合致した場合の実行文〜が無視され、〜条件に合わなかった場合の実行文〜へと進む。

ここまでは分かるよね?

●FOR文

 for(カウント数の初期値 ; カウント数の条件 ; カウントのすすみ具合){
〜実行文〜
}

FOR文は繰り返しに使う。1に1を足す。それに1を足す。それに1を足す。以下50回繰り返し。回数文スクリプトを書いてもいいけど、面倒でしょ?ブラウザに表示する、HTML文書もでかくなる。よろしくない。

カウント数の初期値にはたいがいは1を入れるわな(a=1)。別に1じゃなくてもいいけんど。カウント数の条件にはたとえば50までとしておく(a<50)。カウントのすすみ具合は1ずつ足していけばよい(a++)。

これによって繰り返しができる。カウント数が49になって〜実行文〜が処理されて、FOR文の外へ出る。

これにてトホホの堂々めぐり終了。

なぜトホホの〜と書いたかって?この構文(特にFOR構文)の書き方をミスると、永遠に条件分岐が終わらないと言う泣ける状況に陥るからなのね。

どう?JavaScriptのサンプルがあるホームページなどを見てみるといい。これだけ分かれば、だいたいなにやってるか読めるはずだよ。

さて次は悩ましい問題に触れる。「JavaScriptトホホのブラウザ問題」。See you later.

第10回「JavaScriptトホホのブラウザ問題」

かなりJavaScriptが分かってきたあなたに、これからの課題。

ここまでの話は初歩の初歩なので、当然ながら「JavaScriptのすべてを語ろう」を読むだけでは何も作れない。市販の本ならば、「演算子(=はイコ−ルではないという話に関連する)」や「イベント」「オブジェクト」などについて、くどくどと何十ページにわたって書かれているはず。ここに書いたのはあくまでアウトラインの部分だ。

だからまず、その辺の事項を押さえよう。書きながら本をめくって調べるのもよい。

さてJS本をめくっていると、必ず「IE(インターネットエクスプローラ)」「NS(ネットスケープナビゲーター)」なる表示が付属しているはずだ。これは何を意味するのか。その辺だけ簡単に説明しておこう。

JavaScriptはそもそもネットスケープ社が自社のブラウザのために開発した。これが結構評判がいいのでそれをマイクロソフトがサポートした。しかしそこは天下のマイクロソフト。JSをベースに色々カスタマイズし、ブラウザに搭載した。だからマイクロソフトとしてはJavaScriptとは言わず、JScriptと呼んでいる。それってどう違うの?そう、ちょっと違うんです!どこがどうって言うのは、僕もよく知らないけど、自分で作ったJavaScriptを無料で配布しているホームページなどを覗くと、「IE版」「NS版」と別々に用意してあるのはよくある話。だから本にもそういう記述がある。

もちろん逃げ道はある。JSでブラウザの種類を調べることができるので、前回書いたIF文でそれぞれのブラウザにマッチした記述を、両方書いておく。そうすれば問題ない。だが面倒だ。いきおい両方使える記述法だけを使うようになる。ホントはもっと色々できるのに、機能を使いきらないと言うことになる。(ホント調べてみると色々できるんだよね)

ここから先を覚えたいなら、そういう問題がつきまとうのを覚悟しよう。

セミナーでは他にHTMLやJavaScriptなどを拡張・融合させたDHTMLとかもさらりと教わったけど、これこそIEとNSでは互換性が低く、おのおののブラウザだけをターゲットにしたホームページでない限り、使える代物ではないのが判明。詳しいことを覚えるだけ無駄。いまはホームページ作成ソフトで、DHTMLが使えちゃうから、マニュアル見ながらやればよし。

ってなところでしょうか?

セミナーでは、色々サンプルを作ったから、もう少しつっこんだ内容だったけど、キリが悪いので、ここまでにします。

長い時間おつきあいをいただきまして、ありがとうございました。

ちゃんと見てる?ホントに!やっぱ不安…


(C)2000 kim

トップページに戻る