LINUX.ORG.RU

и всё-таки о закрывающих скобках

 


0

2

Ну никак не могу решить:

если а == 3 то
  ура();
кн
или
если а == 3 то
  ура();
кн_если
или
если а == 3 то
  ура();
кн//если а == 3
Ситуация троякоострая - у каждого варианта есть существенные достоинства и существенные недостатки. В третьем случае здесь не простой комментарий, а «говорящий», который является частью синтаксиса. При несоответствии между началом и концом компилятор обругается.

Если везде писать только кн, то код будет лёгким, но легко будет и запутаться при глубокой вложенности. Самое плохое - будет затруднена диагностика компилятором ошибок структуры. Будет легко испортить структуру, поместив else не туда и внеся логическую ошибку.

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

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

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

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

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

Полиглоты, ваши мнения?

Может быть, наложить ограничения на сложность? Типа при определённом расстоянии в строках между элементами конструкции и при определённой вложенности делать рекомендованным полный вариант и выдавать предупреждение?

★★★★★

Ответ на: комментарий от PolarFox

Писать xml руками — сомнительное удовольствие для людей, вкусы которых очень специфичны.

А что они используют?

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

скоро страна снова окажется под железным занавесом, и тогда, кто знает?

И что тогда? Вы с Дениской с колен её будете поднимать? Да вам щас гуголь с гитхабом отключи, так вы обосретесь моментально.

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

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

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

Off-topic

Да вам щас гуголь с гитхабом отключи, так вы обосретесь моментально.

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

Я тебе больше скажу, вас, унылых пограмистов, при таком раскладе тут же выкинут на мороз за полной ненадобностью.

Пфф... пойду работать на завод, делов-то :)

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

Я использую xmledit.vim ftplugin. Заголовок ложу в BufNewFile в спец. конфигу для работы с XML. Получается конечно не мега-быстро, но с учетом авто-дополнения и уже пары написанных структур, получается довольно шустро

<art [Tab] -> 
<article>
    //+ сразу перенос и autoindent, если настроили
</article>
...

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

На какой завод, дебилушка? Ты вообще что умеешь, кроме как пиздеть о паттернах?

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

Off-topic
Умею выявлять ко-ко-кокающих оппонентов, что является важнейшим навыком в современных реалиях жесткой конкуренции.

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

Петушиную лексику оставь для параши, выродок.

anonymous
()

; давно уже все делаю опциональными. 3 вариант — дно, так как помял условие, меняешь в двух (2) местах. Very DRY.

2 вариант - изнасилование. Нормальные люди не страдают от вложенности. // Или используют редакторы умеющие в подсветку/показ симметричного блока

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

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

кн/*осень*/
или
кн/*функция осень*/
Склоняюсь ко второму варианту.

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

Я привел не OCaml, если что, а пример, основаный на паттерн-матчинге в OCaml'е. И вообще паттерн матчинг куда элегантнее конструкции if-elseif-else.

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

Ты в XML копию атрибутов в закрывающем теге перечисляешь? Норкоман дофига?

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

паттерн матчинг куда элегантнее конструкции if-elseif-else

А ничего, что паттерн матчинг вообще для другого, и с if-else они не взаимозаменяемы? Сколько же тут звездатых ламерюг пасется, ужас.

anonymous
()

Читаешь эту тему и начинаешь понимать людей, которым нравится PHP.

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

В этот момент лучше заморозить, какая закрывающая скобка относится к какой открывающей.

Для этого в редакторе есть свёртка (folding).

Бывает ещё, что исходник печатается на бумаге.

В этом случае можно как в Think Pascal допечатывать нужные комментарии автоматически. Типа в программе

if a = b then
begin 
  if x > 1 then
  begin
    ....
  end;
  ...
end; 

а на печати

if a = b then
begin 
  if x > 1 then
  begin
    ....
  end; // if a = b
  ...
end; // if x > 1

monk ★★★★★
()

Первый вариант. В IDE должна быть галочка, включающее показывание кн как второй или третий вариант.

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

xml для того, что бы его писали машины, а читали люди. Не наоборот.

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

//а вдруг?

это обязано быть экзепшном

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

можно как в Think Pascal допечатывать нужные комментарии автоматически

1. Неясно, что здесь делать с иначеесли ... иначе ...

2. Иногда эти комментарии нужны и на экране.

Итог темы:

https://bitbucket.org/budden/yar/src/default/doc/описание-языка/чередование-с...

Ставлю галку.

К сожалению, на этом вопрос синтаксиса не закрыт, потому что всплыл вопрос с точкой запятой и плохими смайликами, которые она образует.

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

переключение между языками на каждом слове

CapsLock

1. недостаточно хорошее переключение, когда языков > 2.

2. не проходит сквозь rdp(привет жертвам виндовых сетей).

3. subj геморроен даже с почти идеальными однокнопочными включателями.

не надо изобретать новый язык

offtopiс

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

Ставлю галку.

язык не умер? проблема не решена, отжимай обратно.

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

Или 'нуаесли', что бы не было слов, отличающихся одной буквой.

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

На практике бывает полезно. Для больших и сложных функций. Иногда. Даже, я бы сказал, изредка.

den73 ★★★★★
() автор топика
Ответ на: переключение между языками на каждом слове от DonkeyHot

1. недостаточно хорошее переключение, когда языков > 2.

Увы. Но тут уж, как ни цинично, проблемы негров шерифа не волнуют. И наоборот ;)

2. не проходит сквозь rdp(привет жертвам виндовых сетей).

Тут два момента

1. Как уже говорил, в винде переключение через puntoswitcher. Наверняка есть и другие решения. Также никто не мешает пользоваться любой комбинацией, какая назначена на удалённом компе

2. Тонкие клиенты всё ещё редкость, и по rdp постоянно работать и тем более программировать мало кому требуется.

3. subj геморроен даже с почти идеальными однокнопочными включателями.

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

В любом случае, у меня на домашних машинах и рабочем месте переключение по капсу.

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