version | example_title |
---|---|
1.0.0 |
Strings |
In V können Strings mit dem Deklarationsoperator (:=
) deklariert und initialisiert werden und sind, wie andere Variablen in V auch, standardmäßig immutable
, d.h. unveränderlich.
Man kann zur Definition einer Variable vom Typ string
sowohl doppelte (""
), als auch einfache (''
) Anführungszeichen verwenden.
Bei der Verwendung von vfmt
werden doppelte Anführungszeichen in einzelne Anführungszeichen konvertiert, es sei denn der String enthält einzelne Anführungszeichen.
name := 'Bob'
println(name) // Bob
println(name.len) // 3
Um die Länge eines Strings zu ermitteln, kann man die .len
Methode verwenden.
Es ist ebenfalls möglich Variablen in einen String zu verpacken und diesen damit zu "erweitern" (engl. interpolation = Erweiterung). Um eine Variable in einen String zu interpolieren, verwendet man $
vor dem Variablennamen:
name:= 'Bob'
println('Hello $name!') // Hello Bob
Um komplexere Ausdrücke zu interpolieren kann man nach dem Dollarzeichen noch geschweifte Klammern hinzufügen (${}
), um so den Ausdruck darin zu interpolieren.
struct User {
name string
age int
}
bob := User {
name: 'Bob'
age: 17
}
println('Say Hello to a new User: ${bob.name}, ${bob.age}') // Say Hello to new User: Bob, 17
println('${bob.name}s age is higher or equal to 18: ${bob.age >= 18}') // 0 <=> number representation for false
Strings können mittels des +
Operators auch aneinander gehängt (konkateniert) werden.
Da Strings ebenfalls standardmäßig unveränderlich sind, kann man nur Strings konkatenieren, die mit dem mut
Schlüsselwort deklariert und initialisiert wurden.
mut text := 'Hello'
concatenated_text := text + ' World!'
println(text) // Hello
println(text + ' World!') // Hello World!
println(concatenated_text) // Hello World!
Das Anhängen von string
s kann man entweder mit Konkatenation oder dem +=
Operator erreichen.
mut hello := 'Hello '
hello += 'from V!' // appends 'from V!' to the string stored in hello.
println(hello) // Hello from V!
In V werden die Daten eines Strings in UTF-8 codiert, der String wird dann als schreibgeschützes Byte-Array repräsentiert.
robert := 'Robert'
bert := robert[2..robert.len-1] // bert
rob := robert[0..3] // Rob
println('The persons of interest are: $robert, $bert, $rob') // The persons of interest are: Robert, bert, Rob
Unter Verwendung some_string[start..end]
Syntax, muyss beachtet werden, dass end
nicht mehr enthalten ist.
Alle Operatoren in V können nur verwendet werden, wenn auf beiden Seiten des Operators Variablen des selben Typs stehen.
Der nachstehende Code kann nicht kompiliert werden, weil age
vom Typ int
ist.
age := 25
println('age = ' + age)
Daher muss die Variable zuerst mit Hilfe der .str()
Funktion in einen String konvertiert werden, oder man verwendet String-Interpolation (empfohlener Ansatz).
age := 25
println('age = ' + age.str()) // age = 25
println('age = $age') // age = 25
Es können weiterhin auch Character literals mit ``
definiert werden.
Zusätzlich gibt es die Möglichkeit sogenannte Raw-Strings mit einem vorangestellten r
zu definieren, diese werden nicht "escaped".
hello := 'Hello\nWorld'
println(hello) // Hello
// World
raw_hello := r'Hello\nWorld'
println(raw_hello) // Hello\nWorld