1
- *vim9class.txt* For Vim version 9.1. Last change: 2025 Feb 11
1
+ *vim9class.txt* For Vim version 9.1. Last change: 2025 Feb 16
2
2
3
3
4
4
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -52,7 +52,6 @@ An interface is used to specify properties of an object:
52
52
The class hierarchy allows for single inheritance. Otherwise interfaces are
53
53
to be used where needed.
54
54
55
-
56
55
Class modeling ~
57
56
58
57
You can model classes any way you like. Keep in mind what you are building,
@@ -122,7 +121,6 @@ using the object name followed by a dot following by the member: >
122
121
A class name cannot be used as an expression. A class name cannot be used in
123
122
the left-hand-side of an assignment.
124
123
125
-
126
124
Object variable write access ~
127
125
*read-only-variable*
128
126
Now try to change an object variable directly: >
@@ -626,13 +624,15 @@ once. They can appear in any order, although this order is recommended: >
626
624
extends ClassName
627
625
implements InterfaceName, OtherInterface
628
626
specifies SomeInterface
629
- < *E1355* *E1369*
627
+ <
628
+ The "specifies" feature is currently not implemented.
629
+
630
+ *E1355* *E1369*
630
631
Each variable and method name can be used only once. It is not possible to
631
632
define a method with the same name and different type of arguments. It is not
632
633
possible to use a public and protected member variable with the same name. An
633
634
object variable name used in a super class cannot be reused in a child class.
634
635
635
-
636
636
Object Variable Initialization ~
637
637
638
638
If the type of a variable is not explicitly specified in a class, then it is
@@ -689,13 +689,12 @@ A class can implement one or more interfaces. The "implements" keyword can
689
689
only appear once *E1350* . Multiple interfaces can be specified, separated by
690
690
commas. Each interface name can appear only once. *E1351*
691
691
692
-
693
692
A class defining an interface ~
694
693
*specifies*
695
694
A class can declare its interface, the object variables and methods, with a
696
695
named interface. This avoids the need for separately specifying the
697
696
interface, which is often done in many languages, especially Java.
698
-
697
+ TODO: This is currently not implemented.
699
698
700
699
Items in a class ~
701
700
*E1318* *E1325* *E1388*
@@ -736,25 +735,25 @@ Some of the builtin functions like |empty()|, |len()| and |string()| can be
736
735
used with an object. An object can implement a method with the same name as
737
736
these builtin functions to return an object-specific value.
738
737
739
- *E1412*
738
+ *E1412*
740
739
The following builtin methods are supported:
741
- *object-empty()*
740
+ *object-empty()*
742
741
empty() Invoked by the | empty() | function to check whether an object is
743
742
empty. If this method is missing, then true is returned. This
744
743
method should not accept any arguments and must return a boolean.
745
- *object-len()*
744
+ *object-len()*
746
745
len() Invoked by the | len() | function to return the length of an
747
746
object. If this method is missing in the class, then an error is
748
747
given and zero is returned. This method should not accept any
749
748
arguments and must return a number.
750
- *object-string()*
749
+ *object-string()*
751
750
string() Invoked by the | string() | function to get a textual
752
751
representation of an object. Also used by the | :echo | command
753
752
for an object. If this method is missing in the class, then a
754
753
built-in default textual representation is used. This method
755
754
should not accept any arguments and must return a string.
756
755
757
- *E1413*
756
+ *E1413*
758
757
A class method cannot be used as a builtin method.
759
758
760
759
Defining an interface ~
@@ -786,7 +785,6 @@ An interface can only be defined in a |Vim9| script file. *E1342*
786
785
An interface cannot "implement" another interface but it can "extend" another
787
786
interface. *E1381*
788
787
789
-
790
788
null object ~
791
789
792
790
When a variable is declared to have the type of an object, but it is not
@@ -795,7 +793,6 @@ does not know what class was supposed to be used. Vim then cannot check if
795
793
a variable name is correct and you will get a "Using a null object" error,
796
794
even when the variable name is invalid. *E1360* *E1362*
797
795
798
-
799
796
Default constructor ~
800
797
*default-constructor*
801
798
In case you define a class without a new() method, one will be automatically
@@ -1118,7 +1115,6 @@ For |Vim9| script using the same method name for all constructors seemed like
1118
1115
the right choice, and by calling it new() the relation between the caller and
1119
1116
the method being called is obvious.
1120
1117
1121
-
1122
1118
No overloading of the constructor ~
1123
1119
1124
1120
In Vim script, both legacy and | Vim9 | script, there is no overloading of
@@ -1139,7 +1135,6 @@ That way multiple constructors with different arguments are possible, while it
1139
1135
is very easy to see which constructor is being used. And the type of
1140
1136
arguments can be properly checked.
1141
1137
1142
-
1143
1138
No overloading of methods ~
1144
1139
1145
1140
Same reasoning as for the constructor: It is often not obvious what type
@@ -1148,7 +1143,6 @@ actually being called. Better just give the methods a different name, then
1148
1143
type checking will make sure it works as you intended. This rules out
1149
1144
polymorphism, which we don't really need anyway.
1150
1145
1151
-
1152
1146
Single inheritance and interfaces ~
1153
1147
1154
1148
Some languages support multiple inheritance. Although that can be useful in
@@ -1164,7 +1158,6 @@ it will be checked if that change was also changed. The mechanism to assume a
1164
1158
class implements an interface just because the methods happen to match is
1165
1159
brittle and leads to obscure problems, let's not do that.
1166
1160
1167
-
1168
1161
Using "this.variable" everywhere ~
1169
1162
1170
1163
The object variables in various programming languages can often be accessed in
@@ -1183,7 +1176,6 @@ variables. Simple and consistent. When looking at the code inside a class
1183
1176
it's also directly clear which variable references are object variables and
1184
1177
which aren't.
1185
1178
1186
-
1187
1179
Using class variables ~
1188
1180
1189
1181
Using "static variable" to declare a class variable is very common, nothing
@@ -1197,7 +1189,6 @@ the class. This has two problems: The class name can be rather long, taking
1197
1189
up quite a bit of space, and when the class is renamed all these places need
1198
1190
to be changed too.
1199
1191
1200
-
1201
1192
Declaring object and class variables ~
1202
1193
1203
1194
The main choice is whether to use "var" as with variable declarations.
@@ -1251,7 +1242,6 @@ function declaration syntax for class/object variables and methods. Vim9 also
1251
1242
reuses the general function declaration syntax for methods. So, for the sake
1252
1243
of consistency, we require "var" in these declarations.
1253
1244
1254
-
1255
1245
Using "ClassName.new()" to construct an object ~
1256
1246
1257
1247
Many languages use the "new" operator to create an object, which is actually
@@ -1315,7 +1305,6 @@ An alternative would have been using the "protected" keyword, just like
1315
1305
"public" changes the access in the other direction. Well, that's just to
1316
1306
reduce the number of keywords.
1317
1307
1318
-
1319
1308
No private object variables ~
1320
1309
1321
1310
Some languages provide several ways to control access to object variables.
0 commit comments