Стилистические Войны программистов / программирование :: С++ :: стиль :: it :: программист

программирование программист it стиль С++ 

Стилистические Войны программистов

if( ехрг )
if(ехрг)
if ( ехрг )
if (ехрг)
Tinaxoox,программирование,программист,it,стиль,С++

int fuñe() { //... }	int fuñe(){ //... }
	&
	Dansken,программирование,программист,it,стиль,С++

Dog* dog;
Dog
* dog;	Dog *dog;
É	V \
	ОзпЛ«п,программирование,программист,it,стиль,С++

Han	maní;
Han	man2;
Supe rilan man3;
Han maní, man2, man3
Dansken,программирование,программист,it,стиль,С++

class HyClass
{
public:
HyClass();
//.. •
protected:
//...
private:
int a;
//...
};
class HyClass
private:
int a;
protected:
public:
HyClass();
//...
};
Dansken,программирование,программист,it,стиль,С++

const char * string; const int * source;
const char * str; const int * src;
Ges,программирование,программист,it,стиль,С++

class Class
: public Classl , public Class2 , public Class3
{
U ...
Y>
class Class :
public Classl, public Class2, public Class3
{
u ...

class Class : public Classl, public Class2, public Class3
{
H ...
};
Tinaxnox,программирование,программист,it,стиль,С++

Tinaywx,программирование,программист,it,стиль,С++

if( ехрг )	if(ехрг)
	
i	к Tinayiox,программирование,программист,it,стиль,С++

int fuñe()
{
//...
}
int fuñe(){
//...
}
Tinaxnox,программирование,программист,it,стиль,С++






Подробнее
if( ехрг ) if(ехрг) if ( ехрг ) if (ехрг) Tinaxoox
int fuñe() { //... } int fuñe(){ //... } & Dansken
Dog* dog; Dog * dog; Dog *dog; É V \ ОзпЛ«п
Han maní; Han man2; Supe rilan man3; Han maní, man2, man3 Dansken
class HyClass { public: HyClass(); //.. • protected: //... private: int a; //... }; class HyClass private: int a; protected: public: HyClass(); //... }; Dansken
const char * string; const int * source; const char * str; const int * src; Ges
class Class : public Classl , public Class2 , public Class3 { U ... Y> class Class : public Classl, public Class2, public Class3 { u ... class Class : public Classl, public Class2, public Class3 { H ... }; Tinaxnox
Tinaywx
if( ехрг ) if(ехрг) i к Tinayiox
int fuñe() { //... } int fuñe(){ //... } Tinaxnox
программирование,программист,it,стиль,С++
Еще на тему
Развернуть
Ничего не понял, но поржал почему-то
Labertin Labertin 07.05.201719:32 ответить ссылка 3.0
Весенние прохлады...
dfq_ dfq_ 07.05.201719:33 ответить ссылка 0.9
Сразу видно индийца.
nonnname nonnname 07.05.201719:34 ответить ссылка 4.7
Программерские шутки это всегда смешно.
МАШАХОРОШЕВА
ОЧНЬ СМЕШНО НО НЕ ПОНЯТНО
h Класс? 2
BS_Empire BS_Empire 07.05.201719:36 ответить ссылка 10.0
шутка об отличиях между форматированием текста в средах разаработки для с++(конкретно visual studio c++, idea и другой шлак). лодку мне
undersun undersun 07.05.201719:38 ответить ссылка -3.7
во всех настраивается же.
просто у каждого разной степени упоротости предпочтения
villy villy 07.05.201719:47 ответить ссылка 0.8
ну так
undersun undersun 07.05.201720:11 ответить ссылка -0.6
ЭЭЭБЛЯ
Принесите мне ментоловый огнетушитель, пожалуйста? А то у меня и дом кривой, и джинсы обтягивающие с подворотами, и куча мужиков в одной кроватиT_T
cooleran cooleran 07.05.201719:40 ответить ссылка 11.1
Но работает же.
inglip inglip 07.05.201719:43 ответить ссылка 3.3
эклипс?
villy villy 07.05.201719:50 ответить ссылка 0.2
Да не парься, все самое адекватное в стиле кодирования показано максимально нелепо, а антипаттерны показаны якобы правильно.

if (some) - пробел после if нужен во имя отличия ключевых слов от вызовов функций. После имени функции в вызове пробел не ставится.
some *x - в С++, звездочка обязана стоять рядом с переменной, потому что хоть и не очевидно, но именно переменная становится указателем. Пример:
some *x, *y - все верно
some* x, y - теперь у нас x указатель, а y просто тип some, получилась хуета.
Согласен, автор картинок дебил. Хотя про сокращение переменных и и имена предков с новой строчки правильно написал.
DrXak DrXak 08.05.201713:43 ответить ссылка 0.0
эта проблема существует только у тех, кому лень на декларацию каждой переменной писать свою строчку.
а насчёт указателей - тут уже кому как, для одних переменная указатель, для других это переменная указательного типа.
И мне тоже льда для охлаждения кресла захватите по тем же причинам
И заходишь домой такой с ппш на перевес поедая бутер колбасой на язык как матроскин учил и говоришь мужикам "збс"
Похоже, что я учился на программиста, чтобы понимать шутки в интернете...
Tetrix Tetrix 07.05.201719:41 ответить ссылка 5.5
Ты учился на программиста, чтобы понять, что человечеству пиздец будет нескоро.
Я выучился на программиста похоже только для того, чтобы понять, что даже если этот мир матрица, то это нихренашеньки ничего не меняет, в том плане, что не упрощает, скорее наоборот.
iNji iNji 07.05.201721:49 ответить ссылка 0.0
Это походу придумал ахуеено умный мудак который решил выебнуться своим остроумием. А я из-за подобного с парой ребят посрался на пустом месте.
DooMka DooMka 07.05.201719:42 ответить ссылка 0.2
стили форматирование это просто текст с пробелами. а посрались вы потому что вы все мудаки. только и всего
Про большую часть этого сказать не могу, потому что на пробелы мне немного похуй, но по поводу блочного форматирования и расстановки скобок очень хреново, если каждый в команде пишет так, как ему вздумается. Другому потом читать писанину другого ой как не просто. Так что это проблема и на самом деле серьезная, хотя для постороннего и не очевидная. Это на примере из трех строчек все понятно при любом форматировании, но программы очень редко бывают из трех строчек.
"Hello World"!
Каждый настраивает себе чтение в том виде в котором нравится и запись в принятом командой стандарте, и никому не надо себя ломать, по крайней мере в такой простоскриптуемой мелочи как расстановка скобок и пробелов. Никогда не понимал тех у кого с этим проблемы, вы блин программисты или кто?
AjiTae AjiTae 23.05.201706:51 ответить ссылка -0.1
ласкают слух звуки священной войны!
villy villy 07.05.201720:21 ответить ссылка 0.5
табы или пробелы ?
разделяйте как-нибудь картинки, а то я не с того поржал с начала :(
diofjs diofjs 07.05.201719:43 ответить ссылка 0.8
Это, наверное, лучшее наглядная визуализация программирования, для людей которые нихера не понимают в программировании.
ParaBox ParaBox 07.05.201719:43 ответить ссылка 0.4
Лучшая наглядная визуализация "как оправдать нечитаемость своего кода глупыми картинками про код других"
Мне показалось или тут к конструкции
int func{
//...
}
несколько предвзятое отношение?
Можно хоть int func{ sampletext } писать, просто выглядит как с подворотами
Можно писать так, как написано в гайдлайне/соглашении по коду конкретного проекта. Если там написано, что фигурная скобка после имени функции переносится на новую строку - значит переносится; написано, что не переносится - значит не переносится; ничего не написано - делай так, как уже есть в проекте, а если проект новый - на твое усмотрение.

Есть покруче тема для холивара - таб или пробелы, а если пробелы, то 4 или 8.
Hellsy Hellsy 07.05.201719:52 ответить ссылка 2.2
4 таба? мсье знает толк!
villy villy 07.05.201721:06 ответить ссылка 0.2
undefined value
4 пробела) а 4 таба - это действительно из раздела BDSM. В основном М, но не суть.
1 пробел. И, да, я ненавижу людей и хочу, чтобы читающие мой код страдали. Ибо нефиг.
Слабак, если хочешь чтобы читающий действительно страдал пиши в одну строчку.
tab_to_spaces: true
spaces: 4
Да это просто из разных coding conventions. Очевидно автор считает себя избранным, а привычный ему стиль - единственно верным.
Hellsy Hellsy 07.05.201719:48 ответить ссылка 3.2
как и большинство.
вот этим меня Python:
и радует )
vassav vassav 08.05.201714:30 ответить ссылка 0.0
чёрт, реактор спёр 4 пробела во 2 строке.
vassav vassav 08.05.201714:34 ответить ссылка 0.0
вот этим питон и не радует :)
villy villy 08.05.201715:31 ответить ссылка 1.2
ну это русскоязычный сайт, радуйся что только пробелы спиздили
ты и на иностранных пробелы будешь терять, если специально не укажешь, что текст переформатировать не надо. это веб-технологии, а не Россия, детка.
Scull666 Scull666 07.05.201719:47 ответить ссылка 2.9
Верно. Даже не просто профессиональный, а профессионально-срачный. Одно только требование открывающей фигурной скобки на одной строке с заголовком чего стоит. Типа ломоть колбасы класть на бутер целиком или разрезать пополам и разместить половинки диагональю.
Я 10 лет программирую и не могу сейчас уловить связи фигурной скобки и бутерброда. Проблема затрагивает исключительно удобнство визуального отделения блоков и количества строк кода. Мир поделился примерно так же, как поделились языки и их побочные эффекты.
Java - тормозная машина, полноценно работать на ней можно на компе с i7, fullhd моником (она очень многословная, просто ПИЗДЕЦ как). Поэтому там и сложилась традиция переносить скобку на новую строку, ну а чо - мониторы у всех збс.
То же самое пошло и в Си\С++.
Javascript - эра верстальщиков, front-end парней с хромобуками и нетбуками. Мало место на экране, сложилось популярное течение ставить скобки на той же строке.
Бутер был с посте для сравнения описания стиля. Логично, что для пользователя-разработчика существенны публичные элементы, но некоторые срать хотели на повторную применимость кода и ставят приватные элементы первыми, хотя они существенны для реализации, а не для использования.
Мой пример с бутером был о другом.
Да я про пост и говорил, причем там этот бутерброд.
А на счет приватных полей - их конечно обязательно надо последними писать. Причина проста - когда другой разработчик открывает ваш класс, он ожидает по публичным полям и методам примерно понять схему работы этого класса. Поэтому в самом верху класса и должны идти все публичные поля и методы. Приватные - последними, а реализация функций вообще уносится в другой файл.
а как насчет такого варианта:
private
public
protected
?
В этом варианте, когда я открою h файл с классом, я увижу вначале private раздел, который мне не нужен (закон инкапсуляции, реализация должна быть сокрыта)
public просто должен идти первым, а protected вторым. Только из за этого, чтобы открыли файл и сразу читали public и protected поля, а что там внизу файла - пофик.
когда я открываю чужой класс я хочу понять как он работает. А его публичный интерфейс мне intelisence покажет без открытия класса
Просто ваше желание не совпадает с желаниями комитета по стандартизации и сообщества Си.
Большая часть разработчиков на С\С++ использует sublime\vim\emacs без рюшечек, и они привыкли читать интерфейс класса по файлу.
мой коммент был отчасти шуточным ) Очевидно, что стилистические традиции обусловлены, в основном, особенностями языка. Программисту на C# вряд ли придёт в голову изучать публичный интерфейс класса по его коду. Программист на Javascript устанет скролить код, если открывающие фигурные скобки будут на следующей строке, а все переменные будут декларироваться отдельно. VisualStudio сама форматирует код "лесенкой", что практически исключает ошибки, когда после if идут два оператора, которые забыли обернуть в фигурные скобки. И т.д.
Вот оно, новое поколение программистов...
сейчас дефолные форматтеры и эклипса и идеи скобку оставляют на той же строке
про сильно махровые времена врать не стану - не помню
villy villy 07.05.201721:05 ответить ссылка 0.0
я про яву
villy villy 07.05.201721:05 ответить ссылка 0.0
дефолты - это дефолты. если фирма сказала: фигурные скобки на отдельной строке, каждый параметр функции на отдельной строке и отступ табом - соизволь выполнять.
у так фирма состоит из людей, можно и передоговориться
чаще договориться не смогли и сделали как в армии: пусть безобразно, зато единообразно
даже гугл так сделал
villy villy 07.05.201721:29 ответить ссылка 0.3
тогда необходимо правило: чужие пробелы/табуляцию - не править.
Не помню в какой книге дают совет: если будете обсуждать как делать отступы и где оставлять скобки, то никогда не сможете начать разработку.
Эк как ты всех, использующих индийский код, в ебанаты прописал. А ведь они, при определённых условиях, получат больше денег.
nonnname nonnname 07.05.201719:55 ответить ссылка -4.8
Египтянин детектед.
Просто интересно, а что ты делаешь, когда у тебя в if условие такое длинное, что переходит на вторую строку?

if (some === 0 &&
some2 === 1) {
// так нельзя, сливается
}

if (some === 0 &&
some2 === 1)
{
// Бля, теперь у нас два стиля кодирования, ну как-так то, бля, ну как так
}

if (some === 0 &&
some2 ===1) {

// Мы просто поставим пустую строку, чтобы не сливалось.
}

У меня на JS автоформаттер настроен на строго скобку на линию, поэтому я ставлю пустую строку.
Ваш вариант в студию!
а так не судьба?
var someCondition = ...
if(someCondition) {
someAction()
}
villy villy 07.05.201720:13 ответить ссылка 0.2
Судьба,я так делал, пока не понял что заводить по переменной на каждый длинный if это уже реально какой то изврат.
зря перестал, в имени этой переменной можно написать, что это вообще такое
ну и вообще, что там в конце этого длинного ифа, важно не всегда. когда вчитываться будешь - тогда и проскроллишь, ничо страшного. сразу важнее охватить структуру кода взглядом, что ведет к большему приоритету компактности по высоте и единообразию - тогда охватить проще
villy villy 07.05.201720:49 ответить ссылка 1.3
Не спорю, выносить длинный if в переменную это ок, просто дело вкуса.
может тогда вообще нахуй скобки, один хуй все вынесено, гулять так гулять ёба
я так и делаю, ниже срачик и по этому поводу, вливайся :)
прост тут someAction - это некий placeholder имелся в виду
villy villy 08.05.201700:31 ответить ссылка 0.0
boolean check1 = condition1;
boolean check2 = condition2:
boolean check3 = condition3;

if ( check1 && check2 && check3 ) {
//some action here...
}
Rozyel Rozyel 07.05.201720:17 ответить ссылка -0.3
а еще некоторые удивляются почему браузеру жрут по 8ГБ оперативки... тебя бы на микроконтроллеры с 1кб оперативки заставить писать
как раз в компилируемых языках это ничего не стоит жи
villy villy 07.05.201720:23 ответить ссылка 0.1
В с++ любой современный компилятор развернет все эти условия самым оптимальным образом, и от самих переменных check1/2/3 не останется и следа.

хз, почему тебя заминусили
ниже за то же самое заплюсовали
реактор ¯\_(ツ)_/¯
villy villy 07.05.201723:48 ответить ссылка 0.1
код должен быть понятен человеку.
переменная boolean занимает 8 бит
а браузер жрет из за кеширования.
Rozyel Rozyel 07.05.201720:24 ответить ссылка -1.0
когда у тебя 32гб и i7-7700k - ты прав. когда у тебя мало оперативки и каждый такт на счету - приоритеты смещаются
возможно твой подход действительно лучше, в некоторых случаях.
Rozyel Rozyel 07.05.201720:44 ответить ссылка 0.1
многое зависит от контекста...
Rozyel Rozyel 07.05.201720:45 ответить ссылка 0.2
истинно так. шурупы лучше закручивать чем забивать
не напомнишь, какой оверхэд даёт именованная область памяти относительно неименованной в ассемблере?
villy villy 07.05.201720:54 ответить ссылка 0.3
продолжай...
Rozyel Rozyel 07.05.201720:59 ответить ссылка 0.6
гусары, не ржать!
villy villy 07.05.201721:21 ответить ссылка 0.9
Ну в описанной тобой ситуации и дикие, никак не портируемые, asm вставки вообще не редкость, которые творят внутри лютую магию, неочевидную вообще никому.
Такой код будет есть больше памяти и выполняться на несколько тактов дольше.
А если функция большая, то из-за нехватки регистров еще добавиться и обмен с внешней памятью и тут уже время выполнения увеличится на десятки тактов.
в современных процессорах существует конвеерная оптимизация,
сравнение if else обрабатываются задолго до того как начинают быть нужными, а потом только вставляются в нужный участок время-исполнения.
Rozyel Rozyel 07.05.201720:33 ответить ссылка 0.2
Вы что-то путаете. Машинный код уже никак не оптимизируется. То что обе ветки if else начинают заранее обрабатываться - это да. Но бесполезное использование дополнительной памяти процессор никак не предугадывает.
>>никак не предугадывает
ну вобще это может зависеть от уставок компилятора
Компилятор никак не связан с конвейером процессора. Оптимизатор компилятора, конечно, исправляет часть говонокода, но замечает он далеко не все.
Листинг в студию обоих вариантов на асме.
Иначе это голословный пиздёшь.
такие заявления хорошо бы дополнять описанием среды. далеко не везде короче код значит быстрее и меньше жрущий
даже в js щас повсеместно jit
villy villy 07.05.201720:37 ответить ссылка -0.1
Пишу на C под микроконтроллеры.
К JS имею отношение посредственное. Но, по моему, существование jit не оправдывает говнокода.
То есть дать сложному выражению понятное имя, которое упростит жизнь читающему код - это говнокод?
Да вы, батенька, небось и функции вручную инлайните, чтоб говнокода не было?
Вот не надо заветы микроконтроллерщиков тянуть в остальной мир.
Нормальный компилятор под популярную платформу сейчас творит чудеса и выкомпилит он эти лишние переменные из кода ко всем чертям. Особенно, если они использовались только в одном месте.
По идее, компилятор должен оптимизировать такие участки кода.
И на пару-тройку тактов если будет кеш-попадание в кеше 1-го уровня (а оно скорее всего будет, правда не прям сразу, а после первого кеш промаха)

и планировщик процессора перетасовывает оптимальным образом микрокод на конвеере (не машинные команды, а более низкоуровневая вещь).
Вы все говорите про опитимазцию, а на самом деле пиздец начался уже на уровне codeStyle. У нас на длинный if, просто потому что мы не придумали как переносить ебучую скобку, пришлось заводить аж ТРИ новых переменных. Это антипаттерн.
Это указание смысла выражениям. В нормальном коде они должны звучать не как var1, var2 и var3, а иметь название, которое поможет лучше разобраться в сути кода.
Например: (x != null && size(x) > 0) и xIsNotEmpty
if (some == 0 ||
some2 ==1) {
// Мы просто поставим чуть более одного пробела, чтобы не сливалось.
}
WYSIWYG-редактор сожрал наши пробелы.
if (some === 0 &&
....some2 === 1) {
// вместо точек пробелы и или таб(парсер реактора сьедает пробелы)
//так можно и не сливается
}
Неразрывные
    не съедает.
хз,
у меня сьел. вот тут второй раз
 
извините, я в вебе не силен... для меня пробелы это " "
undersun undersun 07.05.201720:46 ответить ссылка -0.1
даже в скобках ректор вместо 4 пробелов оставил один)
undersun undersun 07.05.201720:47 ответить ссылка -0.1
Это не реактор, а типичное поведение HTML-парсера: все пробелы, кроме первого, подлежат уничтожению. В этом есть смысл, но не всегда.
nonnname nonnname 07.05.201720:56 ответить ссылка -0.1
Так то оно так, только реактор мог этого и не делать, если бы захотел - вставляет же он br вместо переноса строки, запрещает все теги, кроме довольно узкого списка, а даже те, что разрешает, меняет под себя (как пример если пикче указать высоту и ширину, реактор подставит другие значения из своих соображений).
делать по умолчанию PRE - нелепо. В ЧаВо по поводу PRE нет рекомендаций или я давно их не читал.
    Alt + 0160 на кейпаде.
Ну когда я отправлял, как раз пробелы были. Проблема как раз в том и есть, что отступ есть в условии if на второй строке, и отступ в 2 - 4 пробела будет ниже в коде. Будет сливаться.
if (
  some === 0 &&
  some2 === 1 &&
  some3 === 2
) {
  //Проблемы?
}
AjiTae AjiTae 23.05.201707:03 ответить ссылка 0.0
еще скажи что не нужно всегда ставить фигурные скобки после ифов
unkuse unkuse 07.05.201720:15 ответить ссылка 0.3
Это третий способ отличить новичка от старпера.
Вот к сожалению нет, на моем проекте действует такой код стандарт и еще говорят что это офигенно :(
unkuse unkuse 07.05.201721:02 ответить ссылка -0.6
Тимлид вашего проекта новичок, и через пару лет работы в команде, когда в очередной раз он будет демажить баги, и вновь увидит, что кто-то второй строкой к однострочному if дописал вторую команду и не протестил - он решит, нахуй это все, откроет гугл, прочитает первые 10 статей, и в каждой ему напишут - поебать на выебон с одной строкой, пишите фигурные скобки _всегда_, иначе багов в команде не оберетесь, и тогда он и познает дзен.
или же он подумает головой, и не станет
одна строка после иф без скобок явно говорит о простоте описываемой конструкции
if(arg == null) return; // зачем тут что-то еще?
скобки вызовут недоумение: кто-то хотел туда что-то дописать и забыл? кто-то оттуда что-то удалил, но забыл скобки? кто-то что-то криво намержил? кто-то начитался про "правильные" кодстайлы?
villy villy 07.05.201722:11 ответить ссылка -1.1
if(arg == null) {
//просто return, нихуя больше
return;
}
надеюсь, это сарказм?
villy villy 07.05.201722:26 ответить ссылка -0.6
ты слишком серьёзен для воскресного вечера
похоже на то...
villy villy 07.05.201722:42 ответить ссылка 0.0
Я б за условный выход из функции вообще б убивал )
А тем более однострочное условие, когда return не всегда и заметишь на первый взгляд.
Не надо убивать. Выглядит логично.
"Если вот такая маленькая фигня, return 0"
"Если ещё другая фигнюшка, return 1"
"Ну а когда вот такой поворот, return 2"
"Теперь все частные случаи перебрали и перейдём к самой сути"

Записывать результат в отдельную переменную, которая меняется внутри функции и возвращается в конце - запутывать читателя.
Создавать вложенность if(x) { return y; } else { весь остальной код } - тоже не очень.
Выглядит логично только для случая, когда метод состоит из 3-4 строк. Тогда да return уместен.
Но если говорить про методы - "фигня1,2,3, а теперь давай к сути", то метод не охватывается взглядом и можно не заметить return, который изменяет ход выполнения. Для таких случаев рулит принцип модульности "один вход, один выход".
"return" обычно подсвечивается как ключевое слово
Присваивание переменной-аккумулятору результата (своего рода return, только не return) - нет.
И от увеличения вложенности только глаза разбегаются. Только сворачивание кусков кода в IDE/редакторе может оправдать такой подход.
Вот внезапный return где-то в глубине блоков - это да, можно не заметить.
Но все эти неохватываемые взглядом методы наверно уже проще разбить на несколько штук.
Аргумент "подсвечивается в IDE" вот вообще не аргумент. Во-первых, всегда может оказаться, что правка сделана в окружении, где нет IDE. Во-вторых, даже выделенный другим цветом return может затерятся в ряде других выделеных ключевых слов в той же IDE.
А пригорание от множественных return у меня как раз от сопровождения кода с большими простынями методов. А отрефакторить такие методы не всегда удается по разным причинам от "мегасрочная правка" до "метод настолько охренительно сложно-связано-составлен и содержит статические зависимости, что разбить его без unit-тестов опасно, а покрыть тестами - невозможно".
В наше время за работу без IDE или умного редактора надо молоко давать и на пенсию раньше отпускать.
Ну тогда удачи и интересных проектов!
IDE умеет подсвечивать синтаксис уже не один десяток лет, а нелепые ошибки все еще встречаются. За практику повидал и ошибки из-за незамеченного ретурна и пропущенные break и присваивание вместо сравнения. А ведь все это в редакторах подсвечивается.
Так что и тебе удачи и не встречать всех этих багов! А, да, и не кодить в vim c чужой машины или телефона, потому что "срочнопиздецвсемухана".
И тем не менее вы не правы. В профессиональном программировании (Linux, Open Office, Oracle, любой крупный пакет ПО, исходный код которого мы видели) царствует подход - выходи из функции как можно раньше, пусть код будет как можно более ленивым!
В начале функции проверяются (по очереди, не вложенно), как можно больше условий, в которых можно тупо сделать return. А уже потом, ниже в теле функции пойдет смак реализации, какие-то вычисления.
Моя ошибка, я неверно акцентировал внимание в ответах.
В некоторых случаях множественный return уместен. И я пишу его там, где он уместен.
Но! Любое ветвление, цикл, или простихоспади рекурсия, усложняют код. Разумеется без условных операторов и циклов вменяемое и читабельное приложение не построить. Однако если есть возможность уменьшить нелинейность кода без ущерба читабельности, стоит это сделать.
Как по мне, на первом месте (после функциональности конечно) читабельность, второе - производительность. А уж потом все остальное.
Согласен, циклы больная тема, там стараются все по переменным развозить.
Баги копипасты, нечаянное использование глобальных переменных с тем же именем... C++ вообще троллит неоднозначными записями вроде x y(z); Зато какое облегчение, когда дело бага раскрыто.

Спасибо! Всем программистам удачи!
с чего такой ангст? в большинстве императивных языков это норма
и вообще не надо пытаться угадывать код, его надо читать. хотя бы раз прочитать, не понял - тогда это, возможно, говнокод. ну или ты просто устал. многие начинают ругать код едва взглянув. и вот прочитать код и не заметить аж целый ретурн, который даже цветом выделен - это как-то странно
villy villy 07.05.201722:33 ответить ссылка 0.0
Вообще заметить целую кучу ошибок - не проблема. Однако ж! А по сабжу, старина МакКоннел по поводу заметных ретурнов с тобой не согласен. Хоть он не настаивает на безусловном соблюдении принципа "один вход, один выход", но рекомендует.
Вы сами можете открыть гугл и прочитать первые 10 статей. Нет, не вызывают они у джуниоров и мидлов недоумение, они просто ставят вторую строку и ломают программу.
а чо мне те статьи? я сам знаю, что такие ошибки очень редки, одну мож за всю свою жизнь видел
и то тогда это был не недосмотр просто при написании, это был косяк при мерже
и ради этого надо писать более громоздкие конструкции? ну хз
я думаю, скорее нет
во все языки, где эти скобки опциональны, эту фичу продолжают добавлять из раза в раз, из языка в язык. и никто ее не выкинул, потому что она такая капец error-prone. значит она не такая уж и error-prone
villy villy 08.05.201714:30 ответить ссылка 0.0
Фича оставлена исключительно из обратной совместимости.
в новых языках типа цейлона и котлина даже в телах методов можно скобки опускать
тут уж никакой обратной совместимостью не пахнет
villy villy 08.05.201720:21 ответить ссылка 0.0
Во первых, следует вспомнить, что фича с if и скобками пришла из стандарта Ecma, на который до сих пор ориентируется большинство не lisp подобных языков. И фича переходит из языка в язык по инерции в угоду наследию.
Во вторых, фича с методами немного не про то. В JavaScript ES6 к примеру также можно опускать скобки:
const fn = some => Math.sin(some); // не только без скобок, но и return опускаем, ничего не обычного.
куда фича, пардон, пришла?
ecma это была тема по стандартизации js, до того был сам js, который испытал влияние явы, которая задолго до того позаимствовала почти весь синтаксис из сишки/плюсов, где эта фича испокон веков
я б вот совершенно не сказал, что какие-то современные языки испытывают влияние ecma, потому что там своего-то ничего не придумали
есть два больших полюса влияния - сишка и ml - и в обоих лишний синтаксический шум старались обязательным не делать
villy villy 08.05.201721:35 ответить ссылка 0.0
хуйню я сказал потому что. Конечно же Си -> C\C++, Java, C#, EcmaScript, фича пришла из Си, она существует в большинстве мейнстрим языков по наследию и никто в здравом уме не выключит ее.
нормальная же фича, чо ее трогать?
вот например наркоманскую кучу способов описывать типы сишки в D уже упорядочили и упростили, мешала. а эту не стали
я вот тож не считаю, что она в чем-то провинилась настолько, чтоб ее выпиливать
villy villy 08.05.201722:30 ответить ссылка 0.0
15 лет программирую - ни разу не видел, чтобы кто-то дописывал второй строчкой команду после if и не приписал фигурных скобок.
Есть проблема, проект старый, продается, работает не 1 комманда, рекомендации от мсдна я уже скидывал.
unkuse unkuse 08.05.201709:28 ответить ссылка 0.0
Code conventions для лохов, давайте изобретем свой метод!
„ " л.
Rokov Rokov 07.05.201719:50 ответить ссылка 4.6
Квадратные колёса - это атавизм IE.
Поржал от души. спс.
А почему нет варианта, когда в классе отсутствует модификатор доступа private? Ведь запись

class MyClass
{
int a;
public:
int b;
};

эквивалентна

class MyClass
{
private:
int a;
public:
int b;
};

Да и вообще есть несколько разных распространённых вариантов, которые не вошли в картинки.
Вариант "по умолчанию" иногда игнорит стандарты. Лучше указывать область действия всегда от слова необходимо.
О как, буду знать.
Рекомендую книгу С. Макконнелла "Совершенный код". Ты кончишь усовершенствуешься после прочтения.
Отвечу напрямую чтобы продолжить тред. Простите, разве стандарт C++ не гарантирует, что после ключевого слова class открывается _приватная_ область видимости?
Нужно знать правило.
После struct - по умолчанию public, после class - private.
Прошу прощения, увидел, что это компилятор иногда игнорит стандарты. С моей точки зрения - нахуй такой компилятор. еще Линус однажды, когда gcc новой версии не смог собрать написанный по стандарту код - сказал, ваш компилятор кусок говна.
По умолчанию всё приватно. Это логично. Но при описании разработчик может много переопределить. Для повторного использования важны публичные элементы, а не приватные. В этом тоже есть логика.
Для примера: бухгалтер имеет цель содержать счета в секрете, но для налоговой важен доступ к счетам. Примерно так.
еще про табы и пробелы не пошутили
villy villy 07.05.201719:52 ответить ссылка 1.0
На всех табов не напасёшься. Лучше пробелы.
nonnname nonnname 07.05.201719:58 ответить ссылка -0.2
вот и первый питонист :)
villy villy 07.05.201720:09 ответить ссылка 0.8
Суть в том, что табуляция - это, как правило, 8 пробелов. Поэтому код слишком быстро становится широким. В табуляции нет ничего плохого, но пробелы делают код компактнее.
nonnname nonnname 07.05.201720:23 ответить ссылка -0.3
сто лет не видел редактора, в котором бы не настраивалось
алсо широкие моники позволяют не думать о компактности вширь
villy villy 07.05.201720:30 ответить ссылка 0.4
Впихнуть бы тебя в серверный nano
они пообещали убить твою собаку, если ты воспользуешься нормальным софтом?
villy villy 07.05.201720:56 ответить ссылка 0.1
Они пообещали, что изнасилуют моей собакой всех, кто использует GUI на сервере. Собака в ахуе, ибо сука.
Иногда надо влезть в код, что-то там поправить и пересобрать бинарник. А у тебя ssh, машина с Виндой с одной стороны и терминальный сервер по без иксов с другой. Твои действия?
моя иде умеет по ssh :p
villy villy 07.05.201721:42 ответить ссылка 0.3
putty?
я аж чаем поперхнулся. нельзя же так внезапно
Чаем? Разраб не пьёт это пойло для бритов. Только кофе! И, желательно, молотый из зёрен!
что путти? новое условие, что у меня нет нихуя, кроме путти?
тогда я скажу, чтоб шли на хуй, мне нужны условия для работы ну или время себе их обеспечить
villy villy 07.05.201721:53 ответить ссылка 0.3
WinSCP?
он интересовался, какую ты ide используешь. а ты подъёба не понял
он будет насиловать машину для установки УРС.
вот кстати нагуглилось:
Edit your ~/.nanorc file (or create it) and add:
set tabsize 4
set tabstospaces
villy villy 07.05.201722:00 ответить ссылка 0.0
Это же так очевидно [сарказм].
know your tools! - как писали еще древние египтяне на стенах пирамид
villy villy 07.05.201722:12 ответить ссылка 0.6
а по мне так вполне очевидно. две этих опции - первое, что я проверяю в конфиге сразу после установки sublime text
Бесят пробелы. Открываю код - а там отступы в 2 пробела (а бывает даже в 1). А я привык к отступам в 4. А табы были бы той длины, на которую они настроены в редакторе.
Солгласен. Один пробел - мало. Два - нормально для визуального разграничения. Четыре - неплохо, но уже широко, ИМХО.
два мало
4 ничо, 8 на широком монике - еще лучше
поэтому и лучше не прибивать гвоздями пробелов, а юзать настраиваемые табы
villy villy 07.05.201720:40 ответить ссылка 0.0
Табы поедут в каком нибудь ненастроенном левом блокноте или онлайн редакторе.
так бери правый :)
villy villy 07.05.201720:57 ответить ссылка 0.1
Если у человека нет настраиваемого под кодинг редактора, то ему, скорее всего, нет нужды читать чей либо код.
Опять же, используемые только для отступов табы легко парой движений заменить на пробелы.
Речь просто о возможности открыть код в случайном редакторе для быстрого прочтения или демонстрации, на ПК, на котором возможно и компилятора то нет.
Примеры:
Доступ владельца сайта к исходному коду стилей в wordpress из админки, ага, попробуйте там пожить с табуляциями.
Онлайн репозитории, github, bitbucket, etc.
Табы поедут, если программист не понимает, когда нужны табы, а когда пробелы, например
табы int x = 1,
табы пробелы y = 2; // y строго под x для любого размера таба
Поэтому, легче использовать пробелы, чем учить всех программистов правильно использовать табы.
если программиста сложно научить использовать табы - его надо переработать на биогаз
villy villy 07.05.201722:21 ответить ссылка -0.6
Если программиста сложно научить использовать табы... Если программиста сложно научить писать машинный код... Если программиста сложно научить вставлять перемычки...

Проблема в удобстве и автоматизации. Работа с пробелами успешно автоматизирована. Жмём таб - добавляется N пробелов и т.д. С табами автоматика глючит и скорее всего заменит отбивку до нужной ширины пробелами на табы, из-за чего всё будет разъезжаться с другим размером табов.
Пробелы автоматизированы, с пробелами не надо думать над СУКА МАТЬ ИХ НЕВИДИМЫМИ СИМВОЛАМИ, и можно писать код.
Как будто программисту не о чем подумать, кроме о том, как правильно поставить в коде таб. Это просто отвлекает от сути. Так почему бы не убрать эту хрень и пересесть всем на пробелы?
> программист
> не надо думать
хм...
пойду-ка я проверю, работает ли мой биореактор
villy villy 07.05.201723:00 ответить ссылка 0.1
Не надо так строго с собой. Нужно продолжать жить.

Программисту надо думать над решением задачи. Человек не может всё удержать в голове. Если программист отвлекается на пробелы, он рискует упустить что-то важное.
Поэтому у нас подсветка синтаксиса, подсказки сигнатур функций, кнопка "автоформат" и т.д. Всё для того, чтобы программист не отвлекался на маловажную хрень, которая не связана с решением задачи.
о чем там думать-то? вы же, я подозреваю, чтоб сделать отступ, жмёте таб, а не пробелами отстукиваете, как машинистка
только настройка меняется
и оно вам явным образом ставит таб, всё просто и явно, что ткнул - то и получил. и это будет работать даже в самом убогом редакторе, который не знает про эти трансформации таба в пробелы, тупо ставит таб.
villy villy 08.05.201715:18 ответить ссылка 0.0
Думать о том, где таб, а где пробел, когда ситуация требует отступа, состоящего из N уровней вложенности и M знакомест (о чём было в оригинальном комментарии).
Но если исключить такие места из программы и не пытаться выравнивать столбцы, то табы станут простыми и понятными.
Настраиваемые табы - это эмуляция через пробелы. Так зачем платить больше?(с)
чтоб история гита не засирать переформатированием туда-сюда
villy villy 07.05.201721:09 ответить ссылка 0.4
Так вроде же Git рекомендует юзать один стиль. Неважно что. Важен стиль.
тогда, чтоб удовлетворить гит, у нас выбор: или каждый задаст себе размер табов, как хочет; или один мудак прибьёт всё пробелами, как ему нравится, а остальные будут терпеть - хм, что же выбрать?..
villy villy 07.05.201721:46 ответить ссылка 0.0
Если ты полез в код этого мудака, то будь любезен, не сри табами, где они нахрен не нужны.
спасибо, но ну на хуй, лучше красивый код, чем красивая история в гите, реформат - и алга.
ломать глаза об 1-2 пробела мне тож неохота, я тогда сильно менее продуктивен
villy villy 07.05.201722:17 ответить ссылка 0.0
за сахар? если компилятору все равно, то почему должны страдать люди?
компилятор и без пробелов и табуляции всё сжамкает причмокивая. но извращаться с "настраиваемым" табом бессмысленно, ибо всё полетит к херам в другом редакторе, что и было указано не только мною. а пробел - он и в Африке пробел.
2 пробела - самая распространенная практика в мире. Скорее твой tab в 4 пробела это что-то эксцентричное (хотя вполне норм в java, потому что там все зажрались на i7 и fullhd мониках кодить)
Сейчас многие зажрались. Для них и табы - норма.
Два пробела выдают человека, который собирается делать 10 вложенных скобок/блоков. Нахуй. Лучше такой код пусть станет нечитаемым из-за того, что уползет за край экрана.
но ведь word wrap.. ты им не пользуешься?
word-wrap при разборе кода? сразу вспоминаю работу nano в FreeBSD... только вышло предложение за строку и тут же hard-wrap. И похрен, что нужен soft-wrap.
Вы код в блокноте пишете? В той студии, где я работал, автопереноса строк не было, и мне даже странно слышать, что он кому-то из программистов нужен.
Это вроде как одно из первых требований к отображению кода - он должен отображаться всегда одинаково.
возможно я не так выразился или меня не так поняли.
использую sublime text, а под word wrap имелось в виду его поведение как в обычном блокноте
>мне даже странно слышать, что он кому-то из программистов нужен
большие sql-запросы должны быть видны на экране, а не убегать за его пределы. Их не всегда имеет смысл принудительно разбивать на строки энтером
Notepad++ (Notepadqq) - плохо?
Для чего-то сложнее html - да.
А как же CSS, PHP, JS, Shell?
Почему не всегда имеет смысл? Блочная структура кода важна для понимания того, что где происходит. Автоперенос, в том числе SQL, ломает восприятие логики.
Не говоря уж о том, что я работал с языком, где семантика кода в строку и кода с новой строки разная.
с каких это пор 2 пробела являются best practices? Всегда было 4 пробела. Табами уже никто и не пользуется, по большому счету. Весь опенсорсный код - 4 пробела. Как минимум это справедливо для Java, C, PHP.
Пробелы хуже табов тем, что их гораздо дольше корректировать, если нужно изменить отступ. Ну а преимущество пробелов - в стабильности. Поэтому, возможно, для опенсорсного кода есть смысл в пробелах, а вот в локальной команде я бы предпочел табуляцию.
blockan blockan 08.05.201712:35 ответить ссылка -0.2
Табы или пробелы - дело вкуса. В локальной команде, из проекта в проект, могут быть разные требования к оформлению кода. ИМХО, табы в коде излишние. Все, более менее адекватные, IDE умеют разруливать отступы в коде по настройкам, поэтому корректировка отступов не занимает какого-то дополнительного времени, а совместно с авто форматированием, так и вовсе позволяет не заморачиваться, что там у тебя, табы или пробелы.
Тебя бесят не пробелы, а мудаки, которые не умеют форматировать код в соответствии, хотя бы, стандартам языка. Привычка к отступам в 4 пробела - хорошая привычка, я свою команду дрессирую именно на 4 пробела и никаких табов, для этого пишутся соглашения по оформлению кода в команде. Для отступников - анальная кара.
а в этом есть какой-то смысл, кроме более частой "необходимости" применять анальные кары? ;)
villy villy 07.05.201723:44 ответить ссылка 0.0
Читаемость кода очень важна, без этого нормальную работу построить нельзя, там не только пробелы, там и наименования функций, классов, переменных, блочная структура кода, требования к документированию и так далее.
В частности, у меня в команде попался товарищ, у которого в редакторе не только стояло отображение табуляции в 6 символов вместо 4х по всех команде, но и автозамена табуляции на пробелы, из-за чего он просто стал портить весь код, который правил.
я исключительно про пробелы
чота все продолжают утверждать, что табы куда-то разъезжаются
чота у меня ничо никуда не разъезжается никогда
разве что эти люди пытаются юзать табы для чего-то кроме индентейшна - но это реально изврат :)
автозамена на пробелы - этот изврат придуман для любителей пробелов, это атавизм. жмакать таб удобнее, но нет, мы хотим пробелы, но не хотим их отстукивать!
были б у вас табы, чувак выставил бы длину таба хоть 6, хоть 7, и всё было бы норм у всех. на разных мониках, в разном софте - всё отлично настраивается
вот у меня, например, везде 4, кроме дифалки. в дифалке удобнее 8. потому что мне там важнее структуру видеть, чем чтоб в экран влезало.
villy villy 08.05.201714:46 ответить ссылка 0.1
сверху уже в комментах есть
Сколько же владык двоичного слова у реактора? Коха, Балабака... Есть ещё?
я мимокрокодил. к команде реактора отношения не имею
а вот Re-l вроде программист
Re-I вроде даже тян. Но это интернет - правды нет.
Владык чего?
"Вначале было слово. Всего два байта."...
Для этого в любом цивилизованном проекте и языке есть кодстайл и гайдлайны. Всё, что в рамках проекта/языка соответствует стандарту - правильно и хорошо, всё, что не соответствует, надо переформатировать (а у белых людей это делается автоматически через IDE)
Итого: такие шутки и вопросы возникают только у грязных кодообезьян, а судя по "правильному" положению фигурной скобки ещё и сидящих на игле мелкософта
Про Винни-Пуха не согласен... уж лучше str чем string, которая в std валяется.
В посте половину можно откинуть. Автор оригинала скорее всего хотел в сарказм.
стоит заметить, что кодстайл зависит от языка, в с++ вообще ёбаный ад с этим, всяк воротит как хочет, а в java только нубы не знают кодстайл (узачи и кривой домик), и то только до первых пиздюлей со стороны более опытных коллег. Даже есть спека oracle об этом
Только зарегистрированные и активированные пользователи могут добавлять комментарии.
Похожие темы

Похожие посты
л £ ЭФФЕКТИВНЫМ И СТАБИЛЬНО РАБОТАЮЩИЙ
КОД ^
подробнее»

программисты программирование

л £ ЭФФЕКТИВНЫМ И СТАБИЛЬНО РАБОТАЮЩИЙ КОД ^
Hi, im the new javascript
Welcome to our team! Ответь.
Оторви.
1
г
3
4
5
6 7
D~rmnri- Геоман Греф может говорить слово «Agile» 7 раз в секунду,
Стйв°Балмер может выкрики ват ь «Ье ve\opers!» Ираз в секунду.
£тив««нили наладить обмен информацией между собой, передавая 0н^^мСИп побитово: молчание означает е, а слово - 1;
и^Ем2п?ься реш
подробнее»

it профессиональный юмор программирование программист задачки

Ответь. Оторви. 1 г 3 4 5 6 7 D~rmnri- Геоман Греф может говорить слово «Agile» 7 раз в секунду, Стйв°Балмер может выкрики ват ь «Ье ve\opers!» Ираз в секунду. £тив««нили наладить обмен информацией между собой, передавая 0н^^мСИп побитово: молчание означает е, а слово - 1; и^Ем2п?ься реш
Люди делятся на 8 типов:
1)	++i;
2)	i++;
3)	i+=1;
4)	i=i+1;
5)	i:=i+1;
6)	inc(i);
7)	add eax, 1
8)	Что это?
подробнее»

программирование программист разработка it песочница

Люди делятся на 8 типов: 1) ++i; 2) i++; 3) i+=1; 4) i=i+1; 5) i:=i+1; 6) inc(i); 7) add eax, 1 8) Что это?