Добавить объявление

Сравнение опционалов в Rust и Swift

В Rust, как и в Swift, опционалы реализованы через перечисления! Их можно развернуть через оператор match в Rust:

fn find_user(name: &str) -> Option<&str> {
if name == "Artem" {
Some("Найден пользователь Artem")
} else {
None
}
}

let user = find_user("Artem");
match user {
Some(message) => println!("{}", message),
None => println!("Пользователь не найден")
}

И через оператор switch в Swift:

func findUser(name: String) -> String? {
if name == "Artem" {
"Найден пользователь Artem"
} else {
nil
}
}

let user = findUser(name: "Artem")
switch user {
case .some(let message): print(message)
case .none: print("Пользователь не найден")
}

Есть еще несколько вариантов развертывания опционалов. Например if let в Rust:

if let Some(n) = name {
println!("Привет, {}", n);
}

и в Swift:

if let name {
print("Привет, \(name)")
}

А так же развертывание с дефолтным значением в Rust:

let greeting = name.unwrap_or("Незнакомец".to_string());
println!("Привет, {}", greeting);

и в Swift:

let greeting = name ?? "Незнакомец"
print("Привет, \(greeting)")

В Swift еще есть конструкция guard let, которой нет в Rust:

func greetUser(name: String?) {
guard let name else {
print("Имя не указано")
return
}

print("Привет, \(name)")
}

Оба языка используют почти идентичную логику: Some/some для значения и None/nil при его отсутствии. Это очень удобно, не придется привыкать к совершенно новой концепции при переходе между языками.
19.10.2025 14 168