Я заметил на своём опыте, а также косвенно на опыте коллег, что любой непривычный стиль написания кода кажется объективно нечитаемым и вызывает отторжение. Такое когнитивное искажение. Если некоторое время попытаться им пользоваться, несмотря на негативное отношение, искажение пропадает и можно пытаться проводить более объективное сравнение.
Но это же не означает, что подобный код перестает быть Г.
Нет, не означает, но он и в самом деле перестаёт быть этим самым Г.
Я называю это "нулевой рефакторинг": нулевой рефакторинг — это частный случай рефакторинга кода, при котором код — как текст — не изменяется, но при этом (иногда кардинально) меняется его архитектура, архитектура программы. Нулевой рефакторинг может быть итоговым результатом настоящего сложного многостадийного рефакторинга когда в итоге неожиданно оказывается, что получился "полный круг", а может совершаться исключительно в голове программиста в результате повышения его кругозора и опыта работы.
Вот чтобы обсуждаемый код перестал быть "Г.", требуется именно нулевой рефакторинг, и большое количество людей в отрасли его уже проделали.
Нет никакого закона Фарадея без остальной теории Максвелла в XXI веке.
Есть. Есть такое приближение, при котором "работает" не полная теория Максвелла: это приближение, в котором магнитное поле, порождённое вихревым электрическим полем, мало и может не учитываться. В этом приближении электромагнитных волн нет, а порождение электрического поля магнитным (закон Фарадея) — есть.
Именно это приближение описывает процессы, происходящие в цепях переменного тока низкой частоты.
С одной стороны да. С другой стороны — это ведь российская тюрьма. А значит, сажая человека в тюрьму вы создаёте условия для совершения куда более тяжких преступлений (со стороны сотрудников ФСИН), чем исходная кража. Если так посмотреть, то утверждение "вор должен сидеть в тюрьме" выглядит даже более сомнительным, чем его противоположность ("ни один вор не должен сидеть в тюрьме").
Аналогично с := — это синтаксический сахар, который был добавлен специально для решения проблемы var name auto =.
А это (существование какой-либо проблемы с var name =) опровергает Rust, где конструкции, аналогичной := нет. Если бы упоминаемая вами проблема реально существовала, её пришлось бы решать не только в Го, но также и в Расте.
Вы требуете перевести незаконченный кусок кода с одного ЯП на другой. Это не всегда возможно: нужен контекст, более-менее осмысленный кусок кода. Если воспринимать приведённый код как цельный, то получается переменная, которой не присваивается значение. Это бессмысленный код, переводить нечего.
Является.
Враньё. Ни в описании языка, ни в восприятии текста программистом двоеточие не воспринимается как отдельный элемент. Ну и уж тем более оно не является ключевым словом.
Он и есть мусор, т.к. есть уже оператор =.
Это не мусор. Это важный элемент, позволяющий отличать объявление новой переменной от переприсваивания. Без него читаемость программы ухудшилась бы.
каким образом := относится к паскаль-стилю
Речь шла о том, что новые ЯП используют "паскалевский стиль". Го — один из этих новых ЯП, и именно такой, что является контрпримером к вашим тезисам.
А что касается преимущества, то речь шла совсем о другом: о том что "let/var" нужен в обоих вариантах, но в паскалевском стиле он используется единообразно во всех ситуациях, а в C является в некотором роде костылём, подпирающим конструкцию, из которой убрали необходимый элемент — тип обявляемой переменной.
Это не код, это говно (неинициализированная переменная).
А что касается того, что опровергает Go, то Go опровеграет два ваших утверждения: 1) необходимость мусора в виде двоеточия, отделяющего имя переменной от типа, 2) необходимость мусора в виде ключевого слова типа let, var или auto.
Двоеточие в := не является отдельным элементом/ключевым словом. Два символа := являются одним, единым оператором, поэтому никакого мусора при его использовании уже нет. (Не будете же вы настаивать, чтобы присвоение значения переменной выполнялось вообще без единого оператора?)
Там переменные надо объявлять в отдельном блоке. Есть мазохисты, которым нравится, но остальные сильно против. Форвард-декларации — то же самое. И ещё много моментов, неадекватных с современной точки зрения.
Да-да. На первый взгляд новый язык по читаемости может поспорить с Perl, J и триграфами C++.
Мне кажется, я даже мгновенно перестал ненавидеть JavaScript после того как увидел это. Серьёзно, ещё пол-часа назад я хотел любыми силами избежать JavaScript в моей жизни, а сейчас JavaScript уже не кажется чем-то сильно плохим.
То есть РАН, если я правильно понимаю, стала преступной организацией (по аналогии с СС Третьего Рейха). Но, что характерно, мы не видим массового исхода членов из неё.
подход типа «Я не углублялся, статью не читал, и не собираюсь. …Но мнение имею» — сегодня доминирующий. В результате имеем то, что имеет нас
Вот только в данном-то случае этот подход сработал. Andruh прав в том, что GOF корректно вычленили из оригинальной статье собственно паттерн и отбросили особенности частной реализации в условиях специфического ЯП.
Там кресло откидывается и дают плед и тапочки. А как можно спать на упомянутой «нормальной полке» я не понимаю в принципе. Там можно только делать вид, что спишь.
Я думаю, это косвенный признак хорошей игры. Потому что решения у этой проблемы нет, и если для какой-то игры эта проблема не актуальна — это не потому что эту проблему решили, а потому что игра не имеет достаточно развитых механик, чтобы эта проблема смогла проявиться. То есть иначе говоря, либо игра позволяет ролеплейить, и тогда эта проблема есть; либо этой проблемы нет, но и ролеплейить вообще не получиться.
Я заметил на своём опыте, а также косвенно на опыте коллег, что любой непривычный стиль написания кода кажется объективно нечитаемым и вызывает отторжение. Такое когнитивное искажение. Если некоторое время попытаться им пользоваться, несмотря на негативное отношение, искажение пропадает и можно пытаться проводить более объективное сравнение.
Нет, не означает, но он и в самом деле перестаёт быть этим самым Г.
Я называю это "нулевой рефакторинг": нулевой рефакторинг — это частный случай рефакторинга кода, при котором код — как текст — не изменяется, но при этом (иногда кардинально) меняется его архитектура, архитектура программы. Нулевой рефакторинг может быть итоговым результатом настоящего сложного многостадийного рефакторинга когда в итоге неожиданно оказывается, что получился "полный круг", а может совершаться исключительно в голове программиста в результате повышения его кругозора и опыта работы.
Вот чтобы обсуждаемый код перестал быть "Г.", требуется именно нулевой рефакторинг, и большое количество людей в отрасли его уже проделали.
Есть. Есть такое приближение, при котором "работает" не полная теория Максвелла: это приближение, в котором магнитное поле, порождённое вихревым электрическим полем, мало и может не учитываться. В этом приближении электромагнитных волн нет, а порождение электрического поля магнитным (закон Фарадея) — есть.
Именно это приближение описывает процессы, происходящие в цепях переменного тока низкой частоты.
Нормальный функциональный код.
Не думал, что на Хабре столько сотрудников ФСИН.
С одной стороны да. С другой стороны — это ведь российская тюрьма. А значит, сажая человека в тюрьму вы создаёте условия для совершения куда более тяжких преступлений (со стороны сотрудников ФСИН), чем исходная кража. Если так посмотреть, то утверждение "вор должен сидеть в тюрьме" выглядит даже более сомнительным, чем его противоположность ("ни один вор не должен сидеть в тюрьме").
А это (существование какой-либо проблемы с var name =) опровергает Rust, где конструкции, аналогичной := нет. Если бы упоминаемая вами проблема реально существовала, её пришлось бы решать не только в Го, но также и в Расте.
Вы требуете перевести незаконченный кусок кода с одного ЯП на другой. Это не всегда возможно: нужен контекст, более-менее осмысленный кусок кода. Если воспринимать приведённый код как цельный, то получается переменная, которой не присваивается значение. Это бессмысленный код, переводить нечего.
Враньё. Ни в описании языка, ни в восприятии текста программистом двоеточие не воспринимается как отдельный элемент. Ну и уж тем более оно не является ключевым словом.
Это не мусор. Это важный элемент, позволяющий отличать объявление новой переменной от переприсваивания. Без него читаемость программы ухудшилась бы.
Речь шла о том, что новые ЯП используют "паскалевский стиль". Го — один из этих новых ЯП, и именно такой, что является контрпримером к вашим тезисам.
А что касается преимущества, то речь шла совсем о другом: о том что "let/var" нужен в обоих вариантах, но в паскалевском стиле он используется единообразно во всех ситуациях, а в C является в некотором роде костылём, подпирающим конструкцию, из которой убрали необходимый элемент — тип обявляемой переменной.
Это не код, это говно (неинициализированная переменная).
А что касается того, что опровергает Go, то Go опровеграет два ваших утверждения: 1) необходимость мусора в виде двоеточия, отделяющего имя переменной от типа, 2) необходимость мусора в виде ключевого слова типа
let
,var
илиauto
.Двоеточие в
:=
не является отдельным элементом/ключевым словом. Два символа:=
являются одним, единым оператором, поэтому никакого мусора при его использовании уже нет. (Не будете же вы настаивать, чтобы присвоение значения переменной выполнялось вообще без единого оператора?)Мне кажется, я даже мгновенно перестал ненавидеть JavaScript после того как увидел это. Серьёзно, ещё пол-часа назад я хотел любыми силами избежать JavaScript в моей жизни, а сейчас JavaScript уже не кажется чем-то сильно плохим.
Вот только в данном-то случае этот подход сработал. Andruh прав в том, что GOF корректно вычленили из оригинальной статье собственно паттерн и отбросили особенности частной реализации в условиях специфического ЯП.
Есть понятие security through obscurity, а это, видимо, пример workability through obscurity?