Я лично нахожу, что чтение кода, полного идентификаторов Unicode, сбивает с толку. По моему мнению, это также препятствует тому, чтобы код был легко поддержан. Не говоря уже о всех усилиях, необходимых авторам различных переводчиков для реализации такой поддержки. Я также постоянно замечаю отсутствие (или наличие) поддержки идентификаторов Unicode в списках (не) преимуществ различных реализаций языка (как это действительно имеет значение). Я не понимаю: почему так много внимания?
14
größe
. Тем не менее, я никогда не делаю этого, и я настоятельно не рекомендую делать это. Поэтому вопрос очень актуален.Ответы:
Когда вы думаете о юникоде, вы думаете о китайских или русских символах, что заставляет вас думать о некотором исходном коде, написанном на русском языке, который вы видели в Интернете, и который был непригодным (если вы не знаете русский язык).
Но если юникод может быть использован неправильно, это не означает, что он сам по себе плох в исходном коде.
При написании кода для определенного поля с помощью юникода вы можете сократить код и сделать его более читабельным . Вместо того:
ты можешь написать:
который не может быть легко читаемым для среднего разработчика, но все же легко читается для человека, который ежедневно использует математические символы .
Или, когда вы делаете заявление, связанное с зеркальной фотографией, вместо:
Вы можете заменить апертуру на символ ƒ, написав ближе к
ƒ/1.8
:Это может быть неудобно : при наборе общего кода на C # я бы предпочел написать:
скорее, чем:
потому что в первом случае IntelliSense помогает мне писать весь код практически без ввода текста и особенно без использования мыши, а во втором случае я понятия не имею, где найти эти символы, и вынужден полагаться на мышь, чтобы перейти и искать их в списке автозаполнения.
Это, как говорится, все еще полезно в некоторых случаях.
currentLens.GetMaximumƒ();
из моего предыдущего примера можно положиться на IntelliSense, и его можно набирать так же быстро, какGetMaximumAperture
более короткий и более читаемый. Кроме того, для определенных доменов с большим количеством символов сочетания клавиш могут помочь печатать символы быстрее, чем их буквальные эквиваленты. в исходном коде.То же самое, кстати, относится и к комментариям. Никто не хочет читать код, полный комментариев на китайском (если вы сами не знаете китайский язык). Но в некоторых языках программирования символы Юникода все еще могут быть полезны. Одним из примеров являются сноски¹.
Certainly Мне, конечно, не понравятся сноски в коде C #, где существует строгий набор правил стиля написания комментариев. В PHP, с другой стороны, если есть много вещей, которые нужно объяснить, но эти вещи не очень важны, почему бы не поместить их в конец файла и не создать сноску в PHPDoc метода?
источник
Δx
или-∞
являются допустимыми (с некоторыми недостатками, которые я объяснил в своем ответе).Ф
/Φ
с другой стороны, это просто признаки того, что программист не понимает, как правильно именовать переменные.cumulativeDistributionFunction
слишком долгоCDF
менее читабелен, чем Φ.cumDistFunc
некрасиво Это также означает, что если программист использует вместо этого кириллицу EF (Ф) в этом контексте, это просто ошибка. Таким же образом, программист мог использовать неправильный термин или неправильное сокращение.Я бы сказал:
для облегчения непрофессионалов и новичков, которые изучают программирование (например, в школе) и не знают английского языка. Они все равно не пишут производственный код. Я много раз видел такой код:
Просто позволь беднягу написать это на своем языке:
Тебе не нравится это?
источник
Конечно, каждый современный компилятор должен иметь дело с исходным кодом Unicode сегодня. Например, строковые константы могут содержать символы Unicode. Но как только это будет достигнуто, почему бы не разрешить использование юникод-идентификаторов? Это не страшно, если ваш код компилятора не зависит от символов, являющихся 7-битными кодами.
Но ОП прав в том, что: теперь индус, говорящий на хинди, должен поддерживать код с русскими идентификаторами и арабскими комментариями. Какой кошмар для бедного китайца, который должен проверять качество и не умеет читать ни один из вышеперечисленных алфавитов!
Следовательно, теперь организационная задача состоит в том, чтобы идентификаторы программ и комментарии были написаны на общем языке. Я не могу с этим поделать, но я думаю, что это будет английский на некоторое время вперед.
источник
А
, его конструктор принимает параметрΑ
, а оператор в конструкторе говоритvar x = A.boz();
, будет лиA
указываться поле, параметр или что-то еще? Как можно сказать?Я думаю, что имеет смысл использовать юникод-символы в строках и комментариях. И если в любом случае лексеру и парсеру необходимо поддерживать Unicode для этого, то пишущий компилятор, вероятно, бесплатно получает поддержку символов Unicode в идентификаторах, поэтому может показаться, что произвольное ограничение допускает использование только символов ASCII в идентификаторах.
источник
vár
же, какvár
?)Насколько мне известно, это чисто по маркетинговым причинам. И дополнительно может сделать нашу жизнь сложнее.
Маркетинговые аргументы
Вы знаете этот сумасшедший список функций, которыми гордится большинство языков? В целом, это в значительной степени бесполезно, потому что это так далеко от языка, что он не дает много информации о конкретных, но он позволяет быстро одеть столы с галочками и крестиками и справедливо сделать вывод, что, поскольку X имеет больше тиков, чем Y, он должен будь лучше.
Ну, поддержка Unicode для идентификаторов является одной из этих строк. Неважно, что по сравнению с лямбда-поддержкой, поддержкой общего программирования и т. Д. ... это может быть не так много, люди, которые рисуют таблицы, не заботятся о качестве каждой строки, а только о количестве их.
И поэтому они могут похвастаться: «Ах, с Y у вас нет поддержки Unicode для ваших идентификаторов! В X мы делаем, так что для студентов это намного проще!»
Ошибка доступности
К сожалению, аргумент о доступности ошибочен.
О, я понимаю, что возможность написать «résultatDuJetDeDé» вместо «diceThrowResult» (да, я француженка) может показаться победой в краткосрочной перспективе ... однако есть недостатки!
Программирование - это общение
Ваша программа предназначена не только для компилятора (который может меньше заботиться об используемых вами идентификаторах), но и для ваших коллег. Им нужно уметь это читать и понимать.
Конечно, ваш одноклассник может говорить на том же языке, что и вы (не очевидно, у меня были уроки программирования с немцами, испанцами, ливанами и китайцами), как и ваш учитель ... но предположим, что вы как-то работаете над этим дома и вдруг нужна помощь: Интернет отличный, вы можете поговорить с тысячами людей, которые знают решение, они ответят, только если поймут ваш вопрос. И ты нужно понять их ответ.
Программирование требует понимания
Доступность и инициация требуют, чтобы за выполнение тяжелой работы за вас взялись библиотеки: вы не хотите заново изобретать уровень ввода-вывода для чтения / записи на консоль при первом назначении.
Если вы ответите на марокканском арабском, я буду удивлен.
Если вы не полагаться только на лекции вы содействовать, и присутствовавшие полную документацию по каждой библиотечной функции вам необходимо использовать (и , возможно , даже в переводе библиотек), то вы будете иметь , чтобы узнать modicrum английского языка. Но тогда вы, вероятно, уже сделали это задолго до того, как начали этот курс программирования.
Английский это...
... язык программирования (и большинство ученых).
Чем раньше человек признает это и согласится с этим, а не будет бороться с ним, тем быстрее он сможет по-настоящему учиться и прогрессировать.
Некоторые неизбежно выступят против этого и будут справедливо отстаивать свое право говорить на языке по своему выбору (обычно на материнском языке), однако, как показал Бабель, чем больше языков используется, тем труднее становится общение.
Все еще...
Да, как говорилось снова и снова, некоторая поддержка Unicode (главным образом символов) может значительно облегчить понимание для людей, которым приходится переводить математические или физические формулы, например, в код. Недостатком является то, что некоторые символы перегружены, но это все равно может помочь.
Так почему же?
Ну, как уже говорилось, дело не в удобстве пользователя, а в маркетинговых заявлениях. Это также очень просто, так как парсер уже знает о Юникоде для строк и комментариев, так что большинство делает скачок.
И это может быть полезным для определенных пользователей.
Но я лично буду иметь дело только с кодом, написанным с английскими идентификаторами. Мне все равно, нужна ли вам моя помощь с вашим фрагментом кода или ваша библиотека просто великолепна, и я мог бы многого добиться от нее: если я не могу понять ее, мне просто придется ее игнорировать.
источник
Как вы собираетесь вводить идентификаторы ASCII на китайской клавиатуре? Несколько языковых ключевых слов - это одно, а необходимость делать весь код таким образом - совсем другое.
Программисты должны иметь право и возможность называть свои переменные как угодно. Это не ваше дело, на каком языке это.
Если вы так запутались, читая код с идентификаторами, в которых есть символы из языков других людей, то я уверен, что вы точно понимаете, как они смущены, когда им приходится использовать идентификаторы с символами из вашего языка.
источник
Согласно PEP 3131 - Поддержка не-ASCII-идентификаторов, датированных в 2007 году, первая часть Обоснования гласит:
Я еще не исследовал другие языки, но это должно быть среди причин, по которым они добавили поддержку.
источник
Это действительно сделало бы жизнь проще (для некоторых из нас, так или иначе), если бы компилятор не поддерживал Unicode. Идентификаторы справа налево ужасны. Объединенные латинские буквы и идентификаторы Юникод справа налево еще хуже.
Недостаток неподдержки в том, что некоторые мастера с графическим интерфейсом воспринимают текст, который вы вставили для элемента, и автоматически используют этот текст в качестве идентификатора элемента. Так что именно они будут делать с текстом Unicode на этих предметах? Боюсь, нелегкого ответа.
Юникод справа налево комментарии тоже могут быть забавными. Например, в VS 2010 комментарии XML отображаются (правильно) как RTL в коде ... но когда вы используете Intellisense для поиска идентификатора в другом месте кода, всплывающая подсказка отображает (неправильно) LTR. Может быть, лучше, если бы вообще не было поддержки? Опять не простой вызов.
источник