LINUX.ORG.RU

80 символов?


0

1

А что думают благородные доны про Великий и Вечный Стандарт Кодирования в 80 символов на строку?
Лично мне как-то не хватает. По крайней мере в перле. Приходится всякие вещи вроде $self->named_function->{named_key_from_function_result}->format($first_named_param, $second_named_param) либо разбивать на три строки, либо как в каменном веке именовать функции вместо get_all_operator_settings как g_all_os. Бесит и первое, и второе.
Вроде эпоха 17" мониторов давно кончилась, и я бы сказал, что стоит писать символов по 150 в строке.

Понял. Вопрос религиозный. Религия велит использовать 80 символов, делать в блоке не более 30 строк, не думать о действиях, думать о строках.

★★★★★

Последнее исправление: Xellos (всего исправлений: 1)
Ответ на: комментарий от tailgunner

А нормально кодировать - не вариант?

Как? Создавать лапшу из десятков переменных, каждая из которых будет использована ровно по два раза вместе с инициализацией?

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

А нормально кодировать - не вариант?

Как?

Для начала - не пытаться впихнуть в одну строку слишком много кода. Это просто неудобно читать, даже если сделать ширину строки 150 символов.

Создавать лапшу из десятков переменных, каждая из которых будет использована ровно по два раза вместе с инициализацией?

Что плохого в иммутабельной переменной, которая используется 2 раза? А если их у тебя будут десятки - попробуй писать функции поменьше.

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

Нечитаемая лапша получается. То одно действие на одной, максимум двух строках, а то одно действие на пяти строках. И таких пятистрок - десяток-два. Сам потом смотришь и не понимаешь, что написано.

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

впихнуть в одну строку слишком много кода

  my $mail = new Mail::POP3Client (USER => $mail_user, PASSWORD => $mail_password, HOST => $mail_host, TIMEOUT => $mail_timeout) or say $!;

Это много кода? Нет, можно, конечно

  my $mail = new Mail::POP3Client
             (USER => $mail_user, PASSWORD => $mail_password, HOST => $mail_host,
             TIMEOUT => $mail_timeout) or say $!;
но зачем, если на экране 130 букв влазит?

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

Первый вариант в мой браузер уже не влез и вообще выглядит как УГ, второй вариант поприятнее, если не обращать внимание, что это perl.

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

зачем, если на экране 130 букв влазит?

Зачем же, зачем и в обычных бумажных книгах - читать слишком длинные строки неудобно (и 130 букв - это слишком длинная строка).

P.S. кстати, у меня на экран влазит 230 букв. Как ты относишься к строкам такой длины? %)

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

P.S. кстати, у меня на экран влазит 230 букв. Как ты относишься к строкам такой длины? %)

У меня как раз всё бы влезало :)

Ты не ответил, как к этому относишься.

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

Конечно много. Надо писать

my $mail = new Mail::POP3Client ($u, $pw, , $tm);

Именованные параметры заставляют нас бессмысленно увеличивать длину строки!

А ещё лучше писать

my $mail = new Mail::POP3Client;
$mail->set_u($u);
$mail->set_pw($pw);
$mail->set_h($h);
$mail->set_tm($tm);
if (!$mail) {say $!;}
Xellos ★★★★★
() автор топика
Последнее исправление: Xellos (всего исправлений: 2)
Ответ на: комментарий от redgremlin

должно быть вот так

my $mail = new Mail::POP3Client (
                      USER     => $mail_user,
                      PASSWORD => $mail_password,
                      HOST     => $mail_host,
                      TIMEOUT  => $mail_timeout) or say $!;
А ещё правильнее не делать кучу переменных вида mail_~, а передавать это в дикте и его отдавать в POP3Client().

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

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

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

Если их не надо читать, пусть будут. Та, которая самая длинная на 223 — это заполнение урла из хеша, смысл её читать, пишется раз и до следующего кардинального изменения целевого сайта.

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

Если их не надо читать, пусть будут.

Если не надо читать, тогда конечно.

tailgunner ★★★★★
()
Ответ на: комментарий от redgremlin
  my $mail = new Mail::POP3Client
             ( USER => $mail_user
             , PASSWORD => $mail_password
             , HOST=> $mail_host
             , TIMEOUT => $mail_timeout
             ) or say $!;

Так выглядит действительно хорошо и читаемо. А то что ты предлагаешь годится только для write-only скриптов.

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

Больше беготни по коду вверх-вниз чтобы понять, что же делает функция!

Так нефиг большие функции писать.

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

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

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

Ещё нужно правильно выбирать модель данных приложения. Если все аргументы с $mail_ загонишь в объект (хэшик, например), то придётся передавать в POP3Client() всего один аргумент и заводить всего одну переменную вроде auth. Тогда вся эта сраная копипаста уложится в одну строчку меньше 80 символов.

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

должно быть вот так

Рука устанет скролл крутить, зато справа появится куча пустого места.

А ещё правильнее не делать кучу переменных вида mail_~, а передавать это в дикте

Это приведёт к ненужному загромождению кода в других местах.

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

Рука устанет скролл крутить, зато справа появится куча пустого места.

Мышковозилов чтоли? Есть ещё две таких сереньких кнопочки на клавиатуре, на них написан PgUp и PgDn, отлично заменяют скролл и рука от них не устаёт. А вопрос утилизации свободного места в топике уже несколько раз прояснили.

Если серьёзно, то ты придумываешь несуществующие проблемы в попытках защитить одностройчный гогнокод. Скроллить нужно всё равно и не обязательно делать это со сложностью O(N), позиционировать экран на начало ф-ии может тулза вроде ~ctags. Главное чтобы ф-я умешалась на экран.

Это приведёт к ненужному загромождению кода в других местах.

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

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

И во-вторых, избавление от копипасты в виде передачи мусора из $mail_~ между разными частями кода.

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

не делать их слишком большими

А 50 действий - это слишком большая функция?

Если все аргументы с $mail_ загонишь в объект

А в объект они загоняются волшебным образом, там нет строк, нет их длин...

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

Главное чтобы ф-я умешалась на экран

Так вот с этим начинаются проблемы, когда создание объекта растягивается на 8 строк.

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

Главное чтобы ф-я умешалась на экран.

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

а странные фантазии

Вот именно. Ты почему-то о коде судишь по одной строчке. $mail_user и $mail_host используются много где и вдруг мне надо везде заменить на $auth{USERNAME} и $auth{HOSTNAME} ради того, чтобы можно было сделать в одном месте %auth. И только ради того, чтобы не оскорблять религиозные чувства секты 80чиков, единственный аргумент которых «ДЕДЫ ЗАВЕЩАЛИ!!!111».

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

Ооок, чтоб функция умещалась на экран, надо каждую строчку разбить на несколько частей.

Ты всё понял неправильно. Разбить строчку на несколько частей нужно для того, чтобы было удобнее читать.

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

Разбить строчку на несколько частей нужно для того, чтобы было удобнее читать.

Чем

a
b
c
d
e
f
g
h
удобнее
abcdefgh
???

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

Тем, что на самом деле речь идёт о

aaaaaaaaaaaa
bbbbbbbbbb
ccccccccccccccc
ddddddddd
eeeeeeeeeeee
fff
gggggggggggggg
hhhhhhhhhhhhhhhhhhhh
вместо
aaaaaaaaaaaabbbbbbbbbbcccccccccccccccdddddddddeeeeeeeeeeee
fffgggggggggggggghhhhhhhhhhhhhhhhhhhh

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

Чтобы ответить на твой вопрос, нужны детали. Впрочем, в любом случае ты не должен спрашивать меня о том, что удобнее тебе. Ты просто должен знать, для чего разбиваются длинные строки.

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

А 50 действий - это слишком большая функция?

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

А в объект они загоняются волшебным образом, там нет строк, нет их длин...

У тебя уже есть место, где всё это загоняешь в трешняк из $mail_~, вместо этого когда будет иницилизация словаря. Кол-во строк тут остаётся примерно таким же. Не нужно так откровенно тупить.

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

Так вот с этим начинаются проблемы, когда создание объекта растягивается на 8 строк.

Но проблемы эти не от растягивания на 8 строк, а от неумения нормально структуировать код.

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

Ты просто должен знать, для чего разбиваются длинные строки.

1) Длинные строки разбиваются, чтоб их было легче читать.
2) Строка в 80 символов ни разу не длинная практически на любом доступном ныне устройстве для программирования и языке программирования. Более того, если исходить из концепции «тем лучше, чем больше на экране символов кода по отношению к свободному пространству», то 80 символов — очень неэффективное ограничение для большинства современных языков программирования.
3) Разбивать строку в 130 символов на пять строк ради «удобства» будет только очень ушибленный человек.

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

видимый размер ф-ии измеряется в строчках, а не действиях

О, то есть если функция переходит за 40 СТРОК, мне надо срочно начинать новую?

Слушайте, чем вас всех тут окуривали?

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

Если блок больше ~20-40 строчек, надо менять или язык, или программиста

И тут-то у Линуса Торвальдса очко-то и сжалось...

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

Более того, если исходить из концепции «тем лучше, чем больше на экране символов кода по отношению к свободному пространству»

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

Разбивать строку в 130 символов на пять строк ради «удобства» будет только очень ушибленный человек.

Твоя ошибка в том, что воспринимаешь текст на языке программирования как последовательность букв.

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

Если блок больше ~20-40 строчек, надо менять или язык, или программиста

И тут-то у Линуса Торвальдса очко-то и сжалось...

У Линуса Тролльвардса это в CodingStyle записано (и 80 колонок - тоже).

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

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

Забыл уточнить — свободное место это не пробельные символы. Это то, что правее кода до конца окна редактора/IDE.

Твоя ошибка в том, что воспринимаешь текст на языке программирования как последовательность букв

Нет, я воспринимаю текст, как последовательность предложений. И меня подкорабливает от
Каждый
охотник
желает
знать
где
сидит
фазан.

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

Ооок, чтоб функция умещалась на экран, надо каждую строчку разбить на несколько частей.

Это начальное данное, примерно как и строчки не должны быть длинными. Ограничения обусловленные особенностями восприятия информацией человеком. А как можно вложиться в эти ограничения вопрос следующий. Кроме «компактизации» кода в объёкты есть ещё и другие методы и приципы.

Вот именно. Ты почему-то о коде судишь по одной строчке. $mail_user и $mail_host используются много где и вдруг мне надо везде заменить на $auth{USERNAME} и $auth{HOSTNAME} ради того, чтобы можно было сделать в одном месте %auth.

И что тут такого? По символам это почти так же, как и твоё $mail_user, немного длиннее. Можно вообще отдельный объект заводить с аксессорами. Как именно хорошо делать в твоём случае зависит от много чего, в частности от ограничения ЯП.

И только ради того, чтобы не оскорблять религиозные чувства секты 80чиков, единственный аргумент которых «ДЕДЫ ЗАВЕЩАЛИ!!!111».

Это всё делается только ради одной цели - сделать гогнокод читабельным, об этом пишут с самого начала треда. Твоё дело хотеть этого или нет. Но и дело других разработчиков слать тебя на (~принимать на работу, платить болше $...) или нет. Разработка чаще процесс коллективный.

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

свободное место это не пробельные символы. Это то, что правее кода до конца окна редактора/IDE.

Лично у меня на 80 символах край редактора, а за ним - outline модуля.

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

А у меня всё в порядке с

Каждый охотник
желает знать
где сидит фазан.

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

Строка в 80 символов ни разу не длинная практически на любом доступном ныне устройстве для программирования

Путаешь проблему и следствие. Строка длинная (для человека) не зависимо от характеристик девайса на котором она отображается. Исторически древние девайсы подгоняли под некоторые стандарты «юзабили» из типографии, которые в свою очередь растут от простоты/сложности восприятия человеком.

Более того, если исходить из концепции «тем лучше, чем больше на экране символов кода по отношению к свободному пространству», то 80 символов — очень неэффективное ограничение для большинства современных языков программирования.

Это же полная чушь. Длинных строк даже у самых упоротых не бывает слишком много, коротких и совсем коротких (~ пунктуация ЯП, типа {} ) будет больше. Итого, если пересчитывать отношение для окна редактора, то 80 строк с очень большим отрывом выигрывает.

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

О, то есть если функция переходит за 40 СТРОК, мне надо срочно начинать новую?

Тебе лично хз что нужно, предлагал для начала что-нибудь почтитать. Но с такими заявлениями есть некоторые опасения

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

В ядре свои порядки, но думаю и там сильно длинных функций не так уж и много.

Это прописано в Linux kernel coding style:

Functions should be short and sweet, and do just one thing. They should fit on one or two screenfuls of text (the ISO/ANSI screen size is 80x24, as we all know), and do one thing and do that well.

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

Исторически древние девайсы подгоняли под некоторые стандарты «юзабили» из типографии, которые в свою очередь растут от простоты/сложности восприятия человеком.

Сказки матушки Гусыни. Никто никуда не подгонял, просто исторически сложилось сначала знакоместо 8х8 (в результате любой однобайтный шрифт занимал ровно 256*8=2k), а потом уж 80 символов в строке, с появлением CGA.

коротких и совсем коротких (~ пунктуация ЯП, типа {} )

Для пишущих

if ()
{
}
вместо
if () {
}
в аду есть отдельный, особо жаркий, котёл.

redgremlin ★★★★★
()
Последнее исправление: redgremlin (всего исправлений: 1)
Ответ на: комментарий от redgremlin

древние девайсы подгоняли под некоторые стандарты «юзабили» из типографии, которые в свою очередь растут от простоты/сложности восприятия человеком.

Сказки матушки Гусыни.

Вытащил из шкафа самую «широкую» книгу, посчитал буквы в наугад взятой строке - 82. «Случайно совпало» (ц)

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

Сказки матушки Гусыни. Никто никуда не подгонял, просто исторически сложилось сначала знакоместо 8х8 (в результате любой однобайтный шрифт занимал ровно 256*8=2k), а потом уж 80 символов в строке, с появлением CGA.

ой. Снова путаешь причины и следствия.

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

кстати, у меня на экран влазит 230 букв. Как ты относишься к строкам такой длины? %)

Считаю, что ограничение надо удвоить до 460. А то как-то не по-хакерски получится - всякое ламьё сможет прочесть этот великий не-днище-нский код :)

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

Больше беготни по говнокоду вверх-вниз чтобы понять, что же делает функция!

fixed

по _коду_ бегать, чтобы понять, не надо. потому что функция «влезает» в один экран.

Учись кодировать под музыку MC Connell !

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

Coding style is very personal, and I won't _force_ my views on anybody

Please at least consider the points made here.

unless exceeding 80 columns significantly increases readability and does not hide information

it's OK to have a longer function.

aedeph_ ★★
()
Последнее исправление: aedeph_ (всего исправлений: 1)
Ответ на: комментарий от Xellos

Ладно еще +1 камент...

Так вот с этим начинаются проблемы, когда создание объекта растягивается на 8 строк.

Перловка ж поддерживает ООП стиль - реализуй для объектов со сложным конструированием паттерн Builder там какой? ...И снова влезешь в 1 экран и 80 символов :)

Все проблемы от отсутствия подготовки к инженерному подходу в программировании :)

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

Слушайте, чем вас всех тут окуривали?

«Если все кругом - говно, может быть, проблема в тебе?» (с)

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

Chapter 2: Breaking long lines and strings

Coding style is all about readability and maintainability using commonly available tools.

The limit on the length of lines is 80 columns and this is a strongly preferred limit.

Statements longer than 80 columns will be broken into sensible chunks, unless exceeding 80 columns significantly increases readability and does not hide information. Descendants are always substantially shorter than the parent and are placed substantially to the right. The same applies to function headers with a long argument list. However, never break user-visible strings such as printk messages, because that breaks the ability to grep for them.

Угадай откуда эта цитата

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

а потом уж 80 символов в строке, с появлением CGA.

ВНЕЗАПНО: 80 символов намного древнее CGA. И фонты тут не при чём. 80 символов были ещё на чёрно-зелёных мониторах в 70х года прошлого века в Этой Стране, ещё задолго до твоей CGA(что было в те годы гламуром и понтом, точнее уже в 80х).

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

в аду есть отдельный, особо жаркий, котёл.

я срал на твой ад. Всегда так писал и так и буду писать впредь.

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

Си головного мозга. Сам такой, но в перле так делать нельзя.

не льсти себе. Это пхп. Ну или бэйсик, если ты старый(мудак).

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

в аду есть отдельный, особо жаркий, котёл.

Сам-то на рай рассчитываешь, за все земные страдания, любитель перловых портяночек с длинными строками?

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

Тебе, гляжу, припекать ещё при жизни начало :) Ничего¸ зато будешь готов заранее.

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