fsharplang-ru / fsharplang-ru.github.io

Веб-материалы для fsharplang.ru
MIT License
12 stars 5 forks source link

Заменить код примера #12

Open stdray opened 7 years ago

stdray commented 7 years ago

Предлагаю заменить бесполезный хеллоуворлд на следующий код

type Shape =
    | Circle of radius : float
    | Elipse of radius1 : float * radius2 : float

let shapeArea shape = 
    match shape with
    | Circle(r)      -> System.Math.PI * r ** 2.
    | Elipse(r1, r2) -> System.Math.PI * r1 * r2

let elipse = Elipse(2., 1.)

printfn "%A" (shapeArea elipse)

В отличие от кальки хеллоуворлда C# в этом фрагменте демонстрируется пара основных возможностей F#:

Возможность интеропа со стандартной библиотекой .net продемонстрирована через System.Math.PI.

FoggyFinder commented 7 years ago

@stdray мне не нравится ваш код, по нескольким причинам

  1. Круг это всего лишь частный случай для эллипса, зачем выносить его отдельным вариантом
  2. Периметр эллипса вычисляется не так

но самая идея здравая :+1:

К слову, мне кажется подобные вопросы лучше обсуждать в гиттере - https://gitter.im/fsharplang_ru/Lobby

stdray commented 7 years ago

@FoggyFinder поздно. Я уже осознал свою ошибку и удалил коммент. Вернулся к площадям.

stdray commented 7 years ago

еще раз изменил код, чтобы никого не будоражить

type Shape =
    | Rectangle of height : float * width : float
    | Elipse of radius1 : float * radius2 : float

let area shape = 
    match shape with
    | Rectangle(h, w) -> h * w
    | Elipse(r1, r2)  -> System.Math.PI * r1 * r2

let elipse = Elipse(2., 1.)

printfn "%A" (area elipse)
Neftedollar commented 7 years ago

@FoggyFinder мы ув. @stdray из тедеграмм-чатика сюда отправили как раз для того чтоб в чате это не потерялось.

ForNeVeR commented 7 years ago

@FoggyFinder

Круг это всего лишь частный случай для эллипса

В ООП этот вопрос в высшей степени дискуссионный, про него даже есть статья на википедии. Я так понимаю, мотивацией для примера отчасти и было представление этой проблемы с точки зрения F#.

gsomix commented 7 years ago

В качестве альтернативы предлагаю модифицировать данный сниппет. Он покрывает большую часть синтаксиса и решает задачу, похожую на реальную. Заодно хипстеров привлечем. ;)