Альтернатива скобкам:
GetLength <| Some a
Я думаю, что важно ответить на этот вопрос:
Зачем кому-то желающему набрать 18
токены более 3-х линий, когда вы можете получить
точно так же, используя 12 жетонов
на одной линии?
Написание кода - это не только лаконичность, но и удобочитаемость и ремонтопригодность. Предположим, вам нужно обработать случай, когда a
равен null
. С сопоставлением с образцом вы можете пойти из этого:
let GetLength (value : string option) =
match value with
| Some s -> s.Length
| _ -> 0
К этому:
let GetLength (value : string option) =
match value with
| Some s when s <> null -> s.Length
| _ -> 0
Для программиста на F # смысл понятен. Для исправления ваша реализация будет выглядеть примерно так:
let GetLength (value : option<string>) =
if value.IsSome && value.Value <> null then value.Value.Length else 0
Результат может быть таким же, но мне не очень легко сразу увидеть, что происходит.
Хорошо, если сопоставление с образцом не резонирует с вами, но дополнительные «затраты» в простом случае часто компенсируются много раз по мере развития логики.