Re[4]: Опциональные типы
От: WolfHound  
Дата: 20.02.17 22:22
Оценка: +4 :)
Здравствуйте, vdimas, Вы писали:

Тебе не надоело позориться? Опять же бред написал.

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

V>Просто есть специальное значение, приводимое (сравнимое) с произвольным типом — null.
Это аналог Optional<T>.
У Optional<Optional<T>> ДВА различных null'а. У Optional<Optional<Optional<T>>> три.

V>Для алг. типов данных — тоже. Правда, эти типы данных всегда обрабатываются как ссылочные, даже если не ссылочные. ))

Бред.

V>Если string — это ссылочный тип, то Option<string> не имеет смысла, можно пользоваться сразу string.

Не во всех языках есть null. Ибо null зло.

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

Опять чистейший бред.

WH>>то без этой фичи код не будет знать есть элемент или в таблице лежит None.

V>А в общем случае достаточно интерпретировать null как "нет значения".
Не достаточно.
class Hashtable<Tkey, TValue>
{
    public Option<TValue> Get(TKey key)
    {
    ...
    }
}

class CachedFactory<Tkey, TValue>
{
    private Hashtable<Tkey, TValue> _cache = new Hashtable<Tkey, TValue>();
    private Tkey -> TValue _factory;
    
    public CachedFactory(Tkey -> TValue factory)
    {
        _factory = factory;
    }
    
    public TValue Get(TKey key)
    {
        if (_cache.Get(key) is Some(value))
            return value;
        else
        {
            var value = _factory(key);
            _cache.Add(key, value);
            return value;
        }
    }
}

Если сюда засунуть тяжёлую функцию (а CachedFactory именно для таких функций и нужно) которая возвращает Option<что-что> то в твоём варианте алгоритм не сможет определить была вызвана функция или нет.
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.