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
22
33
44 VIM REFERENCE MANUAL by Bram Moolenaar
@@ -52,7 +52,6 @@ An interface is used to specify properties of an object:
5252The class hierarchy allows for single inheritance. Otherwise interfaces are
5353to be used where needed.
5454
55-
5655Class modeling ~
5756
5857You 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: >
122121A class name cannot be used as an expression. A class name cannot be used in
123122the left-hand-side of an assignment.
124123
125-
126124Object variable write access ~
127125 *read-only-variable*
128126Now try to change an object variable directly: >
@@ -626,13 +624,15 @@ once. They can appear in any order, although this order is recommended: >
626624 extends ClassName
627625 implements InterfaceName, OtherInterface
628626 specifies SomeInterface
629- < *E1355* *E1369*
627+ <
628+ The "specifies" feature is currently not implemented.
629+
630+ *E1355* *E1369*
630631Each variable and method name can be used only once. It is not possible to
631632define a method with the same name and different type of arguments. It is not
632633possible to use a public and protected member variable with the same name. An
633634object variable name used in a super class cannot be reused in a child class.
634635
635-
636636Object Variable Initialization ~
637637
638638If 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
689689only appear once *E1350* . Multiple interfaces can be specified, separated by
690690commas. Each interface name can appear only once. *E1351*
691691
692-
693692A class defining an interface ~
694693 *specifies*
695694A class can declare its interface, the object variables and methods, with a
696695named interface. This avoids the need for separately specifying the
697696interface, which is often done in many languages, especially Java.
698-
697+ TODO: This is currently not implemented.
699698
700699Items in a class ~
701700 *E1318* *E1325* *E1388*
@@ -736,25 +735,25 @@ Some of the builtin functions like |empty()|, |len()| and |string()| can be
736735used with an object. An object can implement a method with the same name as
737736these builtin functions to return an object-specific value.
738737
739- *E1412*
738+ *E1412*
740739The following builtin methods are supported:
741- *object-empty()*
740+ *object-empty()*
742741 empty() Invoked by the | empty() | function to check whether an object is
743742 empty. If this method is missing, then true is returned. This
744743 method should not accept any arguments and must return a boolean.
745- *object-len()*
744+ *object-len()*
746745 len() Invoked by the | len() | function to return the length of an
747746 object. If this method is missing in the class, then an error is
748747 given and zero is returned. This method should not accept any
749748 arguments and must return a number.
750- *object-string()*
749+ *object-string()*
751750 string() Invoked by the | string() | function to get a textual
752751 representation of an object. Also used by the | :echo | command
753752 for an object. If this method is missing in the class, then a
754753 built-in default textual representation is used. This method
755754 should not accept any arguments and must return a string.
756755
757- *E1413*
756+ *E1413*
758757A class method cannot be used as a builtin method.
759758
760759Defining an interface ~
@@ -786,7 +785,6 @@ An interface can only be defined in a |Vim9| script file. *E1342*
786785An interface cannot "implement" another interface but it can "extend" another
787786interface. *E1381*
788787
789-
790788null object ~
791789
792790When 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
795793a variable name is correct and you will get a "Using a null object" error,
796794even when the variable name is invalid. *E1360* *E1362*
797795
798-
799796Default constructor ~
800797 *default-constructor*
801798In 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
11181115the right choice, and by calling it new() the relation between the caller and
11191116the method being called is obvious.
11201117
1121-
11221118No overloading of the constructor ~
11231119
11241120In 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
11391135is very easy to see which constructor is being used. And the type of
11401136arguments can be properly checked.
11411137
1142-
11431138No overloading of methods ~
11441139
11451140Same 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
11481143type checking will make sure it works as you intended. This rules out
11491144polymorphism, which we don't really need anyway.
11501145
1151-
11521146Single inheritance and interfaces ~
11531147
11541148Some 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
11641158class implements an interface just because the methods happen to match is
11651159brittle and leads to obscure problems, let's not do that.
11661160
1167-
11681161Using "this.variable" everywhere ~
11691162
11701163The 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
11831176it's also directly clear which variable references are object variables and
11841177which aren't.
11851178
1186-
11871179Using class variables ~
11881180
11891181Using "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
11971189up quite a bit of space, and when the class is renamed all these places need
11981190to be changed too.
11991191
1200-
12011192Declaring object and class variables ~
12021193
12031194The 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
12511242reuses the general function declaration syntax for methods. So, for the sake
12521243of consistency, we require "var" in these declarations.
12531244
1254-
12551245Using "ClassName.new()" to construct an object ~
12561246
12571247Many 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
13151305"public" changes the access in the other direction. Well, that's just to
13161306reduce the number of keywords.
13171307
1318-
13191308No private object variables ~
13201309
13211310Some languages provide several ways to control access to object variables.
0 commit comments