|
3 | 3 | helpname: 'vim9class'
|
4 | 4 | ---
|
5 | 5 | <div id='vimCodeElement'>
|
6 |
| -<a class="Constant" href="vim9class.html" name="vim9class.txt">vim9class.txt</a> For <span class="Identifier">Vim バージョン 9.1.</span> Last change: 2024 Dec 29<br> |
| 6 | +<a class="Constant" href="vim9class.html" name="vim9class.txt">vim9class.txt</a> For <span class="Identifier">Vim バージョン 9.1.</span> Last change: 2025 Feb 16<br> |
7 | 7 | <br>
|
8 | 8 | <br>
|
9 | 9 | <span class="Identifier">VIMリファレンスマニュアル by Bram Moolenaar</span><br>
|
|
58 | 58 | クラス階層は単一の継承になる。それ以外の場合は、必要に応じてインターフェイスを<br>
|
59 | 59 | 使用すること。<br>
|
60 | 60 | <br>
|
61 |
| -<br> |
62 | 61 | <span class="PreProc">クラスのモデリング</span><br>
|
63 | 62 | <br>
|
64 | 63 | 好きな方法でクラスをモデル化できる。何を構築しているのかを念頭に置き、現実世界<br>
|
|
128 | 127 | クラス名を式として使用することはできない。クラス名は、代入の左辺では使用できな<br>
|
129 | 128 | い。<br>
|
130 | 129 | <br>
|
131 |
| -<br> |
132 | 130 | <span class="PreProc">オブジェクト変数の書き込みアクセス</span><br>
|
133 | 131 | <a class="Constant" href="vim9class.html#read-only-variable" name="read-only-variable">read-only-variable</a><br>
|
134 | 132 | では、オブジェクト変数を直接変更してみよう:<br>
|
|
272 | 270 | new() メソッドを定義するときは、戻り値の型を指定しないこと。常にクラスのオブ<br>
|
273 | 271 | ジェクトを返す。<br>
|
274 | 272 | <br>
|
| 273 | +new() メソッドは、"_new()" を使用して protected メソッドにすることができる。こ<br> |
| 274 | +れは、シングルトン設計パターンをサポートするために使用できる。<br> |
| 275 | +<br> |
275 | 276 | <a class="Constant" href="vim9class.html#E1386" name="E1386">E1386</a><br>
|
276 | 277 | オブジェクトメソッドを呼び出すときは、メソッド名の前にオブジェクト変数名を付け<br>
|
277 | 278 | る必要がある。クラス名を使用してオブジェクトメソッドを呼び出すことはできない。<br>
|
|
625 | 626 | <div class="helpExample"> extends ClassName<br>
|
626 | 627 | implements InterfaceName, OtherInterface<br>
|
627 | 628 | specifies SomeInterface</div>
|
| 629 | +<br> |
| 630 | +"specifies" 機能は現在実装されていない。<br> |
| 631 | +<br> |
628 | 632 | <a class="Constant" href="vim9class.html#E1355" name="E1355">E1355</a> <a class="Constant" href="vim9class.html#E1369" name="E1369">E1369</a><br>
|
629 | 633 | 各変数とメソッドの名前は 1 回だけ使用できる。同じ名前で異なる型の引数を持つメ<br>
|
630 | 634 | ソッドを定義することはできない。パブリックと protected のメンバー変数を同じ名<br>
|
631 | 635 | 前で使用することはできない。スーパークラスで使用したオブジェクト変数名を子クラ<br>
|
632 | 636 | スで再利用することはできない。<br>
|
633 | 637 | <br>
|
634 |
| -<br> |
635 | 638 | <span class="PreProc">オブジェクト変数の初期化</span><br>
|
636 | 639 | <br>
|
637 | 640 | 変数の型がクラスで明示的に指定されていない場合、クラス定義時に "any" に設定さ<br>
|
|
686 | 689 | のみ使用できる <a class="Constant" href="vim9class.html#E1350" name="E1350">E1350</a> 。複数のインターフェイスをコンマで区切って指定できる。<br>
|
687 | 690 | 各インターフェイス名は 1 回だけ出現できる。 <a class="Constant" href="vim9class.html#E1351" name="E1351">E1351</a><br>
|
688 | 691 | <br>
|
689 |
| -<br> |
690 | 692 | <span class="PreProc">インターフェイスを定義するクラス</span><br>
|
691 | 693 | <a class="Constant" href="vim9class.html#specifies" name="specifies">specifies</a><br>
|
692 | 694 | クラスは、名前付きインターフェイスを使用して、そのインターフェイス、オブジェク<br>
|
693 | 695 | ト変数およびメソッドを宣言できる。これにより、多くの言語、特に Java で頻繁に行<br>
|
694 | 696 | われる、インターフェイスを個別に指定する必要がなくなった。<br>
|
695 |
| -<br> |
| 697 | +TODO: 現時点では実装されていない。<br> |
696 | 698 | <br>
|
697 | 699 | <span class="PreProc">クラス内の項目</span><br>
|
698 | 700 | <a class="Constant" href="vim9class.html#E1318" name="E1318">E1318</a> <a class="Constant" href="vim9class.html#E1325" name="E1325">E1325</a> <a class="Constant" href="vim9class.html#E1388" name="E1388">E1388</a><br>
|
|
733 | 735 | 使用できる。オブジェクトは、これらの組み込み関数と同じ名前のメソッドを実装し<br>
|
734 | 736 | て、オブジェクト固有の値を返すことができる。<br>
|
735 | 737 | <br>
|
736 |
| -<span class="Statement"> </span><a class="Constant" href="vim9class.html#E1412" name="E1412">E1412</a><br> |
| 738 | + <a class="Constant" href="vim9class.html#E1412" name="E1412">E1412</a><br> |
737 | 739 | 以下の組み込みメソッドがサポートされている:<br>
|
738 |
| -<span class="Statement"> </span><a class="Constant" href="vim9class.html#object-empty()" name="object-empty()">object-empty()</a><br> |
| 740 | + <a class="Constant" href="vim9class.html#object-empty()" name="object-empty()">object-empty()</a><br> |
739 | 741 | empty() <a class="Identifier" href="builtin.html#empty()">empty()</a> 関数によって呼び出され、オブジェクトが空かどうかを確認<br>
|
740 | 742 | する。このメソッドが存在しない場合は、true が返される。このメソッ<br>
|
741 | 743 | ドは引数を受け入れず、真偽値を返す必要がある。<br>
|
742 |
| -<span class="Statement"> </span><a class="Constant" href="vim9class.html#object-len()" name="object-len()">object-len()</a><br> |
| 744 | + <a class="Constant" href="vim9class.html#object-len()" name="object-len()">object-len()</a><br> |
743 | 745 | len() <a class="Identifier" href="builtin.html#len()">len()</a> 関数によって呼び出され、オブジェクトの長さを返す。このメ<br>
|
744 | 746 | ソッドがクラスにない場合はエラーが発生し、ゼロが返される。このメ<br>
|
745 | 747 | ソッドは引数を受け入れず、数値を返す必要がある。<br>
|
746 |
| -<span class="Statement"> </span><a class="Constant" href="vim9class.html#object-string()" name="object-string()">object-string()</a><br> |
| 748 | + <a class="Constant" href="vim9class.html#object-string()" name="object-string()">object-string()</a><br> |
747 | 749 | string() <a class="Identifier" href="builtin.html#string()">string()</a> 関数によって呼び出され、オブジェクトのテキスト表現を取<br>
|
748 | 750 | 得する。オブジェクトに対する <a class="Identifier" href="eval.html#:echo">:echo</a> コマンドでも使用される。この<br>
|
749 | 751 | メソッドがクラスにない場合は、組み込みのデフォルトのテキスト表現<br>
|
750 | 752 | が使用される。このメソッドは引数を受け入れず、文字列を返す必要が<br>
|
751 | 753 | ある。<br>
|
752 | 754 | <br>
|
753 |
| -<span class="Statement"> </span><a class="Constant" href="vim9class.html#E1413" name="E1413">E1413</a><br> |
| 755 | + <a class="Constant" href="vim9class.html#E1413" name="E1413">E1413</a><br> |
754 | 756 | クラスメソッドを組み込みメソッドとして使用することはできない。<br>
|
755 | 757 | <br>
|
756 | 758 | <span class="PreProc">インターフェイスの定義</span><br>
|
|
782 | 784 | インターフェイスは他のインターフェイスを "implement" することはできないが、他<br>
|
783 | 785 | のインターフェイスを "extend" することはできる。 <a class="Constant" href="vim9class.html#E1381" name="E1381">E1381</a><br>
|
784 | 786 | <br>
|
785 |
| -<br> |
786 | 787 | <span class="PreProc">null オブジェクト</span><br>
|
787 | 788 | <br>
|
788 | 789 | 変数がオブジェクトの型を持つように宣言されているが初期化されていない場合、値は<br>
|
|
791 | 792 | 正しいかどうかをチェックできず、変数名が無効な場合でも "Using a null object"<br>
|
792 | 793 | エラーが発生する。 <a class="Constant" href="vim9class.html#E1360" name="E1360">E1360</a> <a class="Constant" href="vim9class.html#E1362" name="E1362">E1362</a><br>
|
793 | 794 | <br>
|
794 |
| -<br> |
795 | 795 | <span class="PreProc">デフォルトコンストラクタ</span><br>
|
796 | 796 | <a class="Constant" href="vim9class.html#default-constructor" name="default-constructor">default-constructor</a><br>
|
797 | 797 | new() メソッドを使用せずにクラスを定義した場合は、自動的に new() メソッドが定<br>
|
|
1105 | 1105 | トは正しい選択であるように思えた。これを new() と呼び出すことで、呼び出し元と<br>
|
1106 | 1106 | 呼び出されるメソッドの関係が明確になる。<br>
|
1107 | 1107 | <br>
|
1108 |
| -<br> |
1109 | 1108 | <span class="PreProc">コンストラクタのオーバーロードを行わない</span><br>
|
1110 | 1109 | <br>
|
1111 | 1110 | Vim script では、旧来と <a class="Identifier" href="vim9.html#Vim9">Vim9</a> の両スクリプトとも、メソッドのオーバーロードは<br>
|
|
1124 | 1123 | のコンストラクタが使用されているかを確認するのが非常に簡単になる。引数の型も適<br>
|
1125 | 1124 | 切に確認できる。<br>
|
1126 | 1125 | <br>
|
1127 |
| -<br> |
1128 | 1126 | <span class="PreProc">メソッドのオーバーロードを行わない</span><br>
|
1129 | 1127 | <br>
|
1130 | 1128 | コンストラクタの場合と同じ理由である。多くの場合、引数の型が明らかではないた<br>
|
1131 | 1129 | め、実際にどのメソッドが呼び出されているかを把握することが困難になる。メソッド<br>
|
1132 | 1130 | に別の名前を付けるだけで、型チェックによって意図したとおりに動作することが確認<br>
|
1133 | 1131 | される。これにより、実際には必要のないポリモーフィズムが排除される。<br>
|
1134 | 1132 | <br>
|
1135 |
| -<br> |
1136 | 1133 | <span class="PreProc">単一の継承とインターフェイス</span><br>
|
1137 | 1134 | <br>
|
1138 | 1135 | 一部の言語は多重継承をサポートしている。これは場合によっては便利だが、クラスの<br>
|
|
1147 | 1144 | たま一致したからといって、クラスがインターフェイスを実装しているとみなすメカニ<br>
|
1148 | 1145 | ズムは脆弱で、分かりにくい問題を引き起こすため、やめておこう。<br>
|
1149 | 1146 | <br>
|
1150 |
| -<br> |
1151 | 1147 | <span class="PreProc">あらゆる場所で "this.variable" を使用する</span><br>
|
1152 | 1148 | <br>
|
1153 | 1149 | さまざまなプログラミング言語のオブジェクト変数には、多くの場合、場所に応じてさ<br>
|
|
1165 | 1161 | 使用される。シンプルで一貫性がある。クラス内部のコードを見る時にも、どの変数参<br>
|
1166 | 1162 | 照がオブジェクト変数で、どれがそうでないかが直接明らかになる。<br>
|
1167 | 1163 | <br>
|
1168 |
| -<br> |
1169 | 1164 | <span class="PreProc">クラス変数の使用</span><br>
|
1170 | 1165 | <br>
|
1171 | 1166 | "static variable" を使ってクラス変数を宣言するのはよくあることで、特に目新しい<br>
|
|
1178 | 1173 | 問題がある: クラス名はかなり長くなり、かなりのスペースが必要になることと、クラ<br>
|
1179 | 1174 | ス名が変更されたときに、これらの場所もすべて変更する必要があることだ。<br>
|
1180 | 1175 | <br>
|
1181 |
| -<br> |
1182 | 1176 | <span class="PreProc">オブジェクト変数とクラス変数の宣言</span><br>
|
1183 | 1177 | <br>
|
1184 | 1178 | 主な選択肢は、変数宣言のように "var" を使うかどうかである。TypeScript では使用<br>
|
|
1231 | 1225 | を再利用している。そのため、一貫性を保つために、これらの宣言では "var" を必要<br>
|
1232 | 1226 | とする。<br>
|
1233 | 1227 | <br>
|
1234 |
| -<br> |
1235 | 1228 | <span class="PreProc">"ClassName.new()" を使用してオブジェクトを構築する</span><br>
|
1236 | 1229 | <br>
|
1237 | 1230 | 多くの言語では、オブジェクトの作成に "new" 演算子を使用するが、コンストラクタ<br>
|
|
1296 | 1289 | "protected" キーワードを使用することもできる。まぁ、これはキーワードの数を減ら<br>
|
1297 | 1290 | すためなのだが。<br>
|
1298 | 1291 | <br>
|
1299 |
| -<br> |
1300 | 1292 | <span class="PreProc">オブジェクト変数に private はない</span><br>
|
1301 | 1293 | <br>
|
1302 | 1294 | 一部の言語では、オブジェクト変数へのアクセスを制御するいくつかの方法が提供され<br>
|
|
0 commit comments