[Development] QOptional
Иван Комиссаров
abbapoh at gmail.com
Thu Aug 21 11:43:17 CEST 2014
Иван Комиссаров
21 авг. 2014 г., в 13:25, Simon Hausmann <simon.hausmann at digia.com> написал(а):
> On Thursday 21. August 2014 13.13.15 Иван Комиссаров wrote:
>
> To be honest: I find the "bool ok" variant much easier to read.
>
> "if (value)" on an auto variable can mean so many things. In the
> above example you could very easily think: Ah, toInt returns an int,
> so the type of "value" is probably int, so if (value) checks if it's non-zero.
>
> I don't think that makes for a very intuitive API. Yes, it's less to type, but
> less isn't always more :)
Writing toInt() method itself becomes more easier too:
QOptional<int> toInt()
{
....
if (error)
return QNothing();
return value;
}
Compare with
int toInt(bool *ok = 0)
{
....
if (ok)
*ok = !error;
if (error)
return 0;
return value;
}
Also, using Optional/Maybe types can lead to a more functional-style code - you can store error state in a member variable or return using bool as shown above (which leads to extra code if (error) { ok = false; return T(); }) or you can use maybe-type. I used this approach for parsing network messages - without optionals i had to use a reentrant class that stored an error state, with optionals i removed the entire class and replaced it with a pack of thread-safe functions (taking QByteArray and returning Optional<QVariantList> where QVariantList is parsed data (yes, empty list is valid))
More information about the Development
mailing list