「時間分けマスターになる為に」の編集履歴(バックアップ)一覧に戻る

時間分けマスターになる為に - (2011/06/05 (日) 19:15:32) の編集履歴(バックアップ)


時間分けとは?

botの動作を複雑化させる為に必要な時間分けですが、何から調べればよいのかわからない、という方も多いのではないでしょうか。
ここでは時間分けで使う内容を分解しそれぞれを理解することで、時間分けをマスターします。

時間分けを理解している方は以下の内容を正しく理解できるでしょう。
if(date("G") == 7 && date("i") == 30){
	$response = $eb->postRandom("0730.txt");
}
正解は「7時かつ30分の場合、0730.txtからランダムポストを行い、7時かつ30分の場合の処理を終える」です。
簡単に書けば「7時30分に0730.txtからランダムポスト」で済みますが、上記のように書いたのには理由があります。

bot.phpにおいては、関数や演算子などを条件文に入れ込むことで構成されていきます。
「関数」「演算子」「条件文」というと難しいイメージを持つかもしれませんが、パターンは多くありません。
まずは時間分けの基本形を知ることで、複雑な動作を分解してみましょう。

制御構造「if」

ここではifを使った条件分岐を説明しますが、初めに「プログラムは書かれた順に実行される」ということを覚えていてください。
これはこの項目に限らず全てのプログラムに通じるものです。
つまり条件をいくつも提示した場合、先に書かれた条件が優先されるのです。

ifの基本形

まずはif文の基本形を見てみましょう。
if(条件){処理;}
たったこれだけです。
if文は英語の「もし~ならば」という意味と同じで、この場合は「もし条件に当てはまるなら処理をする」というものです。

if(条件1){処理1;}
if(条件2){処理2;}
if(条件3){処理3;}
このように何行も並列していけばこの基本形だけで時間分けは可能ですが、スマートな書き方とは言い難いものです。

ifの拡張機能

それではif文の拡張機能「else if」「else」を使ってみましょう。
if(条件1){
	処理1;
}
else if(条件2){
	処理2;
}
else{
	処理3;
}
elseは英語の「その他」という意味と同じとなります。
else ifは「他にもし~ならば」elseは「その他の場合は」、となります。

ここで問題です、【条件1】にも【条件2】にも当てはまる場合、処理はどのようになるのでしょうか?
ここで「プログラムは書かれた順に実行される」を思い出しましょう。
書かれた順、つまり最初の【条件1】に対応する【処理1】が行われることはわかりますね?
では【条件2】にも当てはまっているので【処理2】も行われるのでしょうか……答えはNO。
「else」という英単語には「その他」という意味があることは先に説明しましたが、これには「既にあるものは除いて」という意味が含まれています。
つまり、【条件1】に当てはまるものは【処理1】が終わった時点で終了、【条件1】に当てはまらなかったものだけが【条件2】の判定へ進むことができるのです。
また【条件1】にも【条件2】にも当てはまらない、つまり「その他の場合」は【処理3】が実行されます。

if文の複雑化

if文は一つの条件で二つ以上の処理をすることもできます。
if(条件1){
	処理1a;
	処理1b;
}
else if(条件2){
	処理2a;
	処理2b;
}
else{
	処理a;
	処理b;
}

また、「if」「else if」「else」の処理にさらなるif文を入れ込むこともできます。
if(条件1){
	if(条件a){
		処理1a;
	}
	else if(条件b){
		処理1b;
	}
	else{
		処理1;
	}
}
else if(条件2){
	if(条件a){
		処理2a;
	}
	else{
		処理2;
	}
}
else{
	if(条件a){
		処理a-1;
		処理a-2;
		処理a-3;
	}
}
if文は上記のような2段階に限らず、3段階4段階と増やすことができます。

if文の要素一覧

if もし【条件】に当てはまるなら【処理】を実行、「}」以降に条件を持ちこさない 条件分岐させる場合、必ず最初に書くもの。
(ただし並列して実行する条件分岐は別)
else if 他にもし【条件】に当てはまるなら【処理】を実行、「}」以降に条件を持ちこさない 「if」または「else if」の後につけることができる。
なくても良い。
else その他の場合は【処理】を実行、「}」で同列冒頭にあるif文を終了する 「if」「else if」の条件のどれにも当てはまらない場合の処理。
なくても良い。
() 【条件】内容を丸括弧で囲む 「if」「else if」で使えるが、「else」では使えない。
条件は演算子を使うことで複雑化・詳細化できる。
{} 【処理】内容を波括弧で囲む 「if」「else if」「else」のいずれでも必要。
複数行可、複数の処理を書いても良い。
; 【処理】内容の最後に必要なセミコロン これを忘れるとエラーになる、消し過ぎに注意。


関数とは?

「関数」とは一定の処理を行いその結果や値を反映させるものです。
EasyBotterでは特にbot.phpで時間わけをする時に使う「date関数」がなじみ深く、また重要な関数となります。
ここではEasyBotterで使うdate関数について説明します。

date関数

bot.phpでの使用頻度が高い物、bot.phpの動作が工夫できるものを紹介しています。
詳細はPHPマニュアルをご覧ください。
単位 date("?") 特徴 利用法
Y 2011など 4桁の西暦
y 11など 下2桁の西暦
L 0~1 0=平年、1=うるう年 2月やdate("z")を使う時に有用
n 1~12 1桁の月には0をつけない bot.phpで使う機会が多い、覚えてしまおう
m 01~12 1桁の月に0をつける
t 28~31 その月が何日まであるか date("t")とdate("j")の値が同じ時は月末日、など
j 1~31 1桁の日には0をつけない bot.phpで使う機会が多い、覚えてしまおう
d 01~31 1桁の日に0をつける
z 0~365 その年の何日目か(1月1日が0) 34(立春)以降は春、124/125(5月5日/立夏)以降は夏~など工夫できる
G 0~23 24時制、1桁には0をつけない bot.phpで頻出、覚えてしまおう
H 00~24 24時制、1桁に0をつける
g 0~12 12時制、1桁には0をつけない
h 00~12 12時制、1桁に0をつける
A AM、PM 午前午後、大文字 12時制の時に有用
a am、pm 午前午後、小文字
i 00~59 1桁には0をつける bot.phpで頻出、覚えてしまおう
s 00~59 1桁には0をつける CRONとの誤差が生じやすい為あまり使う事は無い
曜日 w 0~6 0=日曜、1=月曜…6=土曜 数値なので1~5は平日、その他は週末、という分け方も
D Mon~Sun 英語の略表記 "w"の意味がわからない方に…スペルミスに注意

暇な時に、変数・演算子も説明入れますー。




コメント

名前:
コメント:
目安箱バナー