Тем не менее, компилятор , по идее, автоматически должен свести вариант из первого фрейма к третьему.
если речь о переменных - сведет. если в деле участвуют возвращаемые функциями значения (скажем: if (do_smth(a) > 0) return true; else return false;) - то хрен он что упростит.
return do_smth(a) > 0;
Или для нуля даже
return do_smth(a);
return do_smth(a);
return do_smth(will(smth(smth(will))))?
clang и g++ упростили до callq do_smth; test %eax,%eax; setg %al. Джампа нет.
Убирает избыточные конструкции(оптимизация) и преобразует код в машинный.
Это и есть оптимизация
т.е. ты хочешь сказать что компилятор сначала меняет исходный код, преобразовывая одни конструкции в другие и только потом переводит это в машинный код?
Как написал чувак выше - при использовании первого варианта в будущем можно лапши напихать. Особенно полезно для тех, чье начальство требует показывать код, при этом нихуя не понимая что там написано (но чем больше - тем лучше, как принято считать)
такие ещё существуют?
Да
Часто
Много где
IT в том или ином виде есть в любой чебуречной или шаурмячной, что говорить о более-менее крупных фирмах. И иногда (особенно в заведениях, где IT составляющая не основная) там такие дятлы сидят, что хоть стой хоть падай
Часто
Много где
IT в том или ином виде есть в любой чебуречной или шаурмячной, что говорить о более-менее крупных фирмах. И иногда (особенно в заведениях, где IT составляющая не основная) там такие дятлы сидят, что хоть стой хоть падай
меня недавно завернули с изменением функции преобразующей текст с помощью Copy кусков текста на работу с этим текстом через указатель, мол другие не поймут, блин если ты не умеешь работать с указателем хули тебе вообще в код лесть
если ты не умеешь в русский язык, то зачем вообще писать?
ну извините
Кстати, всегда было загадкой для меня, почему частенько прогеры пишут обычный текст с ошибками, зато в коде всё четко, ни одной ; не пропустят.
Бывают автоматические анализаторы, которые проверяют код на соответствие каким-то правилам. Например, я видел, как такой анализатор тернарный операнд считает усложнением читабельности и требует развернуть его в if-else конструкцию (хотя третий вариант ок). У меня до сих пор бомбит, когда думаю об этом.
Херов в панамку за такое надо напихать. Если есть такая функция, то пихается все в месте ее вызова, а не внутри. А то потом кто-то будет очень удивлять, почему 50% времени исполняется функция IsOver5000, а туда напихали, оптимизаторы.
ну тут такое... смотря что с чем сравнивать, я наоборот с удовольствием показываю максимально сокращенный код или верстку html, объясняя клиентам, что мол код оптимизировал, минимализировал и типа он весь такой охуенный для обработки, типа дохуя всего работает,а текста понты, типа это очень пиздато и всё такое, пока никто не жаловался
Я - говнокодер.
Я работаю в маленькой конторе разработчиков, и мой единственный начальник (он же владелец конторы) - программист, и понимает что где написано значительно лучше чем я.
К счастью, контора такая маленькая, и так загружена работой, что пока мой говнокод работает, и делает хотя бы примерно то, что заявлено, никто и не подумает его проверять. А если не работает, все равно не подумают, просто отправят меня лепить на это пластырь пока не запашет.
Правда, поправьте если я не прав, в примере выше, с точки зрения компилятора написана разве не одна и та же хуйня? По крайней мере в первых двух случаях
Я работаю в маленькой конторе разработчиков, и мой единственный начальник (он же владелец конторы) - программист, и понимает что где написано значительно лучше чем я.
К счастью, контора такая маленькая, и так загружена работой, что пока мой говнокод работает, и делает хотя бы примерно то, что заявлено, никто и не подумает его проверять. А если не работает, все равно не подумают, просто отправят меня лепить на это пластырь пока не запашет.
Правда, поправьте если я не прав, в примере выше, с точки зрения компилятора написана разве не одна и та же хуйня? По крайней мере в первых двух случаях
Херня код. Если это тупо проверка больше/меньше, то нах она в функцию вынесена, а если там охрененный расчёт веса, то почему расчитанное значение не возвращает - может в будущем понадобиться. Короче не продумана стратегия алгоритма.
Как человек закончивший минимум 3 курса ФКТ говноунивера на Амуре смело заявляю, на первом курсе в лучшем случае расскажут, что есть возможность написать как в первом, на языках программирования, о которых вы услышите на третьем курсе.
Продвинутый у вас универ однако - в моем на первом сказали, что программирование есть, а на третьем геолог по кривой методичке собственного написания учила делфи.
Тем самым сразу проиллюстрировав рекурсию.
в принципе учить с первого варианта нормально, так человеку проще понимать логику кода, что от чего происходит и как работает, а уже потом хай учатся упрощать
Современные джуниоры с запросами в 50к+ рублей дальше первого способа редко заходят. А если и в курсе третьего варианта - то будут яро утверждать что это нечитабельно и что никто не поймет эту строку в будущем.
Такого джуниора обычно держат месяц, и, если не научится на автомате делать третий вариант со строкой комментария, отправляют куда подальше
Эм, со строкой комментария?
типа, вот так?
return wage > 5000; // вернуть да, если больше 5000
типа, вот так?
return wage > 5000; // вернуть да, если больше 5000
Если такое требуют на работе, то он уебывает с этой конторы через 2 недели.
Коммент тут должен объяснить, что это за магические 5000, почему и как они появились. То, что сам код делает и так всем видно. Не умеешь ты коменты писать. Уволен.
Не умею, потому что не нужно: такой ситуации никогда не возникло бы. 5000, вероятнее всего, тянулась бы из конфига, и wage сравнивался бы не с непонятной хуйнёй, а с переменной с понятным названием.
Ну или на худой конец с константой с понятным названием.
1. Проработал месяц, получил 50к+
2. Уволили, отдыхай пару недель.
3. Ищи новое место работы
4. ...
5. PROFIT // отпуск каждый месяц
2. Уволили, отдыхай пару недель.
3. Ищи новое место работы
4. ...
5. PROFIT // отпуск каждый месяц
Да да50к. Столько по идее Должен зарабатывать средний специалист с высшим образованием. Это в ЕБАНОЙ россии, 10к зп НОРМА и ИДИ НАХУЙ. И проблема не в ЛЮДЯХ, Проблема в системе обучения. Говорю как человек закончивший бакалавриат и магистратуру в айти направлении. НАм в лучшем Случае давали ХОРОШУЮ методичку, в ХУДШЕМ плохую. Вот занимайтесь, если есть вопросы подходите. И только потом выйдя из вуза понял что нихуя не знаю, что чтобы освоить"настоящему ОСВОИТЬ" хоть какой то язык программирования, нужно про решать тонну задачей и примеров. И Мне еще повезло, что меня взяли потом с "базовыми" знаниями на стажировку, в течении которой я обрел реальные знания. А ВЕДЬ большинство - ИДУТ нахуй и вот удел нынешних джуниоров желающих творить код.
В универе тоже ничего не давали, учил программирование еще со школы. В универе узнал меньше, чем в школе, но после спокойной устроился на проггера с зп в 50к
Я во время обучения шутил, что мол никто не знает каких плохих программистов выпускает мой колледж, потом что никто никогда не работает по специальности. а так вообще зависит от места. У меня пусть и колледж, но программа была более чем адекватная, теории как везде - дрочерство на разные разделы диксретки, азы архитектуры ЭВМ (бесит это сокращение) и дальше по стекам .NET + LAMP, около разработческие штучки по типу как работать с гитом в разных проектах, какие бывают методологии разработки, как решаются типовые задачки, обзоры фреймворков и либ (даже не могу сказать что дико устаревших, так вменяемо), был кружек юных рубистов (он то меня и зацепил). Однако уровень преподавателей это конечно же мрак, 2 человека и то непостоянных из реального сектора, остальные либо какие-то долгожители советские либо вчерашние учителя английского. В любом случае айти это не та сфера где больше решают связи, тут всё-таки нужна голова, образование дает основу, дальше будет пожизненный процесс интенсивного обучения, рассчитывать можно только на себя, начинать работать как можно раньше. Ну и конечно айти понятие слишком растяжимое, в разработке куча разных направлений и разных философий, что можно в стартапе - нельзя в тырпрайзе, а кому что ближе нигде не рассказывают.
Как человек, закончивший бакалавриат и магистратуру в айти направлении в хорошем (пусть и "староватом") вузе, отвечаю - идти на стажировку можно было во время обучения, начиная с курса с третьего (со второго если кто возьмет на 5-6 часов в неделю). В начале стажером на пол-ставки за дошираки пол-года, потом джуном на те же пол-ставки, причем этого хватает на съем комнаты и еду, при этом не проседая в обучении (красный диплом, ага). В итоге через год-полтора после окончания вуза можно вполне успешно найти работу в Европе/Америке если хочется трактор, либо продолжать за крайне комфортные деньги жить в России. Подобным путем пошла где-то треть нашего потока, это не единичные случаи.
Да, объясняют иногда хреново, да, перпод по плюсам не мог объяснить отличие битовых от логических операций, потому что сам их не знал. Но в то же время можно было подогнать то, что ты хочешь делать, под курсовую/дипломную работу, найти преподов, которые готовы подсобить, что как минимум институтская бюрократия не отнимет много времени.
Другое дело что многие "джуны" приходят, и не то что написать, а даже просто на словах объяснить какую-нибудь хеш-таблицу или алгоритм Дейкстры, что фактически надо знать уже на втором курсе даже без активного самообучения. И что еще печальнее - не могут в этом разобраться. Пока ты джун - у тебя google-driven-development, но если ты не можешь загуглить, понять и быстро воплотить решение задачи - то зачем такой джун нужен? Все что надо для собеседования - потратить один день и нагуглить всякие стандартные вещи вроде виртуальных деструкторов и наследования, в идеале какой-нибудь проект который можно показать (бота для телеграма напиши например, лол).
Единственный большой камень, который мне повезло миновать - изначальное нахождение в большом городе. Найти работу в не-милионниках подозреваю гораздо сложнее. Но там можно удариться во фриланс (что тоже не требует каких либо экстраординарных скиллов), плюс как минимум решение лаб для не-профильников если что-то не сложилось, а деньги нужны (есть группа в 15 человек, есть лаба с разными "вариантами" отличающимися парой знаков в коде, которую можно написать на час, берешь 0.5-1к с каждого и живешь счастливо).
Да, объясняют иногда хреново, да, перпод по плюсам не мог объяснить отличие битовых от логических операций, потому что сам их не знал. Но в то же время можно было подогнать то, что ты хочешь делать, под курсовую/дипломную работу, найти преподов, которые готовы подсобить, что как минимум институтская бюрократия не отнимет много времени.
Другое дело что многие "джуны" приходят, и не то что написать, а даже просто на словах объяснить какую-нибудь хеш-таблицу или алгоритм Дейкстры, что фактически надо знать уже на втором курсе даже без активного самообучения. И что еще печальнее - не могут в этом разобраться. Пока ты джун - у тебя google-driven-development, но если ты не можешь загуглить, понять и быстро воплотить решение задачи - то зачем такой джун нужен? Все что надо для собеседования - потратить один день и нагуглить всякие стандартные вещи вроде виртуальных деструкторов и наследования, в идеале какой-нибудь проект который можно показать (бота для телеграма напиши например, лол).
Единственный большой камень, который мне повезло миновать - изначальное нахождение в большом городе. Найти работу в не-милионниках подозреваю гораздо сложнее. Но там можно удариться во фриланс (что тоже не требует каких либо экстраординарных скиллов), плюс как минимум решение лаб для не-профильников если что-то не сложилось, а деньги нужны (есть группа в 15 человек, есть лаба с разными "вариантами" отличающимися парой знаков в коде, которую можно написать на час, берешь 0.5-1к с каждого и живешь счастливо).
Джун детектед. В крупных транснациональных компаниях полным-полно людей, которые про алгоритмы и не слышали, но работу свою делают, не всегда успешно. алгоритмо дрочерство и прочие студенческие заморочки это крошечные доли рынка, оплачиваемую работу найти очень трудно, а трудозатраты на получение качественного образования плюс самообразования могут запросто не окупиться. Быть тру разрабом мечта вчерашнего студента, на каждый гугл есть еще 100500 небольших и средних компаний ни чуть не худшими условиями по оплате, где требуется тупая рутинная ежедневная работа, где рулит правило "железо дешевле разрабов" и сроки важнее качества, им ненужна бигдата и нейронки, у них никогда не будет таких объемов, но делать по накатанной стабильной технологии важнее, чем ресерчить. Это чисто джунские/студенческие страхи, что если ты не работаешь в гугле с бигдатой и нейронками, не можешь отбалансировать красно-черное дерево ночью на туалетной бумажке карандашом за 2 минуты, то ты автоматом попадаешь в категорию фрилансеров-вебместеров. Не одним рокет-саенсом живы, кто-то должен делать и "простую" работу, которая прекрасно оплачивается, но не воняет пафосом.
Я ни разу не говорил про необходимость знать какие-либо серьезные использующиеся в продакшне алгоритмы, самое "сложное", что я упомянул - Дейкстра, да и то не написать (5 строк псевдокода, ага), а хотя бы в общих чертах объяснить принцип работы (хотя куда там, половина на физзбаззе отвалится, вот уж рокет сайенс так рокет сайенс).
А так да, можно сидеть в банке на нормальных 150к+, писать свои 7 строк кода в день, закрывать по паре тикетов "сделать чтобы кнопка была неактивной когда Х", но по мне это не особо отличается от формошлепства.
PS И нет, я в курсе что есть продукты, где на каждые 7 строк кода объективно надо 10 часов изучать проблему (а то еще и месяц убеждать других заапрувить сам патч), я не про это.
А так да, можно сидеть в банке на нормальных 150к+, писать свои 7 строк кода в день, закрывать по паре тикетов "сделать чтобы кнопка была неактивной когда Х", но по мне это не особо отличается от формошлепства.
PS И нет, я в курсе что есть продукты, где на каждые 7 строк кода объективно надо 10 часов изучать проблему (а то еще и месяц убеждать других заапрувить сам патч), я не про это.
Вот объясни мне, нахрена 99% программистов в работе нужен Дейкстра? Хеш-таблица ещё ладно, без её понимания в очень редких случаях можно не догадаться об особенностях реализации некоторых стандартных классов и использовать их неэффективно. Но зачем, прости господи, графы то нужны в большинстве бизнес-задач?
Уметь разбираться - да нужно, все время держать в памяти кучу алгоритмов - нет. Для повседневной работы крайне редко нужно помнить детали реализации, даже если какой-то алгоритм реализован лично тобой в одном экземпляре достаточно помнить что подать на вход и что получишь на выходе.
На самом деле разницу между этими вариантами видят как раз только джуны, сеньору обычно похуй - у него либо стоят жесткие кодстайлы и автоисправления в IDE либо у него есть дела поважнее скобкодрочерства. А еще любой сеньор всегда имеет тонну аргументов, чтобы обосновать любую хуйню, если ему очень захочется, чего джун обычно сделать не может. (потому что сам был джуном и его сеньор навяливал ему свои личные предпочтения как нерушимую истину).
Тут важно, чтобы в одном проекте были одни соглашения. Зоопарк разражает, потому что эти различия начинаешь замечать, и мозг отвлекается.
блять, блять, блять
Нормальному сеньёру похуй на такие детали отнюдь не потому что он этого не знает или это не важно, ему похуй потому что такие детали решаются на уровне спинного мозга, а джунов как раз надо еще дрессировать.
Так кодят моральные инвалиды. Оптимизатор компилятора многое поправит, не нужно так извращаться.
А потом после 100500 "Оптимизатор поправит" немножко не понимаешь, какого хуя драйвер видеокарты весит дохуя мегабайт.
Ты ступил, какой-то "иф" и "ретёрн" норм оптимизируется даже для шейдеров.
Не всякий if с ret-ом наура оптимизируются. Практика "а это компилятор оптимизирует" в сложных проектах выливается в говнокод, который нифига уже не оптимизируется и абсолютно нечитабелен.
Я джуниор.. пока прозябаю на 40ка, но.. читабельно же?
Непонятно, кем надо быть, чтобы написать второй вариант.
С третьим все понятно, это коротко, а первый может быть удобнее для последующего расширения, я бы еще скобки добавил.
Вообще, именно с опытом я все больше отказываюсь от конструкций, где много операций с одном выражении. Там проще всего затеряться какому-нибудь дерьму, и при отладке его увидеть будет сложнее. А лишние строки - кому они мешают? Сокращать код есть смысл, если он не влазит на экран, но тут уже вопрос, оправдан ли такой объем?
С третьим все понятно, это коротко, а первый может быть удобнее для последующего расширения, я бы еще скобки добавил.
Вообще, именно с опытом я все больше отказываюсь от конструкций, где много операций с одном выражении. Там проще всего затеряться какому-нибудь дерьму, и при отладке его увидеть будет сложнее. А лишние строки - кому они мешают? Сокращать код есть смысл, если он не влазит на экран, но тут уже вопрос, оправдан ли такой объем?
Большинство глюков вылазят из copy/paste, остальное не так стрёмно.
Много где работал, и повидал многое, первый вариант, если еще добавить скобки, самый верный, так как именно он увеличит читаемость, а так же позволит увеличить структуру, если нужно, и если в большом проекте, кто то напишет третий вариант, его попросту отругает сениор, да и далеко не все понимают, что сравнения это те же функции, который возвращают именно булиан, а не только используется в тех же ифах и форах.
Кодстайлы это религия, никаких логических объяснений тут быть не может. Всегда можно написать "Вы ничего не понимаете в разработке, а что если завтра .." и тут будет простыня аргументов, которая потом развернется в "Вы - хуй, ваша компания гавно, ваш софт хуита, уебываете из айти пока не поздно".
Программистом? Есть определенные стандарты кода, и на некоторых проектах их требуют соблюдать не просто так. Мало ли, что ты там нахомутаешь, выебнешься, напишешь сегодня нечитаемый регекс, или однострочник на 20 операций, а через год вылезет критический баг, а в твоем говнокоде даже ты не разберешься.
Понятное дело, что я утрирую, но если требуют писать по стандартам - то и пиши по стандартам.
Понятное дело, что я утрирую, но если требуют писать по стандартам - то и пиши по стандартам.
За такой пидор-код как в варианте 2 и 3 из Microsoft уволили бы сразу. 2 вариант используется если выражение часто повторяется и есть подробный комментарий, который его объясняет.
Нужно БОООЛЬШЕ кода
String str = Boolean.toString(wage > 5000):
if (str.length() = 5)
return false;
else
return true;
if (str.length() = 5)
return false;
else
return true;
Для тебя в аду греют отдельный котел.
Ты о том, что лучше через swith было, бы?
Я думаю, что нужны ассемблерные вставки, что бы повысить производительность в этом критическом участке кода
Есть видео, где ты делаешь это через switch?
switch(str.lenght()) {
case 4:
return true;
case 5:
return false;
default:
return thrue;
}
case 4:
return true;
case 5:
return false;
default:
return thrue;
}
Ну опечатался, с кем не бывает.
Всё нормально, троичная логика, типа true, false, null в каких-то скулях или True, False, FileNotFound в одном проекте на шарпах.
#define thrue false
по дефолту сру
Добавь еще такое "++i--"
На людях переменные передёргивать. Фи.
А как же оптимизация?
String str = Boolean.toString(wage > 5000):
if (str.length() = 5)
return false;
return true;
String str = Boolean.toString(wage > 5000):
if (str.length() = 5)
return false;
return true;
пф, ECMA:
let str = Boolean.prototype.toString(wage > 5000):
if (Boolean.prototype.toString(str === 'false').length() === 4)
return false;
else
return true;
let str = Boolean.prototype.toString(wage > 5000):
if (Boolean.prototype.toString(str === 'false').length() === 4)
return false;
else
return true;
чего уж, мне больше нравится такой вариант
case $wage in
1 ) return false;;
2 ) return false;;
......
5000 ) return false;;
5001 ) return true;;
......
esac
жаль, что работает только для натуральных чисел
case $wage in
1 ) return false;;
2 ) return false;;
......
5000 ) return false;;
5001 ) return true;;
......
esac
жаль, что работает только для натуральных чисел
Ты лучше так и скажи, что тебе просто лень переписывать для дробных.
ты меня раскусил ( так что пользуюсь костылями
Не, надо упарываться дальше ).
echo "case \$wage in" > wage_is_more_5000.sh
for [ i in `seq 1 5000` ] do; echo "$i ) echo false;;" >> wage_is_more_5000.sh; done
echo "5001 ) echo true;;">> wage_is_more_5000.sh
echo "esac" >> wage_is_more_5000.sh
export wage = `cat /tmp/wage_res`
/bin/sh ./ismore5000.sh
echo "case \$wage in" > wage_is_more_5000.sh
for [ i in `seq 1 5000` ] do; echo "$i ) echo false;;" >> wage_is_more_5000.sh; done
echo "5001 ) echo true;;">> wage_is_more_5000.sh
echo "esac" >> wage_is_more_5000.sh
export wage = `cat /tmp/wage_res`
/bin/sh ./ismore5000.sh
Аж тыж... гоутушник!
Самое мерзкое, что я видел за сегодня, а ведь я утром в "Жесть" заходил.
Тогда уж для полноты маразма
CSharpCodeProvider provider = new CSharpCodeProvider();
CompilerParameters parameters = new CompilerParameters();
// True - memory generation, false - external file generation
parameters.GenerateInMemory = true;
// True - exe file generation, false - dll file generation
parameters.GenerateExecutable = true;
CompilerResults results = provider.CompileAssemblyFromSource(parameters, "namespace Conditon { class Condition { public static void Condition(int wage) { return " + wage.toString() + ">5000; }}}");
if (results.Errors.HasErrors)
{
StringBuilder sb = new StringBuilder();
foreach (CompilerError error in results.Errors)
{
sb.AppendLine(String.Format("Error ({0}): {1}", error.ErrorNumber, error.ErrorText));
}
throw new InvalidOperationException(sb.ToString());
}
Assembly assembly = results.CompiledAssembly;
Type program = assembly.GetType("Condition");
Assembly assembly = results.CompiledAssembly;
Type program = assembly.GetType("Condition");
MethodInfo main = program.GetMethod("Condition");
main.invoke(wage);
CSharpCodeProvider provider = new CSharpCodeProvider();
CompilerParameters parameters = new CompilerParameters();
// True - memory generation, false - external file generation
parameters.GenerateInMemory = true;
// True - exe file generation, false - dll file generation
parameters.GenerateExecutable = true;
CompilerResults results = provider.CompileAssemblyFromSource(parameters, "namespace Conditon { class Condition { public static void Condition(int wage) { return " + wage.toString() + ">5000; }}}");
if (results.Errors.HasErrors)
{
StringBuilder sb = new StringBuilder();
foreach (CompilerError error in results.Errors)
{
sb.AppendLine(String.Format("Error ({0}): {1}", error.ErrorNumber, error.ErrorText));
}
throw new InvalidOperationException(sb.ToString());
}
Assembly assembly = results.CompiledAssembly;
Type program = assembly.GetType("Condition");
Assembly assembly = results.CompiledAssembly;
Type program = assembly.GetType("Condition");
MethodInfo main = program.GetMethod("Condition");
main.invoke(wage);
бля. Видел такой код в реальности
Я был на проекте, где в базе хранился признак типа varchar со значениями "да"/"нет". Как я понял, архитектор решил, что так будет короче, чем boolean true/false.
Дык это же инжтех, математики от силы до пятого класса.
Если человек не знает языков программирования, это ещё не значит что он гуманитарий.
Ирония в том, что знание пусть искусственного, но всё-таки языка, противопоставляется в том числе и филологии, то есть знанию языков естественных.
Хм, а мертвые языки считаются за естественные?
Да, так как появились они естественным путём.
Мёртвые языки? Фортран?
Латынь и санскрит
Если человек не знает языков программирования, кто назвал это человеком?
браток, я технарь - ремонтник всего, от зарядки до авто, но программирование - не мое, хотя я корочку имею.
Чем плох первый вариант?
как минимум лишним оператором
Который оптимизируется компилятором. Ничего там смертельного нет.
Не хватает фигурных скобок.
Поясню: первый вариант вполне мог быть заюзан с учетом того, что помимо ретурна нужно будет дописать еще какие-либо действия (да как минимум для дебага что-нить).
По невнимательности можно забыть дописать скобки позже и чуток зафакапиться из-за этого.
Поясню: первый вариант вполне мог быть заюзан с учетом того, что помимо ретурна нужно будет дописать еще какие-либо действия (да как минимум для дебага что-нить).
По невнимательности можно забыть дописать скобки позже и чуток зафакапиться из-за этого.
для дебага вполне, если хочешь брякнуться в момент неожиданности но для этого можно и ассертнуть
а breakpoints уже не используется при дебаге? Обязательно что-то втуливать в код, чтобы понять что происходит, а потом забывать почистить за собой?
Я веб-холоп. Частенько быстрее и проще дампануть что-нибудь в браузер, чем юзать xdebug.
>а потом забывать почистить за собой?
На прод такое не пройдет.
>а потом забывать почистить за собой?
На прод такое не пройдет.
Или пойдёт.
Если оно ушло на прод - значит его хреново покрыли тестами.
з.ы хотя, что-то я думаю, что полное покрытие в большинстве случаев - из области ненаучной фантастики.
з.ы хотя, что-то я думаю, что полное покрытие в большинстве случаев - из области ненаучной фантастики.
Раздражает своей простотой.
Результат сравнения уже булево значение, значит указывать явно true или false - уже излишне. Ветвление (if) всегда усложняет восприятие и чтение кода. В данном случае ветвление не нужно, а значит его в коде быть не должно.
Ну и мой любимый множественный return. Редко есть случаи, когда прерывание метода/функции оправдано, и этот явно не входит в их число.
Ну и мой любимый множественный return. Редко есть случаи, когда прерывание метода/функции оправдано, и этот явно не входит в их число.
explicit is better than implicit
return True if wage > 5000 else False
return True if wage > 5000 else False
if ( wage > 5000 ) return true;
return false;
return false;
b = wage > 5000;
return b;
return b;
Адекватно.
Внезапно, компилятор к примерно такому виду и приводит всё.
Зачем заминусили человека? Так дебажить проще
Ну давай теперь на каждый чих переменные заводить.
И обязательно однобуквенные и двухбуквенные.
Так, давайте для малограмотных тоже самое, только на бейсике.
Hail Pascal!
Да, да... хайль. Но я учил только бейсик образца 80-японского года. Уж, простите ущербного.
Я боюсь здесь уже не осталось тех кто может писать на этом забытом языке
В Pascal.NET точно можно одной строчкой писать. В древнем паскале согласен, что нельзя.
с какого хуя?
любое выражение, которое может быть вычислено будет возращать результат, который можно использовать как аргумент для других функций.
само наличие конструкции if (логическое_выражение)... уже явялется этому подтверждением
function RetBool(x : integer) : Boolean;
begin
RetBool := x > 5000;
end;
любое выражение, которое может быть вычислено будет возращать результат, который можно использовать как аргумент для других функций.
само наличие конструкции if (логическое_выражение)... уже явялется этому подтверждением
function RetBool(x : integer) : Boolean;
begin
RetBool := x > 5000;
end;
Бейсикам не обучен, но могу на русском.
У нас есть метод, который предположительно обрабатывает заработную плату, мы видим собственно выход из метода (оператор return, который возвращает управление и передает результат в вызвавший метод). На трех фреймах мы видим три реализации одного и того же функционала (вернуть true, если ЗП больше 5000 и false в противном случае). В первом случае используется оператор ветвления if, во втором тернарный оператор, в третьем особенность того, что оператор сравнения сам по себе возвращает результат операции сравнения.
На практике особой разницы нет и больше зависят от общей культуры кода.
У нас есть метод, который предположительно обрабатывает заработную плату, мы видим собственно выход из метода (оператор return, который возвращает управление и передает результат в вызвавший метод). На трех фреймах мы видим три реализации одного и того же функционала (вернуть true, если ЗП больше 5000 и false в противном случае). В первом случае используется оператор ветвления if, во втором тернарный оператор, в третьем особенность того, что оператор сравнения сам по себе возвращает результат операции сравнения.
На практике особой разницы нет и больше зависят от общей культуры кода.
Эх, говорил мне батя "Учи ассемблер", но нет, бейсик был проще и понятней, а паскаля и вовсе не было в наличии.
Выучил бы ассемблер, пилил бы сейчакс микроконтроллеры за сотни нефти а бейсик рип
Не сыпь мне соль на рану.
Не совсем рип. Есть VB.NET, который развивается и имеет синтаксис VB и современные фишки.
10 LET WAGE = 4000
20 GOSUB 50000
30 PRINT RESULT
40 END
50000 LET RESULT = 1
50010 IF WAGE > 5000 THEN GOTO 50030
50020 LET RESULT = 0
50030 RETURN
20 GOSUB 50000
30 PRINT RESULT
40 END
50000 LET RESULT = 1
50010 IF WAGE > 5000 THEN GOTO 50030
50020 LET RESULT = 0
50030 RETURN
Я не всё помню и могу ошибаться, но я бы написал так.
10 LET WAGE = 4000
20 IF WAGE > 5000 THEN GOTO 100
30 LET RESULT = 0
40 GOTO 110
100 LET RESULT = 1
110 PRINT RESULT
120 END
10 LET WAGE = 4000
20 IF WAGE > 5000 THEN GOTO 100
30 LET RESULT = 0
40 GOTO 110
100 LET RESULT = 1
110 PRINT RESULT
120 END
В оригинале return, что намекает на функцию.
Никогда не любил эти GOSUB и RETURN, типа подпрограмма, но GOTO хотя бы указывает на какую строку ссылается, в отличие от RETURN. Ну, да ладно, как уже сказали, язык скорее мёртв, чем жив.
Ну... FreeBASIC вполне себе живой. Правда там теперь и функции есть. И типизация... :)
Тут есть гуманитарии? Напишите то же самое на Юридическом языке. Это тот самый, который занимает целые страницы текста, и слова вроде все по отдельности русские, нормальные, но пытаться соединить смысл отдельных слов - верный путь в психушку.
Для начала получите-ка счёт на 10000 долларов за бесплатную консультацию.
return wage - 5000;
- вот так странно работает:
если wage 5000 то возвращает false - потому что 5000 минус 5000 будет ноль,
но
почему-то при других значениях wage возвращает всегда true.
как это объяснить?
- вот так странно работает:
если wage 5000 то возвращает false - потому что 5000 минус 5000 будет ноль,
но
почему-то при других значениях wage возвращает всегда true.
как это объяснить?
Если речь идет о Си, то насколько я помню, то любое отличное от 0 значение- это истина.
Это если брать число, строки себя ведут по другому, пустая к примеру будет выдавать тоже true, хотя вот если брать другие языки, к примеру js, то там даже [ 0 ] будит считаться за false
В Си строки - char*, это как бы указатель на область памяти и строка заканчивается на "/0", а [0] єто первый элемент массива, ну никак не Си стандарт. Такое в Делфи было, где в первом элементе указывалось к-во символов в строке.
На счет [0] я имел в виду массив, с элементом '0', а на счет Си строк, согласен, это все тот же объект, который всегда конвертируется в true, если он существует, либо же false если его нету.
'0' == 48.
В С нету объектов.
В С не существует понятия "существует".
В С нету объектов.
В С не существует понятия "существует".
На счет нуля я говорил про js, а на счет существования, вы правы, прошу прощения что то я уже совсем начал забывать си и путать его с си++
Если Вес>5000 тогда
Возврат Истина;
Иначе
Возврат Ложь;
КонецЕсли;
1С))
Возврат Истина;
Иначе
Возврат Ложь;
КонецЕсли;
1С))
есть тут кто на 1С на постоянной основе работает? код на русском языке даже спустя годы работы, кажется чем-то неестественным или привыкаешь?
Так же, как англоязычным на английском. Прикинь? Как ты думаешь, каково это знать английский язык и писать на нем код? Вот и с русским также.
можно и на англ писать, там #dedine прямо в среду зашит, а компилятор все подряд хавает. Вот отсутствие наследования (все классы за крааайне редким исключением предопределены) крайне огорчает иногда...
на 1С третий вариант используется.
Ох давно это было, но в теории как-то так:
someproc:
pop %eax
mov $0x1388, %ebx
cmp %eax, %ebx
jg toofat
push $0x0
ret
toofat:
push $0x1
ret
someproc:
pop %eax
mov $0x1388, %ebx
cmp %eax, %ebx
jg toofat
push $0x0
ret
toofat:
push $0x1
ret
wage это зряплата, а не вес. Вес - weight.
Хм... Подтверждаются слухи, что на 1С пишут те, кто в английский не смогли. :)
Хм... Подтверждаются слухи, что на 1С пишут те, кто в английский не смогли. :)
не, просто я сначала пишу,а потом разбираюсь что там)
Тот самый момент, когда закончил говноунивер 3 года назад и там тебе говорили что 1й базовый, 2й продвинутый, а про третий никто там не слышал нихера, и понимаешь что ты отсталый.
Смотрю на комменты и появляется ощущение, что полреактора это топовые программисты. И отсюда следует одно из двух:
1) Полроссии программисты
2) Почти все прогрпммисты любят сидеть на джое.
1) Полроссии программисты
2) Почти все прогрпммисты любят сидеть на джое.
для того, что бы понять эту шутку не нужно быть программистом.
этому в школе на информатике учат
этому в школе на информатике учат
В школе (7 лет назад) учили разве что вкл/выкл компьютер да что такое локальные сети и их разновидности. Но если подумать, то допереть до смысла поста совсем не трудно (спасибо картинкам справа)
Мне больше нравится факт, что первая половина комментов о том, что 3 вариант самый правильный(все в плюсах, а те кто против - в минусах )
Но ближе к концу комменты за читабельность первого варианта уже в плюсах.
Пути реактора неисповедимы ))
Но ближе к концу комменты за читабельность первого варианта уже в плюсах.
Пути реактора неисповедимы ))
вообще я б и "5000" заменил на константу или параметр из конфига.
Будь в топе. Замени константу абстрактным обьектом-оболочкой. Саму константу храни в облаке и реализуй тонну кода для работы с облаком с помощью современных технологий и фреймворков.
если бы в таком виде хранились все параметры\темплейты и прочая настраиваемая фигня - то возможно бы так и сделал.
и пофиг что оно избыточно для числовой константы - но зато вообще все параметры в одном месте и их удобно хранить\читать.
ну и как бы "тонна кода" и "фреймворк" - взаимоисключающее
и пофиг что оно избыточно для числовой константы - но зато вообще все параметры в одном месте и их удобно хранить\читать.
ну и как бы "тонна кода" и "фреймворк" - взаимоисключающее
Ты с явой походу не знаком :D
Ну раз пошла такая пьянка, то вот:
+[----->+++++.---.[--->+--.++++++++.[->+++-.-[->+++-.++++++.--.--[--->+-.-[->++.[-->++.-----[->++-.-----...-------.>++++++++++.[->+++++....---[----->++.-------------.[--->+---.+.---.----.-[->+++++-.---[->++++.--.+++.++[->+++.++++[->+++.>++++++++++.+[--->+++++.+++++++.+++++++.++++[->+++.>++++++++++.[->+++++....---[----->++.-------------.[--->+---.+.---.----.-[->+++++-.++[->+++.-----.+++++++++++.+++++++.++++[->+++.++++[->+++.
+[----->+++++.---.[--->+--.++++++++.[->+++-.-[->+++-.++++++.--.--[--->+-.-[->++.[-->++.-----[->++-.-----...-------.>++++++++++.[->+++++....---[----->++.-------------.[--->+---.+.---.----.-[->+++++-.---[->++++.--.+++.++[->+++.++++[->+++.>++++++++++.+[--->+++++.+++++++.+++++++.++++[->+++.>++++++++++.[->+++++....---[----->++.-------------.[--->+---.+.---.----.-[->+++++-.++[->+++.-----.+++++++++++.+++++++.++++[->+++.++++[->+++.
Выглядит как очень сильное колдунство.
Ну это уже мозго*бство
это что за ебучая морзянка?
brainfuck же. Ровно как и сказал комментарий выше.
ENQ STX ? BEL STX STX BS ASK
Похоже на молитву Омниссии
А на перле смогёт кто-нибудь?)
Кэп!?
Синтаксис написания кода, со временем код становится всё проще, если раньше функции по полкам раскладывали, то сейчас достаточно небольшой строчки, которая выполнит ту же функцию. Ушёл бороздить просторы океанов.
Это из новой Субнаутики?
return $wage=~/^[5]0{3}$/gi; # Только регулярные выражения, только хардкор!
PERL, небось?
Ага.
Кстати, там же надо было больше 5000, а не ровно 5000? Тогда все будет выглядеть еще лучше, особенно с учетом дробных значений и отрицательных чисел:
$wage!~/^(-\d+(?:\.\d+)?|\d{1,3}(?:\.\d+)?|5000(?:\.0+)?|[1-4]\d{3}(?:\.\d+)?)$/gi;
Кстати, там же надо было больше 5000, а не ровно 5000? Тогда все будет выглядеть еще лучше, особенно с учетом дробных значений и отрицательных чисел:
$wage!~/^(-\d+(?:\.\d+)?|\d{1,3}(?:\.\d+)?|5000(?:\.0+)?|[1-4]\d{3}(?:\.\d+)?)$/gi;
Сколько у тебя ушло времени на эту... это.. Короче, как долго ты конструировал это... эту...
return wage / 5001;
ХАХААХАХАХАХХАХАХАХАХАХАХАХАХАХАХАХАХ
КЛАСС!
ХАХАХАХАХХАХАХАХАХАХАХ
КЛАСС!
ХАХАХАХАХХАХАХАХАХАХАХ
1) What is 5000? Please use named constant in header file for this value.
2) Please rename variable wage according to coding convention.
3) In first case please use code block (see coding convention 2.3.14).
2) Please rename variable wage according to coding convention.
3) In first case please use code block (see coding convention 2.3.14).
wage
так зарплата 5000 это в рублях, долларах или гривнах в итоге?
так зарплата 5000 это в рублях, долларах или гривнах в итоге?
Сложно сказать какой язык на картинке. В С++ gcc генерит одинаковый код https://godbolt.org/g/5q3Eja
Чтобы написать коммент, необходимо залогиниться
Отличный комментарий!