Strings of Life

PHP/Phalcon/MySQL/JavaScript/RegExp/Ruby/Perl/ActionScript

2012年11月

ActionScriptには、5種類のループがある。while, do-while, for, for-in, for-each-inである。このうち、while, do-while, forは一般的なループであり、for-inとfor-each-inはダイナミックインスタンスにアクセスするために用いられるループである。


while文は次のように書く。

while (testExpression) {
    codeBlock
}

while文では、testExpressionの値がtrueである間、codeBlockに書かれた処理が繰り返し実行される。
例:

var total = 2;
var counter = 0;

while (counter < 2) {
    total = total * 2;
    counter = counter +1;
}

この例では、counterが2になるまで、すなわち2回コードブロックが実行され、結果としてtotalの値は8、counterの値は2になる。


なお、実際に階乗の計算を行いたい場合、ループではなく Math.pow()を利用すべき。
例:

Math.pow(2, 3); // 8(2の3乗)


以下、ループによって文字列に「@」が含まれているかを判定するサンプルプログラム。

var address = "me@mock.org";
var isValidAddress = false;
var i = 0;

while (i < address.length) {
    if (address.charAt(i) == "@") {
        isValidAddress = true;
        break;
    }
}

Stringクラスのlengthというインスタンス変数には、文字列の長さが入っている。
例:
"a".length // 1
"123".lenght // 3

StringクラスのcharAt()メソッドは、文字列から該当する順番の文字を取り出して返す。
例:
"abc".charAt(0) // "a"
"123".charAt(1) // "2"

ループは通常、テスト条件がfalseになった場合に終了するが、break文が実行されると、そこでループは終了する。

"me@mock.org"には、3番目に@が含まれているので、このコードを実行した際のisValudAddressの値はtrueになる。


今日の進捗:338→376/4343

・条件文

条件文(conditional)は、特定の条件に合致した場合にのみ実行される種類の文(statement)である。ActionScriptにおいて、条件文にはif文とswitch文の2種類がある。また、3項演算子(?:)もサポートされている。


・if文

if文は次のように書く。

if (testExpression) {
  codeBlock1
} else {
  codeBlock2
}

textExpressionには式を書く。式の値がtrueであればcodeBlock1に書いた処理、falseであればcodeBlock2に書いた処理が実行される。testExpressionの値がBoolean型でない場合、ActionScriptは自動的にtestExpressionをBooleanオブジェクトに変換し、その結果を条件判断に利用する。

条件に対応するブロックが1つだけで良い場合(codeBlock2が不要な場合)は、

if (testExpression) {
  codeBlock
}

テスト条件を2パターン以上用意したい場合は、

if (testExpression1) {
  codeBlock1
} else if (testExpression2) { // 「else」と「if」の間にはスペースが必要。「elseif」は構文エラー。
  codeBlock2
} else if (testExpression3) { // 以下、いくつでも条件を設定可能。
  ...
}

と書く。


・String型の比較においては大文字・小文字が区別される。


・ActionScriptでは、文字列(String)の連結には「+」演算子を用いる。
例:
var e = "Essential ";
var num = 19;
var title = e + "ActionScript  " + num ;  // "Essential ActionScript 19"

文字列(String)と数値(Number等)が+演算子で結ばれた場合、ActionScriptは+を連結演算子と解釈し、連結を行う。この性質は思わぬ結果を招くことがあるので注意が必要。
例:
var a = "12"; // 文字列の"12"
var b = 34; // 数値の34
var c = a + b; // cに入るのは46(数値)ではなく、"1234"(文字列)


今日の進捗:318→338/4343

・シグネチャ

オブジェクト指向プログラミングについての議論や文書において、メソッドの名前とパラメーターのリストはメソッドのシグネチャ(signature、署名)と呼ばれることがある。ActionScriptにおいて、メソッドのシグネチャはそれぞれのパラメーターの型とメソッドの戻り値も含む。


今日の進捗:308→316/4343


今日でChapter1:ActionScript from the Ground Upが終了。オブジェクト指向プログラミングの初歩から基本を積み上げていく解説で、ためになりました。明日からはChapter2:Conditionals and Loops。

今日、『パーフェクトPHP』を読んでいたところ、range()、array_map()そして無名関数と、fizzbuzzをやるのにぴったりな関数がバシバシ出てきました。ということで、書いてみました、fizzbuzzワンライナー。

<? array_map(function($n){echo$n%15==0?'fizzbuzz':($n%5==0?'buzz':($n%3==0?'fizz':$n));},range(1,100));
↑の行がそれです(折り返してるかもしれませんが、改行はありません)。スクリプト言語の実行結果をブラウザー上で確認できるllevalで、言語をphpにしたあと、上のスクリプトを貼り付けて「eval」すれば、fizzbuzzの結果が確認できます。手元にPHPの実行環境があるなら、そちらでもOK。

このスクリプト、出力は以下のスクリプトと同様です。
<?php
for ($i = 1; $i <= 100; $i++) {
    if ($i % 15 === 0) {
        echo 'fizzbuzz';
    } elseif ($i % 5 === 0) {
        echo 'buzz';
    } elseif ($i % 3 === 0) {
        echo 'fizz';
    } else {
        echo $i;
    }
}

これを、1行でやるにはどうするか。今回利用したのは、「配列の生成」「関数を呼ぶ関数」「無名関数」の組み合わせ。

range()は配列を生成する関数で、例えばrange(1,3)とすると、1から3までの数字を要素にもつ配列を返します。

array_map()は受け取った配列に対して指定された関数を実行する関数。

そして無名関数は、名前をつける必要がなく、その場で実行できるユーザー定義関数。

これらを組み合わせることで、1行でfizzbuzzを実現しています。


また、出来るだけ短くするため、3項演算子をネストして用いたり(可読性が落ちる)、開始タグを省略形にしたり(移植性が落ちる)、比較演算子に===ではなく==を用いていたり(予期せぬ型変換で事故る可能性がある)と、あまり褒められないコーディングスタイルだったりもします。仕事で書くぶんには、後ろのfizzbuzzの方が無難でしょう。

Head First PHP &amp; MySQL ―頭とからだで覚えるWebアプリケーション開発の基本
Head First PHP &amp; MySQL ―頭とからだで覚えるWebアプリケーション開発の基本


Head FirstシリーズのPHP&MySQL版。日本語版で、本文600ページ弱。原著の第11章「Drawing Dynamic Graphics: Visualizing Your Data... and More!」は収録されていない。

PHPは初心者でも学びやすい言語といわれることがあるが、実際には覚えるべきことは多い。データベース(PHPを使う場合、データベースはMySQLであることが多い)の知識はしっかり身につける必要があるし、HTTP通信の知識も必要。

ただし、これは他のサーバーサイド言語でも同様。PHPは、HTMLに埋め込んで使えるので、サーバーサイドのWebアプリケーション開発言語としては敷居が低い。そこが、多くのWebアプリケーションがPHPで開発される理由だろう。

本書にはオブジェクト指向は入ってないし、セキュリティ対策もまだ足りていない部分がある。また、実務ではLinuxサーバーにリモートでログインして操作することが多いので、Unixの知識も必要。。。といった具合に、不足している部分はあるのだが、「HTMLの知識はあるが、PHP及びプログラミングの知識はゼロ」な入門者に向けて書かれた本としては、かなり充実した内容になっている。本書を読み通せばサーバーサイド開発者の入り口には立てるはず。


本の構成は妥当だし、サンプルコードも「無理やり」感があまりない。また、原著のおかしな部分にツッコミを入れたり、登場人物の名前や文章を「超訳」したりと、翻訳者の頑張りとセンスが光っている。

唯一難点なのは、出版年の古さ。本書は2008年に出た本だが、MySQLはバージョン5.1以降で文字コードの設定方法が変わっている。現在の最新版はMySQL5.5なので、本書の設定方法では動かない。MySQL5.5に対応した文字コード設定に関しては、以前書いた記事があるので参考までに。

あと、日本語版のサンプルコード、私の環境(Mac OS X/Ubuntu)では文字化けやら改行コードやらで大変なことなっていた。英語版の方は問題なかった。


本書で初めてプログラミングを学ぶ、という人にはオススメしづらい。PHPの入門書を読んだけど、知識に不足を感じている人にはオススメ。

このページのトップヘ