slide04



slide04

0 0


slide04


On Github sfcjs2016s / slide04


				

情報基礎2#4

慶應義塾大学環境情報学部 清水智公 (chiko@tom.sfc.keio.ac.jp)

前回の復習

  • 関数の定義
  • 変数スコープ

c.f. 前回の資料

関数定義

function sigmoid(value, gain){
  gain = multiply(gain, -1);
  value = multiply(value, gain);
  var denominator = 1 + Math.exp(value);
  return divide(1, denominator);
}
  • プログラムの部分をまとめること
  • 多くの場合は、まとめた部分に対して名前をつける
  • プログラム作成の効率化、処理の抽象化、可読性の向上

function 文

function id(value){
  return value;
}
  • 関数定義には function 文を用いる
  • function 文は関数名、仮引数のリスト、関数本体からなっている
  • 上記は id という名前の関数を定義している

仮引数

function id(value){
 return value;
}
  • 関数定義時には、引数の値は未定
  • 計算に利用するため、引数をそれぞれ変数(仮引数)として表現
  • 関数定義時に()へ列挙することで、仮引数を宣言できる

実引数

function id(value){
 return value;
}

var a = id(100);     // 100
var b = id(3.14159); // 3.14159
  • 関数呼び出し時に、引数の値は決定される
  • 値が決定した引数を実引数と呼ぶ
  • 上記の例では 100 や 3.14159 が value に代入されて関数本体の処理が行われる

返り値

function id(value){
 return value;
}

var a = id(100);     // 100
var b = id(3.14159); // 3.14159
  • 返り値:関数の評価値
  • 何を評価値とするかは、プログラマが明示する
  • return 文を使うと、そのあとの式の評価値が関数の返り値となる

return 文

function id(value){
 return value;
  // ここから先の関数本体は実行されない
 value = value * value + 100;
  return value;
}

var a = id(100);     // 100
var b = id(3.14159); // 3.14159
  • 返り値を決定する文
  • return 文を実行すると、その関数内の処理を終了する
  • 複数の値を、関数の返り値にはできない

関数のイメージ

練習問題 1:関数定義

  • 引数に指定された長さを半径とする円の、円周を返す関数Rを定義せよ
  • Math.PI を参照すると、円周率が得られる
  • 関数定義は、js/circle.js に記述すること
  • 記述したらコミットすること

練習問題 2:関数定義

  • 引数に指定された長さを半径とする円の面積を計算する関数を定義せよ
  • 定義する関数の名前は自分で決定すること
  • 関数定義は、js/circle.js に記述すること
  • 記述したらコミットすること

練習問題 3:関数定義

  • 引数に指定された3つの数値を基に、円の面積を計算し、最も大きい面積を返す関数を定義せよ
  • 関数名は自分で決定すること
  • Math.max は、2つの引数のうち大きい方の値を返す関数である
  • 関数定義は、js/circle.js に記述すること
  • 記述したらコミットすること
var a = Math.max(0, 1); // 1 が代入される
var b = Math.max(-100, 100); // 100 が代入される
var c = Math.max(12345, 1); // 12345 が代入される

比較演算

演算子 意味 利用例 評価値 == 右辺と左辺が等しい 1 == 10 false != 右辺と左辺が等しくない 1 == 10 true > 左辺が右辺より大きい 1 > 10 false < 左辺が右辺より小さい 1 < 10 true >= 左辺が右辺以上である 1 >= 10 false <= 左辺が右辺以下である 1 <= 10 true
  • 右辺の評価値と左辺の評価値を比較する
  • 意味にそっていれば true、そうでなければ false が評価値となる

比較演算の例

var result = func1(1);
var isValidResult = result == 14;

console.log(isValidResult);
  • func1 の返り値が 14 の時、コンソールへ true と出力される
  • そうでない場合は、false と出力される

比較演算の例(つづき)

function isPositive(value){
  return value > 0;
}

var result = func(1);
console.log(isPositive(result));

練習問題 4

var a = Math.random();
a > 0.5;
a < 0.5;
a >= 0.2;
a <= 0.8;
a != 0.2;
a == 0.2;

上記をコンソールで実行せよ。

真偽値

  • 真 (true) か偽 (false) を表すデータの種類
  • とりうる値は true もしくは false のどちらか
  • 論理演算子を用いて、演算する

論理演算

演算子 意味 利用例 評価値 && 右辺と左辺の評価値がともに true(かつ) true && false false || 右辺と左辺の評価値のどちらかが true(または) true && false true ! 続く式の評価値を否定する !true false
  • 否定のみ単項演算であることに注意

評価値のパターン:&&

式 Aの評価値 Bの評価値 式の評価値 A&&B true true true A&&B false true false A&&B true false false A&&B false false false
  • 両辺の評価値が true のときのみ、評価値は true となる
  • それ以外の場合、評価値は false となる

評価値のパターン:||

式 Aの評価値 Bの評価値 式の評価値 A||B true true true A||B false true true A||B true false true A||B false false false
  • 両辺の評価値が false の場合、評価値は false となる
  • それ以外の場合、評価値は true となる

論理演算の例

var result = 10;
var testA = result < 50 &amp;&amp; result > 0;
var testB = a < -50;
var valid = testA || testB || value == 0;

var invalid = !valid;

console.log(invalid);

演算子の優先度

優先度 演算の種類 演算子 結合性 19 グルーピング () なし 17 関数呼び出し () 左から右へ 14 掛け算、割り算、剰余 * / % 左から右へ 13 足し算、引き算 + - 左から右へ 6 論理積 && 左から右へ 5 論理和 || 左から右へ 3 代入 = 右から左へ

練習問題 5

  • 引数と返り値が次のようになる関数 imply を定義せよ
  • 定義は js/logic.js へ記述せよ
  • 正しく動作することを確認後、コミットすること
引数1 引数2 返り値 true true true true false false false true true false false true

練習問題 6

  • 引数と返り値が次のようになる関数 nand を定義せよ
  • 定義は js/logic.js へ記述せよ
  • 正しく動作することを確認後、コミットすること
引数1 引数2 返り値 true true false true false true false true true false false true

練習問題 7

  • 引数と返り値が次のようになる関数 nor を定義せよ
  • 定義は js/logic.js へ記述せよ
  • 正しく動作することを確認後、コミットすること
引数1 引数2 返り値 true true false true false false false true false false false true

練習問題 8

  • 引数と返り値が次のようになる関数 exor を定義せよ
  • 定義は js/logic.js へ記述せよ
  • 正しく動作することを確認後、コミットすること
引数1 引数2 返り値 true true false true false true false true true false false false

練習問題 9

  • 引数に指定された年齢が、20 かどうかを判定する関数を定義せよ
  • 引数の数は 1 とする
  • 関数名は isMajority とし、js/age.js に定義を行え
  • 定義後はコミットせよ

練習問題 10

  • 引数に指定された年齢が、6歳以上、16歳未満であることを判定する関数を定義せよ
  • 引数の数は 1 とする
  • 関数名は inCompulsoryEducation とし、js/age.js に定義を行え
  • 定義後はコミットせよ

関数を設計するときは

  • 関数:入力値と出力値のペア
  • 満たすべき条件は入力と出力の対応できめられる
    • 入力に応じた、正しい出力
    • 入力に応じた、正しくない出力
  • 条件を決めておけば関数単体のテストがしやすくなる

制御構造

if 文

if(value % 2 == 0){
  func1();
}
  • () 内の式の評価値が true の場合、 {} 内を実行する
  • そうでない場合は、{} は実行されない
  • 上記の例では value が偶数の場合、func1 が呼ばれる

else 節

if(value % 2 == 0){
  func1();
}else{
  func2();
}
  • ()内の式の評価値が false の時、else に続く {} 内が実行される
  • 上記の例では value が奇数のとき func2 が呼ばれる

else-if

以下の二つは同じ振る舞いをする。

if(value % 2 == 0){
  func1();
}else{
  if(value % 3 == 0){
    func2();
  }else{
    func3();
  }
}
if(value % 2 == 0){
  func1();
}else if(value % 3 == 0){
  func2();
}else{
  func3();
}

練習問題 11

  • 5 の倍数の時には 1 を、そうでない時は 0 を返す関数を定義せよ
  • 関数名には適切なものを選ぶこと
  • 関数定義は js/condition.js に記述すること
  • テストが済んだら、コミットをすること

練習問題 12

  • 引数に指定された値を 2 で割った値を返す関数を定義せよ
  • ただし引数に奇数が指定された場合は、引数に 1 を足してから 2 で割ること
  • 関数名には適切なものを選ぶこと
  • 関数定義は js/condition.js に記述すること
  • テストが済んだら、コミットをすること
情報基礎2#4 慶應義塾大学環境情報学部 清水智公 (chiko@tom.sfc.keio.ac.jp)