Десятка худших фич C# (ссылка на статью)
Комментарии:
2022-05-22 alextretyak
Было бы неплохо иметь при определении, допустим, «>» и «==» получать уже определённую «>=»Если определён оператор «>», то операторы «<», «>=», «<=» и даже «==» можно получить из него:
fn `<`(T a, T b) {return b > a} fn `>=`(T a, T b) {return !(a < b)} fn `<=`(T a, T b) {return !(b < a)} fn `!=`(T a, T b) {return a < b or b < a} // равнозначно return a < b or a > b fn `==`(T a, T b) {return !(a != b)}
2022-05-23 Автор сайта
alextretyak
То, что Вы написали — это замечательно. Правда, я хотел сказать о другом. О том, что после описания «>» (если опираться на Ваш пример), неплохо бы иметь уже описанными остальные операторы: «<», «>=», «<=», «!=», «==» — без необходимости их описания. Например:
fn `>`(T a, T b) {. . .} // Описание «>» (в Вашей нотации) // После этого «<», «>=», «<=», «!=», «==» являются описанными if (a == b) // Применяем «==», которую не пришлось описыватьХотя этот код не будет максимально эффективным. Например, оператор «==» разворачивается в
!(a != b)который, в свою очередь разворачивается в
!(a < b or a > b)То, что Вы написали, просто замечательно для математиков. А системный программист увидет в этом изъяны :)