07 / Fundamentos

Strings

Los strings de Nyx son valores UTF-8 con un amplio conjunto de métodos incorporados. Este ejemplo muestra las operaciones más usadas: recorte de espacios, extracción de subcadenas, conversión de mayúsculas/minúsculas, búsqueda de subcadenas, división e interpolación.

07-strings.nxFuente →
// Strings: length, substring, split, contains, trim, toUpper, interpolación

// bool -> texto: int_to_string() espera un int y un bool no se convierte solo,
// así que la conversión se escribe explícita.
fn si_no(b: bool) -> String {
    if b { return "si" }
    return "no"
}

fn main() -> int {
    let texto: String = "  Hola Nyx  "

    // trim elimina espacios al inicio y al final
    let limpio: String = texto.trim()
    print("trim: '" + limpio + "'")

    // length
    print("longitud: " + int_to_string(limpio.length()))

    // substring(inicio, fin)  — fin es exclusivo
    let sub: String = limpio.substring(0, 4)
    print("substring(0,4): " + sub)

    // toUpper / toLower
    print("toUpper: " + limpio.toUpper())
    print("toLower: " + limpio.toLower())

    // contains
    print("contains 'Nyx': " + si_no(limpio.contains("Nyx")))
    print("contains 'Go': " + si_no(limpio.contains("Go")))

    // split
    let frase: String = "uno dos tres"
    let partes: Array = frase.split(" ")
    print("partes: " + int_to_string(partes.length()))
    for p in partes {
        print("  " + p)
    }

    // interpolación
    let lang: String = "Nyx"
    let v: int = 12
    print("Lenguaje: ${lang} v0.${v}")

    return 0
}
Salidastdout
trim: 'Hola Nyx'
longitud: 8
substring(0,4): Hola
toUpper: HOLA NYX
toLower: hola nyx
contains 'Nyx': si
contains 'Go': no
partes: 3
  uno
  dos
  tres
Lenguaje: Nyx v0.12

Cómo funciona

.trim() devuelve un nuevo string con los espacios en blanco al inicio y al final eliminados. El string original no se modifica — los strings de Nyx son valores inmutables; todos los métodos devuelven strings nuevos.

.substring(start, end) extrae una porción desde el índice start hasta, sin incluir, el índice end. Los índices son posiciones de byte. .length() devuelve la longitud en bytes del string, no la cantidad de puntos de código Unicode — para texto ASCII son lo mismo.

.contains(needle) devuelve un bool, y por eso la receta lo imprime con el helper si_no en vez de con int_to_string. .split(separator) divide el string en cada ocurrencia del separador y devuelve un Array con las partes resultantes.

La interpolación de strings con ${expr} funciona dentro de cualquier string entre comillas dobles. La expresión puede ser una variable, una llamada a función o cualquier otra expresión — el resultado se convierte automáticamente a su representación de string y se incrusta en línea.