どうも潤奈です( ・Д・)
今回はパラメーターで指定した曜日にエントリーしないように制御する為のオリジナル関数を作成したいと思います。
オリジナル関数って?という方はこちらのEA講座を最後まで閲覧して頂くと理解出来ると思います。
必要なパラメーター
制御したい時間帯を設定画面から設定出来るようにパラメーターを設定します。
1 2 3 4 5 6 7 |
//---取引禁止曜日 true=禁止 false=可 input bool NoEntryMon=false; //月曜(取引禁止=true) input bool NoEntryTue=false; //火曜(取引禁止=true) input bool NoEntryWed=false; //水曜(取引禁止=true) input bool NoEntryThu=false; //木曜(取引禁止=true) input bool NoEntryFri=false; //金曜(取引禁止=true) input bool NoEntrySat=false; //土曜(取引禁止=true) |
6列ありますが曜日毎に設定出来るようにしているので仕組みは1種類ですね。
それぞれの曜日の変数としてNoEntryM~S変数をbool型で宣言をします。
今回は取引禁止にしたい時はtrueに設定しています。
オリジナル関数を作成
ではまずオリジナル関数の全文をご覧下さい。
1 2 3 4 5 6 7 8 9 10 11 |
//エントリー禁止曜日チェック bool WeekdayCheck(){ int Weekday=DayOfWeek(); //日0,月1,火2,水3,木4,金5,土6 if(NoEntryMon && Weekday==1)return(true); if(NoEntryTue && Weekday==2)return(true); if(NoEntryWed && Weekday==3)return(true); if(NoEntryThu && Weekday==4)return(true); if(NoEntryFri && Weekday==5)return(true); if(NoEntrySat && Weekday==6)return(true); return(false); } |
では順番に説明をして行きます。
まずは枠を作成します。
1 2 3 4 5 6 |
//エントリー禁止曜日チェック bool WeekdayCheck(){ //この中にプログラムを記入する } |
WeekdayCheck関数をbool型で宣言をします。
この関数に求めるものは、現在の曜日が設定した禁止曜日であるかどうかですので、bool型としてtrue(禁止曜日)かfalse(禁止曜日以外)を返してもらいます。
引数はありません。
1 |
int Weekday=DayOfWeek(); //日0,月1,火2,水3,木4,金5,土6 |
まず現在の曜日が何曜日かを取得するにはDayOfWeek()関数を利用します。
こちらのDayOfWeek()関数の戻り値は後ろにコメントでも書いてある通り、最後に受信したサーバー時間の曜日(0:日~6:土)を数値で返す関数です。
この関数で取得した番号をint型で宣言したWeekday変数に代入します。
1 2 3 4 5 6 |
if(NoEntryMon && Weekday==1)return(true); if(NoEntryTue && Weekday==2)return(true); if(NoEntryWed && Weekday==3)return(true); if(NoEntryThu && Weekday==4)return(true); if(NoEntryFri && Weekday==5)return(true); if(NoEntrySat && Weekday==6)return(true); |
次にif()関数でパラメーターで対象曜日が禁止(true)にしているか、現在の曜日が禁止曜日(1:月~6:土)かをチェックして行きます。
「&&」で2つの条件を繋いでいますので、どちらも条件を満たした場合はreturn(true);でtrueを返します。
つまり現在の曜日は禁止されています。となります。
条件を満たしていない場合はif()関数の次にある処理はスルーされますので、次の条件を確認しに行きます。
1 |
return(false); |
最後まで条件に合致しない場合は、return(false); で禁止されている曜日ではありませんとfalseを返します。
使用方法プログラム
まずは全文のプログラムです。
1 2 3 4 5 6 7 |
//エントリー曜日チェック bool Entry=false; Entry=WeekdayCheck(); if(!Entry){ //エントリーロジックを記載 } |
では説明です。
1 2 |
//エントリー曜日チェック bool Entry=false; |
まずEntry変数をbool型で宣言してfalseを代入しておきます。
1 |
Entry=WeekdayCheck(); |
WeekdayCheck()関数を使用して禁止曜日か確認してその結果をEntry変数に代入します。
今回の設定は結果がtrue=禁止曜日、false=禁止曜日でない事を表していますね。
1 2 3 |
if(!Entry){ //エントリーロジックを記載 } |
その結果をif()関数でチェックして、false=禁止曜日でない場合は、エントリーロジックに入るようにします。
if()関数の{}は真(true)の場合に処理に進むので、「!」を頭に付ける事で意味を逆にさせてEntry==falseという結果をtureに変えて、if()関数でチェックをして処理させる事でEntry==falseの時に{}内の処理に進めさせる事が出来ます。
まとめ
いかがでしたでしょうか。
これを応用して上手くプログラムの中に組み込んでみて下さい。
if()関数はとても使いやすくて分かりやすいですが、今回のように沢山並んでいるとシンプルではないですね。
ただ一番理解しやすい構造ではないかと思いますので、これはこれで良いとは思います。
次はまた違った書き方も試してみたいと思います。
では、少しでも参考になれば( ・Д・)
コメント