Смотри, без парней!
Функции D и шаблонные функции могут быть вызваны как значения, методы (не помогут) и свойства.
Я не могу поверить, что никто еще не сказал это. Я перечислю те, которые сохраняют байты:
fun()
и fun!()()
сократить до fun
(при условии, что нет переменной fun
).
fun(par)
сокращается до par.fun
(при условии, par
что не имеет свойства / метода fun
, а также par
не является выражением типа 5+2
).
fun!(T)()
укорачивается до fun!T
fun!(T)(par)
сокращается до par.fun!T
(при условии, par
что не имеет свойства / метода fun
)
И с объектами:
new cls()
сокращается до new cls
(больше JavaScript кто-нибудь?)
obj.fun()
и obj.fun!()()
сократить доobj.fun
obj.fun!(T)()
укорачивается до obj.fun!T
И последнее: используйте старые версии . Это позволяет вам использовать устаревшие функции, которые сокращают ваш код. Тем не менее, лучший совет: D не подходит для код-гольфа. Это отличный язык, только не для код-гольфа.
D это JavaScript.
Очевидно нет. Но, когда речь идет о
float
,double
иreal
,nan
это значение, которое должно быть обработано, и, как указано в IEEE 754, NaN не сравнивается с самим собой.Смысл,
намного короче
Очевидно, всегда используйте
math.isNaN
для реального кода. ;)источник
D имеет вывод типа и
auto
ключевое слово. Если объекта нетint
, тоauto
, вероятно, короче.источник
auto
при построении ассоциативного массива сKeyType[ValueType]
синтаксисом?auto asd = ["a":1, "b": 2];
работает, но такKeyType[ValueType]
как вместоauto
ключевого слова было бы место , я не знаю, будет ли это всегда работать с типами, для которых не могут быть построены литералыauto arr = ["a": true, "b": 6];
работает, ключи и значения должны быть совместимых типовD отлично разбирается в методах, но:
такой же как
и обычно цепочка не короче, что я только что понял, что позволяет мне сократить свой ответ на « Управление корзиной». Так : D
источник
Как и C / C ++,
main
может бытьint
илиvoid
, ноvoid main(){}
всегда будет короче, чемint main(){return my_func_returning_int;}
.источник
int main(){return output}
будет короче?import std.stdio;void main(){write(7);}
это то, что нужно. Я сомневаюсь, что вопрос заставит программу вернуть число, потому что многие языки не могут установить коды возвратаD, как многопарадигмальный (объектно-функциональный) системный язык программирования, по-видимому, охватывает TIMTOWTDI, или существует более одного способа сделать это.
Например, написание программы argv:
Обратите внимание на C-стиль для цикла требует
{}
как пустой блок и не будет принимать точку с запятой или ничего , как пустое заявление, в данном случае . Обычноили
;
нет опс.источник
char*
вместо того,string
чтобы сохранить байт?function D main parameters must be main() or main(string[] args)
более того,char
это буквально один символ,char*
это указатель на буквально один символ иchar[]
массив буквенных символов (строки разные). D! = C || C ++D имеет несколько типов лямбда-выражений в стиле C #, которые могут быть назначены и автономны:
Однако, в отличие от C #, типы сигнатур по-прежнему необходимы, потому что D не имеет вывода типа уровня Haskell.
https://dlang.org/spec/expression.html#Lambda
источник
T f(T)(T a,T b){return a + b}
должен выводить T как int вf(5);
Вызов функции для объекта без других аргументов
почти всегда можно сократить до
побрить байт или больше.
Это потому, что
.
делает LHS неявным первым аргументом, а шаблоны позволяют нам выбрать правильную функцию для аргументов.источник
x.reverse(y, z)
он длиннее из-за точкиx.reverse(y,z)
иreverse(x,y,z)
имеют одинаковое количество байтов.x.reverse(y, z)
сx.reverse
?Если вопрос требует полной программы,
module
объявление на удивление ненужно.* кашель * Ява, кто-нибудь? * прочищает горло * На самом деле ,
module
система D старше, чем Java.источник