LINUX.ORG.RU

Нахрена он нужен в Жабе? Препроцессор - это зло и отстой, который не отлавливается системой типизации. Другое дело - возможности метапрогрммирования.

#define true ((rand()&15)!=15)
#define if(x) if ((x) && (rand() < RAND_MAX * 0.99))
FilosofeM ★★
()

И такое в принципе невозможно по причине отсутствия препроцессора? Или так решили создатели транслятора?

Вы примерно угадали. Трансляторы Java бывают разные, но препроцессора в Java нет и не может быть, спецификация языка его не предусматривает. Этим Java спасён от порчи программ вами с помощью препроцессора. Но есть и другие способы испортить программу, так что даже возникло явление - жабабыдлокодеры.

Partisan ★★★★
()

мы тут ждё недождёмся чтобы из C++ препроцессор выпилили, а он, видите ли в жабу макросы хочет. неужто средств самого языка нехватает?

PexuOne
()

Вроде, так и есть. В java не завезли условную компиляцию (чего-то всем выше макросы мерещатся) ни как #ifdef, ни как if constexpr.

xaizek ★★★★★
()

Я посоветовался со своих хрустальным шаром и он сказал, что если ты хочешь засунуть в #ifdef код для отладки, то просто нужно использовать константу и заворачивать в обычный if(). Unreachable код компилятор удалит.

no-such-file ★★★★★
()
Ответ на: комментарий от PexuOne

мы тут ждё недождёмся чтобы из C++ препроцессор выпилили

За себя, пожалуйста. При грамотном использовании препроцессор становится очень удобным инструментом, отказываться от которого лично я нахожу крайне глупой затеей

XMs ★★★★★
()
Ответ на: комментарий от XMs

Это если один и для себя любимого пишешь. В остальных случаях препроцессор - зло.

yetanother ★★
()

Препроцессор запускается перед запуском компилятора, так же, как и в С. Никто тебе не мешает это делать в случае с Java или любым другим языком. Другой вопрос, что в Java обычно так не делают. Хотя в Java ME делали. Если опишешь, зачем тебе это понадобилось, можно придумать решения.

Legioner ★★★★★
()

В java для этого есть аннотации.

Smetchik
()
Ответ на: комментарий от crutch_master

Поддерживаю!!! Приходилось подобное разгребать в огромном количестве. И да, я нашел тех, кто писал код!

anonymous
()
Ответ на: комментарий от crutch_master

Очевидно, перевел на КОИ-8

// другой анон

anonymous
()

Пропусти программу через cpp или любой другой препроцессор, делов-то. Заодно утрёшь нос зазнавшимся жавистам, которые считают что если у них чего-то нет, то это божественная благодать ниспосланная свыше.

slovazap ★★★★★
()

никто не мешает тебе вставлять препроцессорную хрень ввиде комментариев и обрабатывать в системе сборки. Такой хренью баловались до изобретения аннотаций. на текущий момент оно не надо от слова совсем.

vtVitus ★★★★★
()

Я так понял, аналога #ifdef в Java нет?
И такое в принципе невозможно по причине отсутствия > препроцессора? Или так решили создатели транслятора?

Давно есть - через аннотации времени компиляции. Для этого пишешь собственный обработчик аннотаций.

iZEN ★★★★★
()
Ответ на: комментарий от bvn13
#define TRUE FALSE /* Happy debuging, motherfuckers! */

Use canonical comments, Luke!

Deleted
()
Последнее исправление: merhalak (всего исправлений: 2)

Но есть прекрасный unifdef(1). Если система сборки нормальная, то в любой язык добавляются ifdef-ы.

sergej ★★★★★
()

В джаве есть ООП и если тебе понадобился ифдеф, то ты рукожоп. Такие рукожопы ещё АПИ андроида проектировали, но это уже совсем другая история.

foror ★★★★★
()
Ответ на: комментарий от foror

Такие рукожопы ещё АПИ андроида проектировали, но это уже совсем другая история.

Тут я согласен. Для Андроид студии и потребовался #ifdef. Чтобы часть функционала из кода выкидывать (например, убрать AdMob из проекта одним #ifdef).

Но тут упомянули про аннотации - посмотрю, что за вещь.

Mirage1_
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.