LINUX.ORG.RU

Оформления кода.

 


0

1

Смотрел разные примеры и мне безумно понравилось такое оформления кода

int
main()
{
    double a = 10.5;
    if (expr) {
        // ...
    }
    return 0;
}

Как видно при объявлении функции возвращаемый тип и имя пишем в двух строках. Функции начинается с фигурной скобки с новой строки. При написании конструкций типа if, switch, for и других бы не переносим фигурную скобку на новую строку.

Шаблонные функции пишем так:

template<typename T>
int func(T a)
{
    // ...
}

Но если мы пишем большую конструкцию if, то оформляем ее так:

if (a == true
  && b == false)
{
    // ...
}

Как видно фигурная скобка уже с новой строки.

Как вам такая практика?

P.S смотрел github.com/nginx/


Используй разметку, пожалуйста. В частности тег 'code'.

p.s. Очень хочется в толксы?

jollheef ★★★★★ ()

щкворец наращиваешь?

А я вот так пишу:

void next_LED_in_effects(){
	if(!current_effect) return;
	set_LEDs(current_effect[effect_cntr]);
	if(effect_cntr == 0 && effect_increment == -1){ // left border - go to the right
		effect_increment = 1;
	}
	effect_cntr += effect_increment;
	if(current_effect[effect_cntr] == 0){ // right border - go to the left
		effect_increment = -1;
		effect_cntr -= 2; // and go to left from previous element
	}
}

И все никак не перейду с табов на пробелы (хотя уже и нарывался пару раз на текстовый редактор с неправильно настроенными табами).

Eddy_Em ☆☆☆☆☆ ()

Язабан

Бесполезный тред, бесполезный комментарий, все сходится.

HerrWeigel ★★★★ ()

C++

auto main () -> int {
  // ... 
}
Kuzy ★★ ()
Ответ на: Язабан от HerrWeigel

да ладно вам. тема закрыта.

xensk ()
Ответ на: комментарий от Eddy_Em
void next_LED_in_effects()
{
    if(!current_effect)
        return;

    set_LEDs(current_effect[effect_cntr]);
    if(effect_cntr == 0 && effect_increment == -1) // left border - go to the right
        effect_increment = 1;
	
    effect_cntr += effect_increment;
    if(current_effect[effect_cntr] == 0) { // right border - go to the left
        effect_increment = -1;
        effect_cntr -= 2; // and go to left from previous element
    }
}
PreciousProtection ()
Ответ на: комментарий от PreciousProtection

да, нормальная подсветка решает

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

не вижу ничего хорошего в лишних открывающих скобках. Ну а ты, раз уж стиль выбрал, то и доделывай: чего в куске

if(current_effect[effect_cntr] == 0)
{ // right border - go to the left
    effect_increment = -1;
скобку тоже не перенес?

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

Какая подсветка? Я еще давно Макса просил прикрутить подсветочку (выделение жирным и курсивом), но фиг.

Eddy_Em ☆☆☆☆☆ ()

такое оформления кода

Если испытываешь трудности с окончаниями, то попробуй проговаривать предложение перед записью. Этот метод даёт очень хорошие результаты даже при использовании детьми с задержкой в развитии. И не ври, что это опечатка — я вижу заголовок. И это вижу: «Функции начинается».

Как вам такая практика?

Нет разницы в стилях. Нравится? Удобно? Глаза на лоб не лезут? Используй.
Я, например, столкнувшись с таким кодом, долго бы плевался и матерился.

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

тема закрыта

Нет уж, дорогой! Пока тебя как минимум на пяти страницах не просклоняют на все лады, ничего не выйдет!

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от Eddy_Em

И все никак не перейду с табов на пробелы

Тыж вроде на geany, настроил бы уже ::)

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

Дык, я использую: geany, mcedit, medit и gedit (в генте, к сожалению, почему-то medit не собирается, приходится говеный gedit собирать). Дофига настраивать. Да и еще на всех ~5-7 машинах, где приходится код править...

А мелкие фигнюшки для ЛОРа иной раз вообще методом cat > test.c набиваю...

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от xensk

тема закрыта.

Лел. Кулак штоле, тему зажимать?

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

Потому что скобки переносятся только при оглашении функций, классов.

Внутри функций для if/else, switch - скобки не переносятся.

PreciousProtection ()
Ответ на: комментарий от Eddy_Em

[code=cpp]. Увы, работает только с JS, ибо не осилили сделать хайлайт на серверсайде.

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

Да при чем здесь жабоскрипт? Эта ссаная "подсветка" просто изменяет цвет шрифта, чего я, естественно, не вижу, т.к. у меня вырвиглазные ублюдочные цвета отключены. Я вообще не понимаю, как можно читать что-то, отличное от черных букв на сером фоне? У меня и в текстовых редакторах так... Разве что в текстовых редакторах код подсвечивается цветом, но там это допустимо. А в браузере, к сожалению, я не могу выборочно сделать, чтобы код подсвечивался, а текст был всегда только черным на сером фоне.

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от Eddy_Em

О как, оказывается:

<span class="keyword">void</span>
можно запендюрить подсветку кода в stylish!

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от Eddy_Em

Про medit не знал, спасибо.

Да и еще на всех ~5-7 машинах, где приходится код править...

Вот поэтому мне и пришлось с vim подружится на базовом уровне.

Dron ★★★★★ ()

Как вам такая практика?

Лично мне совсем не нравится. Когда вижу такое, глаза болеть начинают и мысленно приходится переключаться. Сам пишу вот так:

int main () {
    return 0;
}

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

vim для слабаков. ed Единственный Доксографа инструмент.

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

а попробуй немного добавить красного и синего к серому (конечно, сильно зависит от монитора).

у меня сейчас #fcf2ea (не помню, откуда это взялось), ещё неплохой вариант — #fffff3 , как у Тафти.

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

тебе осталось осознать, что код уже давно не на перфокартах, и можно несколько элементарных операций размещать на одной строке.

после чего сократить имена идентификаторов — и вот ты уже на пути к нормальному стилю программирования!

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

А потом вспоминать, какого хрена обозначают a,b,c,d,e,f,g,h? Так красивше, да и читается намного проще.

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от Eddy_Em

конкретно в приведенном тобой коде три переменные, из которых одна явно лишняя.

никто же не предлагает их обозначать по порядку буквами алфавита.

что тут может быть «красивше», если ничего не делающая функция занимает у меня половину экрана?

кстати, почему все переменные глобальные? они используются где-то еще? и почему nextled может быть вызван до инициализации effects?

(это я не в порядке code review спрашиваю, а чтобы понять, как я оформил бы эту функцию).

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

Не вижу там ни одной лишней переменной.

И что значит "ничего не делающая"? Эта функция в соответствии с текущим "эффектом" зажигает/гасит очередную порцию светодиодов.

почему все переменные глобальные?

Потому что это микроконтроллер.

и почему nextled может быть вызван до инициализации effects?

Не может. Эта функция вызывается только если проинициализированы переменные. Ну, проверка if(!current_effect) return; — явно лишняя, это у меня осталось еще с отладки.

Объясняю далее по строкам:
set_LEDs(current_effect[effect_cntr]); — активировать очередную порцию светодиодов (сами диоды зажигаются при помощи двоично-десятичного дешифратора по таймеру со скоростью около 1кГц, что создает кажущийся эффект одновременного свечения нескольких светодиодов), аргумент функции — 8-битное (светодиодов пока всего 6, если надо будет сделать больше восьми, сделаю 16-битное) целое, у которого бит == 1 — светодиод горит, == 0 — светодиод не горит.
if(effect_cntr == 0 && effect_increment == -1){ — effect_increment равен либо +1, либо -1 (смотря в какую сторону в данный момент мы по массиву двигаемся). Соответственно, это — проверка на достижение левой границы при движении влево. А раз так, то надо менять направление движения на противоположное:
effect_increment = 1;
effect_cntr += effect_increment; — изменяем индекс массива в соответствии с текущим направлением движения.
if(current_effect[effect_cntr] == 0){  — проверяем на достижение правой границы. Чтобы не хранить счетчик с длиной каждого "эффекта" отдельно, я просто завершаю массив нулем. Ну, а если в "эффекте" нужно все светодиоды погасить, использую несуществующее число (скажем, 64 для случая шести светодиодов — если диодов будет 16, придется изголяться по-другому). Итак, если правая граница достигнута, то мы:
effect_increment = -1; — меняем направление движения и
effect_cntr -= 2; — "откатываемся" назад (т.к. иначе будет дважды повторен последний элемент.

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от PreciousProtection

Боже мой! У вас if без операторных скобок. Нет, я конечно знаю что там оно будет именно так, как задумывалось, но блин, это же как ходить на работу без трусов.

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

А я вот так пишу

нет, всё-таки слепленные вместе закрывающие скобки параметров функции и открытие области видимости уязвляют моё перфекционистское отношение к коду. а табы - это правильно. пробелы некошерны. проблемы отдельных кривых редакторов - это проблемы отдельных кривых редакторов. в коде не должно быть лишних символов.

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

Iron_Bug ★★★★ ()
Ответ на: комментарий от Eddy_Em
void next_LED_in_effects()
{
    if (!current_effect) {
        return;
    }

    set_LEDs(current_effect[effect_cntr]);

    if (effect_cntr == 0 && effect_increment == -1) { 
        effect_increment = 1; // Left border - go to the right
    }

    effect_cntr += effect_increment;

    if (current_effect[effect_cntr] == 0) { 
        effect_increment = -1; // Right border - go to the left
        effect_cntr -= 2; // And go to left from previous element
    }
}
EXL ★★★★★ ()
Ответ на: комментарий от EXL

Слишком много пустого пространства. Бессмысленно. Это во что же весь код превратится?

И ты тоже делаешь непонятную фигню: почему у функции скобочка на отдельной странице, а у if — нет?

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от Iron_Bug

нет, всё-таки слепленные вместе закрывающие скобки параметров функции и открытие области видимости уязвляют моё перфекционистское отношение к коду.

А по-моему, нормально:

/**
 * read value from AD7794
 * @param doubleconv == 1 for double conversion with current sources switching
 * @return readed value or 0 in case of error
 */
uint32_t readADC_value(uint8_t doubleconv){
	uint32_t val0, val1;
	uint8_t mul2 = 1;
	if(doubleconv)
		if(!ADC_direct()) return 0;
	DBG(&#34;READ: A_direct = &#34;);
	if( !(val0 = read_AD7794(0)) ){
		DBG(&#34; err\r\n&#34;);
		return 0;
	}
	#ifdef EBUG
		print_int(val0, usb_send);
	#endif
	if(doubleconv) do{ // double conversion
		DBG(&#34;, A_reverse = &#34;);
		if(!ADC_reverse()) break;
		if( !(val1 = read_AD7794(0)) ) break;
		#ifdef EBUG
			print_int(val1, usb_send);
		#endif
		mul2 = 0;
		val0 += val1;
	}while(0);
	#ifdef EBUG
		newline(usb_send);
	#endif
	if(mul2) val0 <<= 1; // multiply by two if there's no reverse value
	return val0;
}
Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от Eddy_Em

Вот же япона мать! Только обрадовался, что подсветку кода через CSS сделал, как обнаружился очередной баг моего юзверстиля: если указывать тип подсветки, автозамена кавычек на кавычки внутри тега [code] не отменяется ☹

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от Eddy_Em

Слишком много пустого пространства. Бессмысленно. Это во что же весь код превратится?

а тебе его что, жалко? чай, мониторы сейчас не 40 строчек.

код должен быть читабельным. это всё. и не надо лепить всё в одну строку и в одну функцию.

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

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

И все никак не перейду с табов на пробелы
с табов на пробелы
на пробелы

и ты, Брут :'-(

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

в генте, к сожалению, почему-то medit не собирается

^_^@phantom ~ # eix medit
Совпадений не найдено.

С этого места поподробнее, я записываю :-). Если конечно medit - это не gedit из MATE

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

medit — это клон gedit на GTK2 с плюшками (т.к. gedit вообще скатился). Еще его называют muedit. Но он почему-то не собирается нифига.

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от Pinkbyte

Вот такая вот задница:

python ../tools/glade2c.py mooedit/glade/mooeditprefs-filters.glade > mooedit/mooeditprefs-filters-gxml.h.tmp && mv mooedit/mooeditprefs-filters-gxml.h.tmp mooedit/mooeditprefs-filters-gxml.h
  File "../tools/glade2c.py", line 320
    print "Usage: %s [--map=id,ClassName,CLASS_TYPE...] [--output=outfile] FILE" % (sys.argv[0],)
                                                                               ^
SyntaxError: invalid syntax

Больше ни одного гуевого вменяемого редактора не осталось!

А насчет пробелов — просто у меня в подавляющем большинстве случаев при копировании моих кусков кода с табами куда-нибудь в веб (хоть сюда же, в оформлении [code]), форматирование обычно ломается. А с пробелами — нет.

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от Eddy_Em

просто у меня в подавляющем большинстве случаев при копировании моих кусков кода с табами куда-нибудь в веб форматирование обычно ломается

wgetpaste, не?

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

Чем собираешь, если в portage его нет - руками? Ошибка на print это обычно завихрения третьего питона. У тебя он небось дефолтным интепретатором в eselect python стоит?

Pinkbyte ★★★★★ ()
Последнее исправление: Pinkbyte (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.