ズンドコ with Apex

  • 2
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

これだけたくさんのズンドコキヨシがあるのに、Apex ないじゃないか!! ってことで、お勉強がてら、ちょっと試してみました。久しぶりに、厳格な変数宣言の必要な言語触ったので、不思議な感覚です。

素直にループで作ってみた

Anonymous Window での実行を想定しているので、Salesforce の開発者コンソールから、Ctrl+E でウィンドウ開いてコピペして、Executeしてください。結果は、ログを開いてDebug Only にすると見られます。

Apexコード

zundoko001.apex
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);

結果はこんな感じになりますね。

Screen Shot 2016-03-19 at 15.02.00.png

Class つくって、再帰呼び出しさせてみた

お行儀の良い言語だと、洗練されたアルゴリズムをいくらひねっても、コードが短くなっていかないですな。素直な方が短い。

Apexコード

zundoko002.apex
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 から実行させています。初期値として、空欄入れたいだけなんだけど、リストの空欄をどうやって送ったらいいのか分かっていないので、今はこんな感じ。

caller
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 サービス要求、およびオブジェクトのトリガから開始できます。

「Apex コードの概要」