Re[8]: Опциональные типы
От: vdimas Россия  
Дата: 27.02.17 01:50
Оценка: :)))
Здравствуйте, VladD2, Вы писали:

VD>Пипец ты упертый.


Ну мы же идиому обсуждаем.


VD>Вот такой же код из исходного опшона:

VD>https://github.com/rsdn/nemerle/blob/master/lib/option.n#L106
VD>
VD>    public Value : T
VD>    {
VD>      get { 
VD>        match (this) {
VD>          | Some (x) => x
VD>          | None =>
VD>            throw System.ArgumentException ("option.Value")
VD>        }
VD>      }
VD>    }
VD>

VD>Как говорится, найдите 10 отличий.

Так тоже нельзя.
Вангую, что эта хрень нужна исключительно для интероперабельности с другими ООП-языками на дотнете.

Но в option хоть есть ср-ва правильного использования, бо это ж variant! ))

Даже взять извлечение дефолтного значения, вот это правильный код (option[T]):
    public WithDefault (val : T) : T
    {
      match (this) {
        | Some (v) => v
        | None => val
      }
    }


А вот за это руки поотрывать и отлучать от программирования на веки вечные (ValueOption[T]):
public GetValueOrDefault() : T { _value }

Это ты писал?
Ты что творишь-то?

Это же одна из бед дотнета как такового, что некое "дефолтное значение" некоей прикладной структуры может являться не валидным значением, т.е. источником ошибок.

Тебе же специально дали иммутабельный по-умолчанию Nemerle, чтобы ты эффективно боролся именно с подобного рода проблемами — не создавал неинициализированных значений. И тут ты такой — а нате вам протаскивание проблемы прямо в вашу иммутабельность.


V>>В том-то и беда для ООП-языков, что тип вариант нормально не выразить

VD>Очередной раз несешь околесицу. С точки зрения использования разницы нет.

Разница есть с т.з. безопасности.
Ты действительно НЕ понял вот этой фразы, относительно сценариев Optional для ООП-языков?

именно в случае Optional объявление предварительно "пустого" extractedValue убивает всю идею на корню


И ты действительно НЕ понял вот этого паттерна для ООП-языков:
Optional<MyType> optional = getValueFromSomewhere();
optional.tryExtract(extractedValue => { /* callback */ });


Ну это уже за гранью добра и зла...


VD>Сказал бы, что хочешь паттер-матчинг, так я тебе бы сразу ответил бы, что это не проблема.


Я, вроде бы, однозначно выразился в плане того, что я хочу.


VD>Во-первых в Немерле можно делать МП и не по объектам, а во вторых в Немерле есть возможность расширения МП. В частности вот эти вот строки:

VD>https://github.com/rsdn/nemerle/blob/master/lib/option.n#L215
VD>
VD>  [ExtensionPattern(VSome(value) = ValueOption where(HasValue=true, Value=value))]
VD>  [ExtensionPattern(VNone()      = ValueOption where(HasValue=false))]
VD>  public struct ValueOption[T]
VD>  {
VD>


ЧТД.
За один только ExtensionPattern весь Немерле можно списать в утиль.
Это уже не язык получается, а невесть что.


VD>Тоже самое без расширений:

VD>
VD>def Plus(x : ValueOption[int], y : ValueOption[int])
VD>{
VD>  | (ValueOption where(HasValue=true, Value=x), ValueOption where(HasValue=false))         => x
VD>  | (ValueOption where(HasValue=false),         ValueOption where(HasValue=true, Value=y)) => y
VD>  | (ValueOption where(HasValue=true, Value=x), ValueOption where(HasValue=true, Value=y)) => x + y
VD>}
VD>


Опять кошмар с т.з. ФП.

1. ПМ по ООП-объектам не гарантирует полноту (внутреннее-то устройство закрыто) — получаем профанацию.
2. Одну из комбинаций можно было и забыть.


VD>и аналог для встроенного (вариантного) опшона:

VD>
VD>def Plus(x : optin[int], y : optin[int])
VD>{
VD>  | (Some(x), None)    => x
VD>  | (None,    Some(y)) => y
VD>  | (Some(x), Some(y)) => x + y
VD>}
VD>


А то, что забыли про комбинацию (None, None) — компилятор не напомнит, что ле?
Или молча вернет то самое "дефолтное" значение для такой комбинации?


VD>Объяснение
Автор: VladD2
Дата: 22.11.11
проходящего.


Даже лень ходить по ссылке, а что там?

Пока что мне очевидно, что происходящее в твоём собственном коде надо объяснять ТЕБЕ.


V>>Но ведь именно в случае Optional объявление предварительно "пустого" extractedValue убивает всю идею на корню.

V>>Не видишь разве сам?
VD>Вижу, что ты в очередной раз трепишься вместо того, чтобы просто спросить у знающих людей.

Началось...
Я читал знающих людей, исследующих системы типов и безопасность кода. Это засчитывается за "спросить"? ))
В твоём коде безопасностью и не пахнет.


VD>Та же фигня у тебя с GLR и всем остальным.


Продолжается...
Конкретно ты пока со своим простейшим OptionValue еще не разобрался — что и как ты наделал.
Какой там в опу GLR...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.