情報学基礎 / 第 10 回

プログラミング言語(1)

順次・分岐・繰返し、そして関数 ── JavaScript を動かしながら

この回のねらい

プログラミング言語とは

コンピュータと会話をする(命令をする)際に、人の言葉に近い表現で記述する言語です。 実行の流れを制御構造として表現します。

制御構造意味
順次(sequence)上から順に実行する
分岐(branch)条件によって実行する場所を変える
繰返し(iteration)同じ処理を繰り返す

この授業では JavaScript を使います。 本来はブラウザ「Chrome」のコンソールCtrlShiftJ、Mac は OptionJ)を開いて入力しますが、 このページには同じものを埋め込んであります。下のコンソールにそのまま書いて動かしてください。

JavaScript コンソール本物が動きます
>
上のボタンを押すと、教科書の例がコンソールに入ります。そのまま Enter を押してください。 数字を変えて、何度でも試せます。

式と文

> 5 + 2 * 3 ;
11
↑ プロンプト(prompt)のうしろに書く

5+2*3 を「式(expression)」という。×と÷は * と / で代用する

> 1 / 2 - 1 ;
-0.5
実数で表される

命令の単位を文(statement)といいます。1 / 2 - 1 ; は文です。

順次と変数

文と文は変数によって関係づけられます。変数とは、一時的に値を格納する場所です。

var x ;  var y ;  var kotae ;     ← 変数宣言
var x, y, kotae ;              ← まとめて書いてもよい

<変数> = <式> ;                ← 代入(assignment)

例:標準体重を求める

標準体重は「身長(メートル)の 2 乗 × 22」で求められます。

> var shincyo, meter, hyojun ;
  shincyo = 175 ;
  meter = shincyo / 100 ;
  hyojun = 22 * ( meter * meter ) ;
  console.log( hyojun ) ;
  67.375
標準体重を計算する動かせます

関数

同じプログラムを何度も書かなければならない場合、 プログラムに名前をつけて、その名前で使いまわすことができます。これが関数(function)です。

function <関数名> ( <引数> ) {  <プログラム>  }
> function std( shincho ) {
    var meter, hyojun ;
    meter = shincho / 100 ;
    hyojun = 22 * ( meter * meter ) ;
    console.log( hyojun ) ;
  }

> std( 175 ) ;
  67.375
> std( 160 ) ;
  56.32000000000001

std(175) のように書くことを関数呼出し(function call)といいます。

分岐

実行の流れを順次から変えたい場合は分岐を使います。

if ( <条件> ) <文1> else <文2>
条件に使う記号
より大きいより小さい以上以下等しい異なる
><>=<= ==!=

「等しい」は == です。 = ひとつは代入で、意味がまったく違います。初学者がいちばんよく間違えるところです。

std2 ── 太り気味か痩せ気味か動かせます

  

繰返し

同じ処理を繰り返さなければならないとき、繰返し(iteration)を使います。

while ( <繰返し条件> ) <文>
> var shincho = 150 ;
  while ( shincho < 180 ) {
    std( shincho ) ;
    shincho = shincho + 5 ;
  }

変数 shincho が「180 より小さい」間、{} で囲まれた部分(ブロック)を繰り返し実行します。 ブロックの最後に shincho = shincho + 5; があるので、繰り返すごとに 5 ずつ増えていきます。

繰返しを 1 周ずつ追う動かせます

  

もし最後の shincho = shincho + 5; を書き忘れたら? shincho はずっと 150 のままなので、条件 shincho < 180 が永遠に成り立ち、 プログラムは止まらなくなります(無限ループ)。 上のコンソールで試してみてもかまいません ── 一定回数を超えると自動で止めるようにしてあります。

← 第9回 オペレーティングシステム(2) 第11回 プログラミング言語(2) →