крутой компилятор, если эти две функции компилируются в одинаковый ассемблер:
fn largest1(list: &[i32]) -> Option<i32> {
if list.len() == 0 {
return None;
}
let mut largest = list[0];
for &item in list.iter() {
if item > largest {
largest = item;
}
}
Some(largest)
}
fn largest2(list: &[i32]) -> Option<i32> {
match list.len() {
0 => None,
_ => Some(list.iter().fold(
list[0],
|largest, &item| if item > largest { item } else { largest },
)),
}
}
кстати у первой функции можно заменить проверку на нулевой массив следующим кодом:
let mut largest = *list.get(0)?;
ну не круто ли?
Круто, ещё там null нет😎
Ты сам проверил результат компиляции?
С фортраном поиграй, если реально такие вещи впечетляют. С точки зрения математики и оптимизации это просто космос
Обсуждают сегодня