JavaScript プログラミング講座 |
はじめに まず、複数の人様のプログラムソースを比べて眺めていると、同じことをしているはずなのにそれぞれのソースを見ればプログラム処理が全く違うと思ったりしませんか?最初のうちはみんなそのように思い浮かぶと思います。しかし、プログラムでやってることは実は同じなのです。 やってることは同じなのになぜ違うようにソースが見えるのかは3通り理由があります。 1つは選択する部品です。 目の前にいろんなガラクタを並べられてこれで「ある物」を作りなさいと言われると、人それぞれで、使うガラクタは違っても最後には同じ「ある物」が完成します。プログラムの命令も似たようなものがあれば、使う命令は違っても結局は同じことが実現できますし、同じ命令でも形を少し変えた使い方ができる場合があります。 2つ目はプログラムソースを誰が見てもわかりやすく表現する手段をとるか、プログラムの処理効率を重視する手段をとるかです。 前者はソースが見やすくプログラムの変更が容易で応用性がある反面、無駄な処理があって処理効率が悪く、ソースの行が長くなる欠点があります。 後者は無駄な処理を省いて処理効率が向上してソースの行が短くなる反面、ソースが見づらくプログラムの変更が難しい欠点があります。 3つ目はプログラムを作る人の性格です。プログラミングはその人の性格がそのまま浮き彫りになります。 大きく分ければ神経質(几帳面)な性格、いい加減(自己中)な性格のどちらかです。 神経質な人がプログラムを作れば、あーゆー時、こーゆー時といろいろな操作や処理パターンが脳裏に浮かんで、エラー対策を施してプログラムがでかくなります。いい加減な性格の人がプログラムをつくればプログラムは短いのですが応用が利かずにちょっと変わった操作や環境の変化で動かなくなるか、エラーで爆発したりしてコンピュータもご機嫌を損ねて自己中が感染してしまいます。 この3つのパターンが入り混じると、あたかも違うプログラムのように見えてしまいます。 myDate = new Date(); myHour = myDate.getHours(); myMessage = myMes[myHour]; document.write(myMessage); のようなプログラムも、慣れてくると document.write(myMes[(new Date()).getHours()]); のように1行にまとめることもできます。 (Step.2参照) 前者と後者は全く違うプログラムではなく、全く同じプログラムです。 本講座では手軽な部品を使い、ソースの見易さ重視で、几帳面な性格で各ステップを進めているはずでした。だんだん、いい加減に…(オイオイ プログラムを作る上で統一性というのは重要です。皆さんのプログラミングスタイルはどのようになりそうかは、ここでなんとなく分かったかと思います。 |
データの種類 「数値と文字列」 データとして「数値」と「文字列」という2種類があります。これは、なんとなく分かるでしょう。 変数とは 「変数」というからには、何か数字的な数式的な発想をすると思いますが、そんなに難しく考えなくてOKです。単刀直入に「変数」とは、上記の「データ」、つまり、「数値」や「文字列」を格納する「器(うつわ)」です。「格納する」という表現はあまり使いませんが、その他に「保存する」「セットする」「待避する」「代入する」という表現を使います。いずれも同じことです。説明するためのニュアンスや気分で変わります。(^^; 変数にデータをセットする では、変数にどうやってデータをセットするのでしょう? セミコロンの謎 JavaScript では、1つの命令(文法)単位で、セミコロンを付けます。 計算をしてみる(足し算、引き算) 計算はコンピュータのお得意芸。計算結果を変数にセットしてみましょう。50+20=70ですね。この70をいう答えを変数 myTotal に求めるには、お察しの通り、 myTotal = 50 + 20 ; です。myToTal の中身は70が入っています。まず、右辺の計算を行って、その結果を左辺に代入します。 myTotal = (50+20) * 2 ; 括弧も算数の考え方と同じです。計算の優先順位です。「*」は「× (掛け)」のことです。よって、myTotalは、140ですね。 myTotal = (50+20) / 2 ; 「/」は「÷(割る)」のことです。答えは、35ですね。(^^; もちろん、変数を使って計算もできます。 myApple = 100; myOrange = 50; myTotal = (myApple * 5) + (myOrange * 10) ; リンゴ1個100円が5個と、ミカン1個50円が10個で、myTotal は、1000円ですね。(^^; 計算というと、数値のみと想像しますが、文字列にも「+」のみ、使えます。 myMessage = "どうも" + "すみません"; 文字列「どうも」と「すみません」を足したら、答えはなんでしょう!? 答え ( myMessage )には、"どうもすみません" が入っています。文字列に使う「+」は「足す」ではなく「くっつける」ということです。ですから、文字列には、引いたり、掛けたり、割ったりできません。足し算だけ使えます。(^^; myName = "Tatsuya"; myMessage = "こんばんは、" + myName + "さん"; は、myMessage には、"こんばんは、Tatsuyaさん" がセットされます。 また、計算はコンピュータのお得意芸ですから、べき乗とか、余りを求めるのは当然、サイン、コサイン、タンジェント、四捨五入やら、いろいろできます。 もうちょっと、計算について、入り込んでみましょう。 アクセスカウンタのような、1ずつカウント(計算)していく場合は、 myCount = myCount + 1; となります。myCount に 5000 が入っていた場合は、まず、右辺で 5000+1 を計算してそれを左辺に代入するので、myCount は、5001 となります。 この「1プラスする」計算は、 myCount ++ ; という省略型計算式が使えます。インクリメントと呼ぶ書式です。この「1プラスする」というのはプログラムを組み始めると結構使うので、省略型ができたのでしょうか !? みなさんも「1プラスする」時が来たら、ぜひ使ってみましょう。タイプが楽ですよ。(^^; ちなみに、「1マイナスする」ときは、myCount -- ; です。デクリメントといいます。myCount = myCount - 1 ; と同じことです。 さらに、ちなみに、「2ずつプラスする」ときは、myCount += 2 ; という省略型があります。頭が壊れそうになったら、そんなものは忘れて、 myCount = myCount + 2 ; を使いましょう。 これでイイのです。 いろんなやり方がありすぎて、訳が分からなくなるんですよね。 でも、答えは いっしょ なのです。 (^^; |
判断命令「 if文 」 「 if 」という命令語をマスターしてみましょう「 if 」とは、直訳して分かるように、「もしも」です。 「もしも、こーだったら、あーしなさい」 という命令語です。 書式は if ( 条件式 ) { 条件が成立した場合の処理 } です。 例えば、「住所が大分県であれば、送料は500円です」 というプログラムだったら if ( myAddress == "大分県" ){ myCost = 500 ; } となります。 変数 myAddress に "大分県" という文字列がセットされていれば、myCost という変数に 500 をセットしました。 条件式の == は等しいかという比較演算子で、この場合、myAddress の内容は "大分県" か ? ( myAddress にセットされている文字列と "大分県" という文字列は等しいか? → myAddress は大分県か?) となり、条件が成立したので隣の { } 内の処理を実行します。 myAddress が "大分県" でなければ、条件不成立なので、{ } 内の処理はしません。また、{ } 内にはいくらでも命令が書けます。 条件式は他に以下の通りです。
大分県以外は送料1000円」 であれば、 if ( myAddress != "大分県" ) { myCost = 1000 ; } となります。 では、「大分県は送料500円で、その他は送料1000円」 という if 文はというと、 if ( myAddress == "大分県" ) { myCost = 500 ; } if ( myAddress != "大分県" ) { myCost = 1000 ; } と、2行 if 文を書けばOKなのですが、一般的には下のようにします。 if ( myAddress == "大分県" ) { myCost = 500 ; } else { myCost = 1000 ; } else は、直前の if 文の条件が不成立の場合に、else { } 内の処理をします。 この場合の else は、myAddress が "大分県" じゃなかったらという意味を持ちます。 では、「大分県は送料500円、沖縄は2500円、その他は1000円」 の if 文は、 myCost = 1000; if ( myAddress == "大分県") { myCost = 500 ; } if ( myAddress == "沖縄県") { myCost = 2500 ; } でOKですが、一般的には if ( myAddress == "大分県") { myCost = 500 ; } else if ( myAddress == "沖縄県" ) { myCost = 2500 ; } else { myCost = 1000 ; } となります。 説明すれば、「大分県なら500円、大分県じゃなくて沖縄県なら2500円、 大分県でも沖縄県でもなければ1000円」 という if 文パターンです。 「北海道は送料2000円」を追加するなら、 myCost = 1000 ; if ( myAddress == "大分県") { myCost = 500 ; } if ( myAddress == "沖縄県" ) { myCost = 2500 ; } if ( myAddress == "北海道" ) { myCost = 2000 ; } でいいのですが、(^^; if ( myAddress == "大分県") { myCost = 500 ; } else if ( myAddress == "沖縄県") { myCost = 2500 ; } else if ( myAddress == "北海道") { myCost = 2000 ; } else { myCost = 1000 ; } とします。 else のある if 文と無い if 文は、どう違うかというと、 else が無い if 文の場合は「それ以外」という判断ができないため、 あらかじめ、myCost に、「それ以外の送料」1000円をセットしておいてから、 "大分県" であれば、500円にセットしなおします。無駄ですよね〜、え?そうでもない!? もうひとつ、else の無い if 文は、上から順次すべて処理して行きます。 大分県で条件成立して処理したのに、続いて、沖縄県か?北海道か? とみていきます。else 付きの if 文であれば、上から順次処理しますが、条件一致すれば、 それ以降の else if は処理しません。よって、条件一致の可能性が高い順に記述していけば 処理も速い? ということです。え? 別に急がない!? (^^; つかれた、工事中!、こうご期待! |