?

Log in

No account? Create an account

Пт, 24 июл, 2009, 15:53
Типографика в программировании

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

Периодически встречаются такие вот пёрлы:

  select distinct first_value(p1.calendar_period_close_date) over (order by akh1.last_update_date)
     from fa_asset_keywords ak1
     , xx_cfa010_asset_key_history akh1
     , fa_deprn_periods p1
 WHERE 1=1
         and akh1.asset_id = akh.asset_id
         and p1.book_type_code = p_book_type_code
     and akh1.last_update_date>akh.last_update_date
     AND akh1.asset_key_ccid = ak1.code_combination_id
         and akh1.last_update_date between p1.calendar_period_open_date and p1.calendar_period_close_date
         and akh1.last_update_date <= d_end
         and ak1.segment3 = 15

Первое, что я делаю — привожу всё в пристойный вид, причём ручками, без всяких форматтеров:

select distinct first_value(p1.calendar_period_close_date) over (order by akh1.last_update_date)
  from fa_asset_keywords ak1
     , xx_cfa010_asset_key_history akh1
     , fa_deprn_periods p1
 where 1 = 1
   and akh1.asset_id = akh.asset_id
   and p1.book_type_code = p_book_type_code
   and akh1.last_update_date > akh.last_update_date
   and akh1.asset_key_ccid = ak1.code_combination_id
   and akh1.last_update_date between p1.calendar_period_open_date and p1.calendar_period_close_date
   and akh1.last_update_date <= d_end
   and ak1.segment3 = 15

И только потом! Только потом переписываю всё заново.

Пт, 24 июл, 2009 14:55 (UTC)
pigdeon

Лишь один вопрос возникает после ознакомления с описанным поведением автора: соответствует ли оно определению термина "извращение" в-точности или же только частично.
Нисколько не преуменьшая важность гармоничного отступа, кернинга и интерлиньяжа, я считаю все же предосудительным начинать строку с пунктуационного символа и несколько неудобным - отстутствие выдыления ключевых слов средствами редактора или типографики (напр. заглавыными буквами), особенно есди язык их допускает.

Пн, 27 июл, 2009 10:05 (UTC)
egorius

В точности, в точности.
С выделением ключевых слов справляется и хайлайтинг, а запятая слева мне кажется немного более удобной, чем справа, но все это уже из области личных предпочтений. Я охотно принял бы иной стиль — если бы он тут был.

Сб, 25 июл, 2009 06:43 (UTC)
hardsign

надо заметить, что "приведённый" вариант по читаемости не намного лучше исходного, а то и совсем_не...

Пн, 27 июл, 2009 10:07 (UTC)
egorius

Критикуя — предлагай!
Имхо для читаемости здесь надо изменить порядок условий, но это все-таки уже не типографика.

P.S. Кстати, с праздничком™ тебя!

Пн, 27 июл, 2009 16:25 (UTC)
hardsign

select distinct 
  first_value(p1.calendar_period_close_date) over (order by akh1.last_update_date)
from 
  fa_asset_keywords ak1,
  xx_cfa010_asset_key_history akh1,
  fa_deprn_periods p1
where 1 = 1
  and akh1.asset_id = akh.asset_id
  and p1.book_type_code = p_book_type_code
  and akh1.last_update_date > akh.last_update_date
  and akh1.asset_key_ccid = ak1.code_combination_id
  and akh1.last_update_date between 
   p1.calendar_period_open_date and p1.calendar_period_close_date
  and akh1.last_update_date <= d_end
  and ak1.segment3 = 15


Как-то вот такъ примерно :)

P.S. Спасибо :)

Пн, 27 июл, 2009 18:30 (UTC)
egorius

Ну да, можно еще полчасика поспорить, как лучше, так:

  and akh1.last_update_date between
 p1.calendar_period_open_date and p1.calendar_period_close_date

или так:

  and akh1.last_update_date between p1.calendar_period_open_date
                                and p1.calendar_period_close_date

но факт остается фактом: наличие последовательно проводимой в жизнь типографической системы упрощает восприятие :-Ъ

Вс, 26 июл, 2009 19:37 (UTC)
c_piper

у нас традиционно пишут управляющие слова большими буквами; также AND не в начале строки, а в конце, чтобы было видно, что предложение не закончилось на етой строке, а продолжается на следующей (то же самое и с запятыми).

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

Пн, 27 июл, 2009 10:17 (UTC)
egorius

Положение запятых и ANDов, прописные или строчные буквы использовать, величина отступов — дело привычки, вкуса, стиля и т. п. Вопрос в том, имеют ли право на существование в одном запросе and и AND, да еще и с разными отступами?
А с пустым местом тоже все не так однозначно... Скажем, этот кусочек кода — часть запроса длиной в 200 строк с подзапросами внутри подзапросов, и как в таком случае обойтись без больших отступов?

Ср, 9 сент, 2009 09:32 (UTC)
(Anonymous)

А форматтеры чем не угодили? Их только настроить лень. Зато потом...

Костя

Пн, 14 сент, 2009 14:00 (UTC)
egorius

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

Чт, 24 дек, 2009 22:16 (UTC)
konung2000

В защиту запятых в начале: сам раньше ставил их в конце. Но как же удобно отлаживать запрос расставляя строчные комментарии, если запятые в начале

Пт, 25 дек, 2009 11:03 (UTC)
egorius

Именно, именно.