2013年3月14日木曜日

PHP講義メモ week2-3

かくかくしかじか、学生向けにPHPを教えている。シラバスはこんな具合

今回はシラバス§2.e.演算子から、制御構造、関数。
  • 演算子
    • 演算子は等価な関数を脳内で考えて見ると、単に引数が1つか2つかせいぜい3つあって戻り値がある単純な関数に置き換えて考える事もできます。
      • 数学と同様か近い表現で式を書けたり、わざわざ全てを関数の形で記述するよりも便利だから演算子が多くのプログラミング言語に実装されています。
    • 演算子の優先順位の読み方
      • 演算子の結合性
        • 演算子には左右どちら側のトークンを引数として結合すべきかの定義があります。例えば足し算の+など多くの演算子は左結合、論理否定の!は右結合など。
      • 演算子の優先順位(表で上のものが優先)
        • 演算子を含む式を評価する際に優先順位の高い演算子から評価し、例えば
        • とりあえず括弧を付けておけば間違いは無い、知識と可読性に応じて括弧は後から省略すれば良い
    • new, clone, instanceof
      • オブジェクトオリエンテッドプログラミングで改めて解説
    • 文字列結合演算子 .
      • +じゃない事に注意
      • もちろん複合代入演算子 .= もあるよ
    • 代数演算子 +
      • ふつうはふつうに足し算
      • 加えて 配列 + 配列 も可能
    • ===, !==
      • ゆるふわな動的型付け言語ゆえ必要な==と!=の型チェック有り版
      • 特に意図が無ければ==や!=よりも===や!===を使っておいた方が安全
    • ==, !=, ===, !== と配列の比較
      • ==と!=は要素集合として同じ内容ならtrue
      • ===と!==は順序も一致していなければfalse
    • <>
      • !=に同じ。VisualBasic互換の書き方も使える、というだけのこと。
      • VBよりCやJavaの経験が多いのなら使う必要は無いが、他人のコードでもし登場しても驚かない様に覚えては置くとよい
    • ビット演算 &, |, ^, ~, <<, >> の注意点
      • integer型が32bitなのか64bitなのかで挙動が変わるから注意
      • シフトは算術シフトのみ
    • リファレンス &
      • これは複雑な機能であり基礎的なプログラミングには不要で当面扱わないので現段階では解説しない。
    • エラー制御演算子 @
      • 通常は用いる必要は無いエラーを握り潰す邪悪な演算子
      • 特に古いオープンソースのサンプルを参考にする際に登場しても意味がわからない事が無い程度には覚えておいてあげてね
    • 実行演算子 `command-line`
      • シングルクォートじゃないよ、バッククォートだよ
      • プログラムの実行中にシェル(Windowsで言うとコマンドプロンプト的な)でコマンドを実行した結果文字列を取得できる
      • セキュリティリスクに注意
    • その他の…
  • 制御構造
    • if, else, while, do-while, for, break, continue, switch, return, goto
      • 基本的にCやJavaと同様
      • else if を elseif とも書ける
      • コードブロックを{}で囲わない記法も一応あるが使う必要は無い
        • 遭遇しても驚かない程度に頭の片隅のガレージの隅にでもしまっておいて構いません
    • include, require
      • Cプリプロセッサーの#includeと同様と思っておいて構わない
      • 基本的にはエラーがあれば停止するrequireを使っておけば良い
    • include_once, require_once
      • 言語機能としてインクルードガードが付いたincludeとrequire
      • 基本的にはrequireよりrequire_onceを使っておけば良い
    • foreach
      • Javaのenhanced-for文C++のrange-based-for文に相当する機能
      • 配列の要素を順繰りに取り出してループを回してくれる
        • 配列の要素=map型: $key => $value
          • キーは省略して$valueのみ取り出す構文にも対応している
      • 構文が他の言語の類似構文と配列の位置が逆転していたりするのでうっかりしない様に注意
        • 構文にasを使う事もうっかり忘れないように注意
    • declare
      • 特殊用途のやや複雑な機能で通常のプログラミングには不要です
      • 講座時間に余裕ができれば別ですが基本的には講義しません
  • 関数
    • ユーザー定義関数(いわゆる「ふつう」の関数)
      • 定義方法の見た目はCの関数やJavaのメソッドと基本的に似ているけれど…
        • functionってキーワードで始めるよ
        • 戻り値の型は書かないよ(動的型付け言語ですから!)
        • 仮引数にも型を書かないよ(動的型付け言語ですから!)
        • 関数内部では変数は関数スコープの局所変数になるよ
    • 可変変数
      • つまるところcallbackのこと
      • 変数に束縛する関数を変更できるから可変
    • ラムダ式(無名関数)
      • 名前を付けずに関数のオブジェクトを式として直接生成する方法だよ
      • callbackは事前に定義済みの名前をつけた普通の関数が必要だけどラムダ式なら変数に代入演算子で直接に式として記述できる
    • ビルトイン関数(組み込み関数)
      • CやJavaで言うところの標準ライブラリーに入っている様な機能群がPHPではCの#includeやJavaのimportなど無しでいつでも言語組み込みの関数として呼び出して使える状態になっている
おまけ
対象学生はCとJavaと基本情報処理技術者について学習している前提なのでCやJavaと同様のものはさらっとマニュアルを開きつつも「同様だねー、はい次」とかマニュアルのサンプルコードを軽く読む程度で済ませました(*´ω`*)

これでOOPを除く最小限のPHPプログラミングの為の言語基礎機能は講義しましたので、次回はFizzBuzz演習タイムですね!いろいろなコーディングルールでのFizzBuzzを課題として押し付けるので授業時間を使って実際にプログラミングして貰いますよー。

0 件のコメント:

コメントを投稿