>  > ラルグス 全長調整式車高調 スペックS ラティオ N17 取付セット アライメント込 LARGUS Spec S 車高調整キット サスペンションキット ローダウン コイルオーバー【店頭受取対応商品】

ラルグス 全長調整式車高調 スペックS ラティオ N17 取付セット アライメント込 LARGUS Spec S 車高調整キット サスペンションキット ローダウン コイルオーバー【店頭受取対応商品】

第2章、クラス編の最後はポリモーフィズムについて。
なんかクラス関係って聞いたことない用語が多いね…
ま、確かに聞き慣れない用語が多いよね。
ちなみにポリモーフィズムは「多態性」とか「多相性」とか言ったりもするよ。
それはそれで聞いたことない用語なんだけど…
具体的にはどういうものなの、ポリモーフィズムって?
例えば、A っていうクラスと B っていうクラスがあって、 それぞれこんなふうに定義されてるとするね。

<クラス A, B>
class A
{
    function A(){}  // コンストラクタ(何もしません)

    function finalize(){}  // デストラクタ(何もしません)

    // メッセージを表示するメソッド
    function message()
    {
        System.inform("A");
    }
}

class B
{
    function B(){}  // コンストラクタ(何もしません)

    function finalize(){}  // デストラクタ(何もしません)

    // メッセージを表示するメソッド
    function message()
    {
        System.inform("B");
    }
}

A とか B を表示する message メソッドがあるだけ…ずいぶんシンプルなクラスだね。
うん。
で、あと A, B クラスとは別に showMessage っていう関数があって、こう定義されてるとするね。

showMessage 関数>
function showMessage(object)
{
    object.message();  // object の message メソッドを呼び出します
}

これもシンプルだね。
えっと、これってクラス A か B のオブジェクトが引数になるの?
うん、そだよ。
で、クラス A, B と showMessage 関数を定義した後に、このスクリプトを実行するとどうなると思う?

var a = new A();
var b = new B();
showMessage(a);
showMessage(b);
invalidate a;
invalidate b;

// ここに GUTS CHROME ガッツ クローム WWC-63-044 TIMKEN レフトクランクケースベアリング 77-03年XL用 ガッツ クロームを書きます

// 指定されたファイルをメモ帳で開くクラス
class NotePad
{
    var selector;  // FileSelector クラスのオブジェクト

    function NotePad()
    {
        selector = new FileSelector();
    }

    function finalize()
    {
        invalidate selector;
    }

    // ファイル選択ダイアログボックスを表示します
    // ファイルが選択されれば真、キャンセルされれば偽を返します
    function input()
    {
        return selector.openFile();
    }

    // 選択されたファイルをメモ帳で開きます
    function showResult()
    {
        System.shellExecute("notepad", Storages.getLocalName(selector.name));
    }
}

// 電卓クラス(簡易版)
class Calculator
{
    var ans;  // 計算結果を保存しておくメンバ変数

    function Calculator()
    {
        ans = 0;
    }

    function finalize(){}

    // 数式の入力を求めます
    // OK ボタンが押されると数式の値を計算・保存して真を返します
    // キャンセルボタンが押されると何もせず偽を返します
    function input()
    {
        var expr = System.inputString("電卓", "数式を入力してください。", "");
        if(expr === void)
            return false;

        ans = expr!;

        return true;
    }

    // 計算結果を表示します
    function showResult()
    {
        System.inform(ans, "計算結果");
    }
}

// 時間を計算するクラス
class Time
{
    var minute;

    function Time()
    {
        minute = 0;
    }

    function finalize(){}

    // 時間(分)の入力を求めます
    // OK ボタンが押されると入力された値を保存して真を返します
    // キャンセルボタンが押されると何もせず偽を返します
    function input()
    {
        var value = System.inputString("何分後?", "数値を入力してください。", "");
        if(value === void)
            return false;

        minute = +value;

        return true;
    }

    // 今から minute 分後の時刻を表示します
    function showResult()
    {
        var d = new Date();
        var min = d.getMinutes() + minute;
        var hour = (d.getHours() + min \ 60) % 24;
        min %= 60;

        System.inform("今から " + minute + " 分後は " + hour + " 時 " + min + " 分です [CUSCO] クスコ LSD タイプRS 2way(1&2way) リヤ ソアラ JZZ30 1991年05月~1996年08月 1JZ-GTE 2.5T FR AT 標準デフ:トルセン。");
    }
}


// ポリモーフィズムのための関数
// 引数は NotePad クラス、Calculator クラス、Time クラスのオブジェクトのどれかになります
function polymorphism(object)
{
    if(object.input())        // 入力を求めます
        object.showResult();  // 入力された場合は処理結果を表示します
}


// それぞれのクラスのオブジェクトを作ります
var objects = new Array();
objects[0] = new NotePad();
objects[1] = new Calculator();
objects[2] = new Time();

while(

ラルグス 全長調整式車高調 スペックS ラティオ N17 取付セット アライメント込 LARGUS ライフ Spec S 車高調整キット サスペンションキット 旋削用G級ポジTACチップ ローダウン コイルオーバー【店頭受取対応商品】

true)
{
    var input = System.inputString("番号を入力してください。", "1: NotePad, 2: Calculator, 3: Time", "");
    if(input === void)
        break;  // キャンセルボタンが押されると終了します

    input = +input - 1;  // 配列の添え字に対応させるために 1 マイナスします
    if(input == 0 || input == 1 || input == 2)
        polymorphism(objects[input]);  // 対応するオブジェクトを引数にして polymorphism 関数を呼び出します
    else
        System.inform("1 から 3 の数字を入力してください。", "エラー");
}

invalidate objects[2];
invalidate objects[1];
invalidate objects[0];

えっとね… a を引数にして showMessage 関数を呼び出すと、 object が a に置き換わって a.message(); になるから…
A」って表示されるよね。
うんうん。
次の showMessage は b が引数になってて、 object が b に置き換わるから「B」って表示されるね。
そ。これがポリモーフィズム。
えっ、どういうこと?
showMessage 関数の中で呼び出してる message メソッドって、 引数にどっちのクラスのオブジェクトを指定するかで結果が変わるよね。
うん。object が A クラスのオブジェクトだったら「A」って表示されるけど、 B クラスのオブジェクトだったら「B」って表示されるよね。
つまり、引数に指定するオブジェクトに応じて色んな動作をする性質がポリモーフィズムってこと。
ちなみにポリモーフィズムってのは「色んな姿を見せる」って意味ね。
なるほど、そういうことね。
でも、これって何の役に立つの?
んー、例えばこういう場合にポリモーフィズムが使えるよ。

うわ、長いね~。
まぁね。
でも NotePad クラスも Calculator クラスも Time クラスも前に似たようなの作ったでしょ。
確かに、全部見たことある感じのスクリプトだね。
というワケで、NotePad クラスと Calculator クラスと Time クラスの説明は省略するね。
うん、OK だよ。
じゃ、まず説明の前に実行しとこっか。

Spec スペックS S 車高調整キット コイルオーバー【店頭受取対応商品】 アライメント込 サスペンションキット 取付セット ラルグス サスペンションキット ローダウン N17 ラティオ LARGUS 全長調整式車高調 LARGUS


今回はスクリプトが長いからエンドレス ブレーキパッド フロント MX72K EP415 ルクラ・ルクラカスタム L455F L465Fにまとめといたよ。
りょーかい!

NotePad の実行結果>

えっと、これって数字を入力すればいいの?
ん。1, 2, 3 のどれかを入力して OK ボタンを押してみて。
じゃあ、最初は 1 で、OK。
1 は NotePad になってるから、メモ帳を起動してファイルの中身を表示するんだよね?
うん。
「ファイルを開く」ダイアログボックスが表示されるから、ファイルを選択して「開く」を押せばいいんだよね。

ラルグス 全長調整式車高調 スペックS ラティオ N17 取付セット アライメント込 LARGUS Spec S 車高調整キット サスペンションキット ローダウン コイルオーバー【店頭受取対応商品】,[#tong##]

ご案内こちらの商品は取付工賃セットとなります。商品単品をご購入ご希望の場合は→コチラ取付セット内容・注意事項などメニュー取付+アライメント取付店舗KTSFACTORY店埼玉県川口市 TEL:048-285-8906KTS 平和島店東京都大田区 TEL:03-5767-5832KTS 一之江店東京都江戸川区 TEL:03-3674-2006足回り交換注意事項当店では原則エアサス車の足回り交換は行っておりません。そのため、販売商品はエアサス車でないことが前提となります。エアサス車の取付をご希望の際には、必ずご注文前にお問合せ下さい。アライメント調整注意事項現車により、ご希望の数値まで調整できない場合がございます。車の構造上などの理由により、角度を調整できない場合がございます。改善できない場合でもアライメント料はお返し出来かねます。スペックメーカー名Largus商品名Spec S自動車メーカーNISSAN車種ラティオ型式N17駆動方式2WDアッパーマウント(F R)マウントレス マウントレスバネレート(F R)7k 4.5k車高設定範囲(参考値)F R612mm~676mm 586mm~640mmダウン量(参考値)F R減衰力調整32段階調整備考1備考2注意事項取付セット内容Spec S+取付工賃+アライメント測定・調整

ちゃんとメモ帳が起動したね。
じゃ次いってみよっか。
じゃあ次は、2 を入力して、OK。
2 は Calculator だから電卓だね。
ん、そう。
これって、前と同じように式を入力すればいいの?
うん、何か数式を入力してみて。
じゃあ『(65-43)/2』って入力して、OK。

Calculator の実行結果>

えっと、(65-43)/2 は 22÷2 だから、11 で合ってるよね。
じゃあ、最後に 3 の Time だね。
うん。3 を入力して OK、と。

これも前と同じなんだよね?
うん。
じゃあ、100 って入力して、OK。

Time の実行結果>

{yahoojp} {tjs2.info}
えっと、今 20 時 15 分だから、100 分後は… 21 時 55 分 グラージオ マークXジオ ヒートブルーエンブレム EARTH W150 フロント用Tマーク ブラッククローム。
うん、合ってるね。
ポリモーフィズムを使うと、こんな感じに3つの機能を全部組み込んだスクリプトがスッキリ書けるんだ。
じゃ、まずは polymorphism 関数から見てこっか。
は~い!
NotePad クラス と Calculator クラス と BUILD A LINE/20531240S アルミ (フロント) スモーク YZF-R1 98-01【smtb-s】Time クラスにはそれぞれ input メソッドと showResult メソッドがあるよね。
input メソッドが入力を処理するメソッドで、showResult がその結果を表示するメソッドだよね?
そーそー。
で、input メソッドはデータが入力されると true、 キャンセルされると false を返すように統一されてるから…
データが入力されたら showResult メソッドが実行される、ってことだね。
ん、そういうこと。
ポリモーフィズムの対象になるクラスのメソッドは、名前と引数、あと戻り値の型と意味を合わせとくんだ。
そっか。引数も同じになるし、戻り値の扱いも同じだから、合わせとく必要があるんだね。
うん。
じゃあ、次はオブジェクトを作る部分のスクリプトね。
最初にそれぞれのクラスのオブジェクトを作って配列に入れてるね。
入力された番号によってどのオブジェクトを引数にするかが決まるから、 配列にしとけば、入力された番号を添え字として使えて便利だからね。
あ、なるほどね 。
で、後は inputString メソッドで入力を受け取って…
入力された値が 1, 2, 3 のどれかだったら、 配列の添え字にするために 1 引いてから、 配列に入ってるオブジェクトを polymorphism 関数に渡すんだね。
ん、そう。
こうすることで、オブジェクトごとにいちいち関数を作らなくてもよくなるってワケ。
う~ん、ポリモーフィズムも便利そうだけど、やっぱり上手く使いこなすのが難しそうだよね。
どういうときにポリモーフィズムを使ったらいいのかとかもよく解らないし…
確かにポリモーフィズムとか、あと前に説明したクロージャや incontextof 演算子とかも、使い方よりどこで使えばいいかってのを判断する方が難しいかもね グッドイヤー エフィシエントグリップ エコ EG01 195/60R15 88H◆【送料無料】Efficient Grip ECO 乗用車用サマータイヤ 低燃費タイヤ。
今回のスクリプトもポリモーフィズムを使わずに書くこともできるわけだしね。
だよねぇ…
まぁ、とりあえずはちゃんと思った通りに動くスクリプトが書けるようになることを目標にしたらいいんじゃないかな。
それが出来るようになってから、わかりやすくてすっきりしたスクリプトとか効率的なスクリプトを書くことに挑戦したらいいわけだし カロ/KARO フロアマット WOOLY 品番:454 カラー:グレー,ブルー ホンダ シビック EF,EG# FF フットレスト:有 3DR、AT用 1991年09月~1995年09月。
うん、そだね。
じゃあ、第2章はこれで終わり。
次回から第3章に入るね。
第3章は何をやるの?
ウィンドウとかレイヤ関係かな。
あとサウンド再生とかについてもやるつもりだよ。
なんか KAG っぽくなってきたね。
うん。でもタグは使わずに全部 TJS で書いてくから。
あと、第3章で 175/65R15 サマータイヤ タイヤホイールセット 【送料無料】KIRCHEIS S5 15x5.5 +50 100x4 WHITE + HF201 (175-65-15 175/65/15 175 65 15)夏タイヤ 15インチ 4本セット 新品§0.3 の目標を達成するからね。
ってことは、あの時計を完成させるってこと?
うん、そういうこと。
第3章も長くなると思うけど、KAG に色んな機能を追加したりするのに必要なことがたくさんあるから。
そうなんだ、それはちょっと楽しみかも A-TECH/FINALSPEED GR-Γ アルミホイール 1本 SX4 YA/YB系 【17×7.0J 5-114.3 INSET48 ガンメタリックシルバー】。
というワケで、次の章もしっかりついてきてね!
うん、わかった。

ラルグス 全長調整式車高調 スペックS ラティオ N17 取付セット アライメント込 LARGUS Spec S 車高調整キット サスペンションキット ローダウン コイルオーバー【店頭受取対応商品】

。がんばるね!
{yahoojp}jpprem01-zenjp40-wl-zd-32267