これだけたくさんのズンドコキヨシがあるのに、Apex ないじゃないか!! ってことで、お勉強がてら、ちょっと試してみました。久しぶりに、厳格な変数宣言の必要な言語触ったので、不思議な感覚です。
素直にループで作ってみた
Anonymous Window での実行を想定しているので、Salesforce の開発者コンソールから、Ctrl+E
でウィンドウ開いてコピペして、Execute
してください。結果は、ログを開いてDebug Only
にすると見られます。
String Z = 'ズン';
String D = 'ドコ';
String K = 'キ・ヨ・シ!';
Integer R, i = 0;
List<String> ZD = new List<String> {Z, D};
List<String> Complete = new List<String> {Z, Z, Z, Z, D};
do {
R = Math.abs(Math.mod(Crypto.getRandomInteger(),2));
System.debug(ZD[R]);
if (Complete[i] == ZD[R])
i++;
else
i = 0;
} while (i < 5);
System.debug(K);
結果はこんな感じになりますね。
Class つくって、再帰呼び出しさせてみた
お行儀の良い言語だと、洗練されたアルゴリズムをいくらひねっても、コードが短くなっていかないですな。素直な方が短い。
public class Zundoko {
String Z = 'ズン';
String D = 'ドコ';
String K = 'キ・ヨ・シ!';
Integer R;
List<String> ZD = new List<String> {Z, D};
List<String> Complete = new List<String> {Z, Z, Z, Z, D};
public void Kiyoshi(List<String> Nominees) {
if (Complete == Nominees){
System.debug(K);
return;
} else {
if (Nominees.size() > 4) {
Nominees.remove(0);
}
R = Math.abs(Math.mod(Crypto.getRandomInteger(),2));
Nominees.add(ZD[R]);
System.debug(ZD[R]);
this.Kiyoshi(Nominees);
}
}
}
Caller は、上と同じく、Anonymous Window から実行させています。初期値として、空欄入れたいだけなんだけど、リストの空欄をどうやって送ったらいいのか分かっていないので、今はこんな感じ。
Zundoko Z = new Zundoko();
List<String> Nominee = new List<String>();
Z.Kiyoshi(Nominee);
Apexってなんじゃい?
Apex は、開発者が Force.com プラットフォームサーバでフローとトランザクションの制御ステートメントを Force.com API へのコールと組み合わせて実行できるようにした、強く型付けされたオブジェクト指向のプログラミング言語です。Java に似た、データベースのストアドプロシージャのように動作する構文を使用する Apex により、開発者は、ボタンクリック、関連レコードの更新、および Visualforce ページなどのほとんどのシステムイベントにビジネスロジックを追加できます。Apex コードは、Web サービス要求、およびオブジェクトのトリガから開始できます。