>  > ラルグス 全長調整式車高調 スペック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;

// ここに グロンドマン(GRONDEMENT)シートカバー張替工房/PCX125(JF56)【シルバー/赤ステッチ】(張替工房)/GWH214HC540S40を書きます

// 指定されたファイルをメモ帳で開くクラス
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 + " 分です GET HOT ゲットホット タイヤウォーマー GP-EVOLUTION オプション:NEONなし オプション:温度計なし オプション:温度切り替えセレクター LOW設定80度。");
    }
}


// ポリモーフィズムのための関数
// 引数は 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


今回はスクリプトが長いから【グループエム】K&N REPLACEMENT FILTER (エアーフィルター純正交換タイプ) HONDA フリード 【 16.09- 】 GB5/6 ■ グレード: [排気量]1500 《 L15B 》 純正品番:17220-5R0-008にまとめといたよ。
りょーかい!

NotePad の実行結果>

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

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

ESCO エスコ その他の工具 9.0x300mm[HSS]ロングストレートドリル, V40 パーツ マッドフラップ ボルボ純正部品 MB4164T MB5204T オプション アクセサリー 用品 純正, HST/辻鐵工所 テールパイプ 品番:055-170TP スバル ルクラ L455F(2WD) 2010年04月~ JAN:4527711014899, ■NGK *1台分6本セット* イリシリーズ チューニングエンジン用高熱価プラグ IRIWAY8(熱価8番) * 日産 スカイライン 2500cc ER34 RB25DET(ターボ) 平成10年5月~13年6月, 最安挑戦 Project μ ブレーキライン ステンレス スモーク ウィッシュ ANE10G ZNE10G/14G リアディスクブレーキ BLT041BS 【MA ドマーニ カヤバ】ドマーニ MA4/5 New SR Special フロント 片側 右, VOLKSWAGEN フォルクスワーゲン LUPO ルポ 1.4L i 16V GREEN FILTER グリーンフィルター エアフィルター 純正交換タイプ, 195/55R16 CONTINENTAL コンチネンタル ContiVikingContact6 コンチバイキングコンタクト6 weds LEONIS WX ウエッズ レオニス WX スタッドレスタイヤホイール4本セット, イレブン クラッツィオ キルティングタイプ シートカバーハイエースバン GDH201/GDH206 5人乗り H29/12~S-GL.S-GL“DARK PRIME”, 【★送料無料】 【ファイナルコネクション】ファイナルコネクション ブレーキキャリパーキット STEALTH NEW TYPE CALIPER KIT F:6POT 286×18 SUZUKI ワゴンR MC21S/MH21S/MH22S/MH23S 【 型式:MH22S 4WD オプション:009 GREEN+クリアコーティング 】 16インチ サマータイヤ セット【フォレスター(SF系)】MANARAY ヴァーテックワン ロングビーク メタリックブラック/リムDC/アンダーカットポリッシュ 6.0Jx16ヨコハマ エコス ES31 215/60R16

ラルグス 全長調整式車高調 スペックS ラティオ N17 取付セット アライメント込 LARGUS Spec S 車高調整キット サスペンションキット ローダウン コイルオーバー【店頭受取対応商品】:swift ブレーキパッド type-SR 1台分セット スカイライン HR33 2000 93/8~98/6 DIXCEL SD-typeスリットディスクローター フロント用GVBインプレッサWRX STI ブレンボ用 07/11~

ラルグス 全長調整式車高調 スペックS ラティオ N17 取付セット アライメント込 LARGUS Spec S 車高調整キット サスペンションキット ローダウン コイルオーバー【店頭受取対応商品】.4FESW12008010 京セラ(株) 京セラ ソリッドエンドミル 4FESW120-080-10 JP店 【USA在庫あり】 ガルファー GALFER ウェーブ ブレーキ ローター リア 220mm 98年-13年 ZX1000、ZX900、EX650 201745 HD店

【】SYNAPSE NSR50 80互換インナーチューブ(チタンコーティング ゴールド) NSR50(95-) NSR80(95-) (SY0105) EVOLUTION INDUSTRIES エボリューションインダストリーズ その他エンジンパーツ 10Tピニオンギア対応102Tリング【10 TOOTH PINION GEAR FITS 102 TOOTH RING】

ちゃんとメモ帳が起動したね。
じゃ次いってみよっか。
じゃあ次は、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 分 ACRE ライトスポーツ スターレット EP91 アクレ フロント用。
うん、合ってるね。
ポリモーフィズムを使うと、こんな感じに3つの機能を全部組み込んだスクリプトがスッキリ書けるんだ。
じゃ、まずは polymorphism 関数から見てこっか。
は~い!
NotePad クラス と Calculator クラス と [215/60R16 95H] DUNLOP / ENASAVE EC204 [タイヤのみ1本][2/-]Time クラスにはそれぞれ input メソッドと showResult メソッドがあるよね。
input メソッドが入力を処理するメソッドで、showResult がその結果を表示するメソッドだよね?
そーそー。
で、input メソッドはデータが入力されると true、 キャンセルされると false を返すように統一されてるから…
データが入力されたら showResult メソッドが実行される、ってことだね。
ん、そういうこと。
ポリモーフィズムの対象になるクラスのメソッドは、名前と引数、あと戻り値の型と意味を合わせとくんだ。
そっか。引数も同じになるし、戻り値の扱いも同じだから、合わせとく必要があるんだね。
うん。
じゃあ、次はオブジェクトを作る部分のスクリプトね。
最初にそれぞれのクラスのオブジェクトを作って配列に入れてるね。
入力された番号によってどのオブジェクトを引数にするかが決まるから、 配列にしとけば、入力された番号を添え字として使えて便利だからね。
あ、なるほどね 。
で、後は inputString メソッドで入力を受け取って…
入力された値が 1, 2, 3 のどれかだったら、 配列の添え字にするために 1 引いてから、 配列に入ってるオブジェクトを polymorphism 関数に渡すんだね。
ん、そう。
こうすることで、オブジェクトごとにいちいち関数を作らなくてもよくなるってワケ。
う~ん、ポリモーフィズムも便利そうだけど、やっぱり上手く使いこなすのが難しそうだよね。
どういうときにポリモーフィズムを使ったらいいのかとかもよく解らないし…
確かにポリモーフィズムとか、あと前に説明したクロージャや incontextof 演算子とかも、使い方よりどこで使えばいいかってのを判断する方が難しいかもね ウォーターポンプ セリカ ST202C 用 T3-132 日立 HITACHI パロート PARAUT 車検部品 交換 トヨタ TOYOTA 16100-79186 相当 エンジン冷却水ポンプ 冷却水。
今回のスクリプトもポリモーフィズムを使わずに書くこともできるわけだしね。
だよねぇ…
まぁ、とりあえずはちゃんと思った通りに動くスクリプトが書けるようになることを目標にしたらいいんじゃないかな。
それが出来るようになってから、わかりやすくてすっきりしたスクリプトとか効率的なスクリプトを書くことに挑戦したらいいわけだし (クーポン配布中)Nプロジェクト CB400SF-HV-SP3(04-)用 ブラスター2(単色塗装)&STDスクリーン 【送料無料】(北海道・沖縄除く)。
うん、そだね。
じゃあ、第2章はこれで終わり。
次回から第3章に入るね。
第3章は何をやるの?
ウィンドウとかレイヤ関係かな。
あとサウンド再生とかについてもやるつもりだよ。
なんか KAG っぽくなってきたね。
うん。でもタグは使わずに全部 TJS で書いてくから。
あと、第3章で 日本製 パナソニック バッテリー カオス トヨタ ビスタアルデオ TA-ZZV50G 平成12年4月-平成13年8月 N-60B19L/C7§0.3 の目標を達成するからね。
ってことは、あの時計を完成させるってこと?
うん、そういうこと。
第3章も長くなると思うけど、KAG に色んな機能を追加したりするのに必要なことがたくさんあるから。
そうなんだ、それはちょっと楽しみかも [CUSCO] クスコ LSD タイプRS 1way(1&2way) リヤ マークII GX110 2000年10月~2004年11月 1G-FE 2.0 FR NA車 AT。
というワケで、次の章もしっかりついてきてね!
うん、わかった。

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

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