Пробелы VS табы 4. Смерть всем


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

    Зачем в коде нужны табы?

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

    Не мы ли дискутируем насчёт того, как надо устроить очередную MVC, mVC, MVc и прочие вариации данной трёхбуквенной архитектуры. Иногда даже smartModel получается. Иногда даже пытаемся GoF читать. Не мы ли ратуем за вынос оформления из html в css? Так какого чёрта мы смешиваем логику и представление в куске текста и называем это исходным кодом?

    Когда мы пишем код мы используем лексеммы, зачем-то сохраняя их в виде текста, а потом парсим их назад. Автокомплит, что он делает? Он подставляет нам лексеммы. Ещё раз. Мы пишем лексеммы, компилятор читает лексеммы. Текст тут зачем? Затем, что просто мы так привыкли. Я думаю, что текст как носитель исходного кода должен умереть как перфокарты (я кстати их в работе не застал, только писал(ручкой шариковой писал) на них контрольные по информатике в школе, т.к. в местном университете остались тонны неиспользованных перфокарт). Подробнее про фортран и перфокарты можно почитать тут. Мы же пережили это? И текст переживём.

    Почему нужно перестать использовать текст?


    Потому, что он несёт в себе и логику и оформление одновременно. А должен нести только логику. Представьте как было бы хорошо, если бы в исходном коде(неком бинарном формате) содержалось бы описание логики в виде лексемм. А наша IDE имела бы настройки того, как мы хотим этот код видеть. Хотим египетские скобки, используем египетские, не хотим — не используем, это лишь представление, и хранить в файле с кодом его не нужно. Кто-то ставит фигурные скобки поле if если там одна операция, а кто-то нет. Это тоже представление, с точки зрения компилятора данные конструкции равнозначны. А вот с точки зрения программиста нет, поэтому их нужно разделить. Почему цветовое оформление кода мы можем себе позволить хранить у себя и не распространять с текстом, а табуляцию должны.

    Кто-то так уже делал? Конечно.


    В топик врывается он:
    Realaxy ActionScript Editor. На хабре можно почитать тут. Официальный сайт тут. Разработчики сделали шедевр. Правда, пока я его не купил из-за одной маленькой проблемы: стиль скобок там только египетсткий. Я излазил все настройки во время пробного периода, но так и не нашёл, где это настраивается. Как только это заработает, я куплю его, в тот же день. Они двигаются именно в ту сторону о которой я говорю. Код — не текст, а его представление задаётся редактором. До кучи это редактор моего любимого языка.

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

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

    Место для кода в виде текста в музее, рядом с перфокартами.

    P.S. Я ждал подобного поста от разработчиков Realaxy, но так и не дождался, ведь это самое время заявить о плюсах нового подхода. Да, мне безумно нравится ActionScript 3 и этот шикарный жёлтый смайлик в шлеме, и я ненавижу египетские скобки.

    Фото музейного экспоната опубликовано под CC-BY-SA, автор Johnathan Nightingale.

    Средняя зарплата в IT

    110 500 ₽/мес.
    Средняя зарплата по всем IT-специализациям на основании 7 138 анкет, за 2-ое пол. 2020 года Узнать свою зарплату
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 54

      +8
      Не могу согласится вот с этим утверждением «Потому, что код несёт в себе и логику и оформление одновременно. А должен нести только логику.» Скомпилированный код для процессора несет только логику. Т.к. отвечает на вопрос «Что делать [процессору]?»

      А программный код несет гораздо больше информации. И минимум отвечает еще на два вопроса: «Зачем?» и «Почему?». Правильные названия функций, переменных, скобки, коментарии в важных местах… Каждый раз когда программист читает код, он делает reverse engineering в мозгу, восстанавливая логику работы программы по увиденному коду. И другой программист, как хороший автор, всегда может красиво расставить акценты, облегчив понимание его кода.

      А программы автоматического изменения кода — это как перевод стихов промптом — вроде ничего не изменилось, а легкость и красота утратились.
        0
        Я не говорил что надо переменные по другому назвать и комментарии удалить, они остаются там где и были, но куча вещей которые мы делаем автоформатированием в коде совсем хранить не нужно, вы же сами знаете как вам удобнее читать десять тысяч строк кода, и предпочтения ваши и автора могут расходиться. Почему нет таких проблем с подсветкой? Потому что она у каждого своя и всё, как хотим так и настраиваем, и каждый читает код так как ему удобно.
          0
          Сначала вам не нравится, что у вашего соседа другое форматирование, потом, что он называет переменную my_var вместо myVar, или использует слишком много [по вашему мнению] return внутри функций. Проще договориться.
          А может в этом и есть смысл? Договариваться по поводу стиля кода. Если команда не может договорится о такой мелочи, то как она договариваться о действительно сложных вещах?

          Договорится о стиле кода: -1 к эго, +2 к командному духу. Кто знает…
            0
            Внутри команды без проблем. В что делать когда нужно поддерживать старый или сторонний код? Дело не в том что это можно решить договорённостью, без mvc, и прочих архитектурных решений и паттернов тоже можно писать. Однако их применение решает некоторые проблемы ещё до их возникновения. Данный подход тоже позволит решить такие проблемы совсем, так что получится +1 к эго и +2 к командному духу, разве это плохо?
              0
              >>Однако их применение решает некоторые проблемы ещё до их возникновения

              часто паттерны решают несуществующие в данном проекте проблемы
        +5
        Когда вы писали статью, вы использовали лексемы, зачем-то сохраняя их в виде текста, а потом читатель вынужден парсить их назад. Нарисовали бы сразу комикс.
          0
          Не художник, выражаю мысль как могу. Да и для общения людей естественный язык пока достаточно хорош.
            +4
            Код — это в большей степени язык общения программистов, а не программиста и компьютера.
              0
              Думал об этом когда писал комментарий, да код — язык общения и программистов между собой и к с компьютером. Почему бы не позволить компьютеру изъять даже повод для разногласий при общении. Ведь цвета подцветки синтаксиса, размер и тип шрифтов не хранятся в файле с кодом и это никому не мешает.
                +2
                Почему бы не позволить компьютеру изъять даже повод для разногласий при общении.
                Наверное, потому, что тогда человек потеряет часть своей свободы. А добровольно на это мало кто пойдёт.

                Вообще, вся эта ситуация с табо-пробелами напоминает мне детский сад. Один ребёнок кричит, что его машинка лучше, она красненькая. Второй бьёт его лопаткой по голове и кричит, что лучше его машинка — она грузовик. Третий пытается их помирить и убедить, что обе машинки хорошие, просто разные. А Вы, получается, исполняете роль доброй воспитательницы, которая, дабы прекратить драку, забирает у детей машинки. Предмета спора больше нет, но нет и любимых машинок.
                  +1
                  Да нет, я предлагаю одеть очки, и один увидит все машинки одним образом а другой — другим, таким как ему захочется. И каждого будут окружать машинки его любимого типа.
                    0
                    А какие они при этом на самом деле не важно, их скроет абстракция. Вот что я предлагаю.
                      0
                      Понял. Ну что, тоже вариант решения проблемы. Хоть мне он и кажется утопическим.
                        0
                        Когда работали с перфокартами даже думать не могли о современных IDE, не нам ли двигать мир туда куда мы хотим?
          +10
          Заколебали.
        • НЛО прилетело и опубликовало эту надпись здесь
            0
            Да именно так как вы написали, Вы увидите тот же текст, но вот то как лично вы предпочитаете. Вы увидите тот текст который вам удобен. А я увижу так как мне удобно. вы напишите дополнение, так как вам удобно, а я его прочитаю.
            +2
            Кодить мышкой? Увольте.
              0
              С чего бы. В редакторе тот же текст, только не совсем. Кодите той же клавиатурой. Представление такое как вам нравится. Кто-то может и мышкой, ничто не мешает лексеммы драг энд дропом из словаря таскать. И клавиатурой тоже никто не мешает писать.
                0
                Видимо тогда я просто не до конца понял, в чём заключается «отказ от текста».
                  +1
                  Отказаться нужно от того чтобы хранить исходный код в виде текста. Хранить его надо уже как результат работы парсера, а программисту выдавать текст в том виде котором он хочет. Ну или не текст если он не хочет текст. Чтобы отделить оформление и логику. Вы захотели чтобы при повышении уровня вложенности команда сдвигалась вправо на один таб равный 4м пробелам, и у вас это так, а в коде это просто не написано, в коде только то, что там, фор, в нём иф, в нйм вызов функции. А уж в каком виде вы это увидите и будете редактировать — ваше дело.
                    0
                    Не слишком портабельно, хотя идея хороша.
                      0
                      Теперь понял. Программа хранит код во внутреннем виде и позволяет отображать и редактировать его используя кучу разных стилей кода.
                      Ну, идея неплоха, но главный тезис, как по мне, громковат :)
                0
                А есть подобный редактор для чего-нибудь кроме AS? Идея понравилась.
                +1
                Всегда запихиваю текущий code style для проекта в правила форматирования в IDE и потом только автоматическая расстановка отступов, скобок и так далее. Всё!
                  0
                  Не всегда можно просто автоматически расставить скобки, например такая штука часто портится
                  someFunction() // comment
                  {
                  some code
                  }

                  Это конечно вопрос правильности IDE но этих проблем можно избежать.
                  0
                  Это какбэ заслуга не RAI а MPS от JetBrains. На котором RAI и написан.
                  Насчет MPS — да. это будущее. Но не факт, что мы к нему прийдем.
                    0
                    Я думаю что придём, ну или к чему-то подобному.
                    0
                    Окей, лексемы, текст, бла-бла. Табы то здесь причём?
                      0
                      При том что выбор между табами и пробелами — проблема представления исходного кода. По историческим причинам представление частично хранится в коде, частично в IDE, так подсветка синтаксиса хранится в IDE а отступы в коде. Я говорю о том что отступы и прочие чисто визуальные вещи нужно вынести в IDE и убрать из кода.
                        0
                        ИДЕ умеет форматировать код. Нужны табы — выберите табы, нужны пробелы — выберите пробелы. Шок писал про это во второй серии. Это не решает проблему?
                          0
                          Решает, частично и костыльно. Зачем хранить табы вообще? Вот в чем вопрос. IDE продолжит делать то-же самое, ставить табы или пробелы там где вам нужно. Дело не только в табах и пробелах, а вообще в том что сейчас в архитектуре приложений мы идём в сторону разделения логики и представления, а в коде почему-то нет.
                            0
                            Во-первых, не все пользуются ИДЕ.
                            Во-вторых, у каждого свой стиль кодинга, но всё-таки иногда хочется даже поэкспериментировать.
                            В-третьих, я вообще слабо что понимаю. Такое впечатление, что Вы только что придумали WYSIWYG.
                              0
                              Не WYSIWYG, ровно наоборот. Грубо говоря, код записывается в одну строчку только со значащими пробельными символами, а отображает его ваш инструмент так как вам лично (или создателями инструмента, если поленились настройки дефолтные изменить или это невозможно) нравится.
                                0
                                Ваша идея сродни w3c-шной XHTML2. Утопия одним словом.
                                  0
                                  МопедИдея не моя, я лишь попытался объяснить.
                                    0
                                    Не суть, я думаю моя мысль ясна в целом.
                      +1
                      Вот вам код, не подходящий на под какие рамки, но по-своему правильный.

                      if SomeCondition then begin
                        y:=x; break; end;


                      Этим программист говорит: новое значение — x, и стоп! И незачем тратить на такой простой код четыре строчки текста.

                      А «автоформатирующие» редакторы, как правило, ещё и не могут сохранять синтаксически неправильный текст. Был у меня как-то рефактор, продлившийся два рабочих дня. Ыгы, шестнадцать часов программа не компилировалась. Это был редактор двухмерных уровней, и в дополнение к плиточным уровням надо было добавить графические (т.е. фон полностью нарисован художником или внешней программой). И как изволите такое сохранять?
                        0
                        и не могут сохранять синтаксически неправильный текст
                        это редактор неправильный. Да и вообще я себе плохо такое представляю, как можно написать огромное количество синтаксически некорректного кода.

                        А вот code style штука обычно однозначная и я любитель все конструкции писать одинаково, и на вашу потратил бы даже пять, строчки кода это не что стоит экономить. Суть кодстайлов в том чтобы любой код выглядел одинаково, если вы так не считаете, то пожалуйста, я не навязываю свою точку зрения.
                          0
                          С редактором ActionScript я не знаком. С Excel и LotusScript — знаком.

                          Ну вы как думаете, откуда берётся огромное количество синтаксически неправильного кода? Из рефакторинга, конечно! Тогда мне надо было разбить немаленький класс TLevel на TVirtualLevel и TTileLevel. Ну и добавить TGraphicLevel = class (TVirtualLevel). То же самое — для MDI-окошка редактора уровней. Ах, да: некоторым командам меню нужен только плиточный уровень. Или только графический.
                        +2
                        Хуета какая-то, ей Богу.
                          0
                          Сейчас еще холивар по поводу египетских скобок начнется.
                            +4
                            А что тут холиварить, если египетские скобки однозначно рулят?
                              +2
                              то что они не рулят. (Маниакальный громогласный смех разжигателя холиваров)
                                  +1
                                  Решение по ссылке для JavaScript плохое из-за автоматической расстановки точек с запятыми.
                                  И если пример из топика ещё будет работать:
                                  var userList=
                                  [  { name: 'Tom', Age: 5, race: 'cat' }
                                  ,  { name: 'Jerry', Age: 3, race: 'mouse' }
                                  ,  { name: 'Spike', Age: 11, race: 'dog' }
                                  ]
                                  

                                  То стоит по привычке или по стайл гайдам написать следующее:
                                  return
                                  [  { name: 'Tom', Age: 5, race: 'cat' }
                                  ,  { name: 'Jerry', Age: 3, race: 'mouse' }
                                  ,  { name: 'Spike', Age: 11, race: 'dog' }
                                  ]
                                  


                                  Как всё порушится. Хотя, откровенно признаюсь, что-то в этом есть. Сам иногда использую
                                    0
                                    ну, некоторые глупости яваскрипта нужно помнить всегда и писать так:

                                    return true && // если мы всё ещё в своём уме, то…
                                    [ { name: 'Tom', Age: 5, race: 'cat' }
                                    , { name: 'Jerry', Age: 3, race: 'mouse' }
                                    , { name: 'Spike', Age: 11, race: 'dog' }
                                    ]
                                      0
                                      Уже не то)
                              0
                              См. коммент из предыдущих серий.
                                0
                                Ну после такого поста я просто обязан добавить функционал по выбору стиля фигурных скобок :)
                                  0
                                  буду премного благодарен. Жаль я не уделил достаточного внимания простоте и тщательности подачи материала и топик слили.
                                  0
                                  Может вам ассемблер наконец освоить?
                                  или, что уж мелочиться, сразу в машинных кодах писать? чистая незамутненная логика!

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

                                  Самое читаемое