Какие-то взаимоисключающие параграфы - синтаксический сахар и призван для упрощения и урезания, поэтому не понял почему тут "Но" стоит.
Он сокращает код, но не всегда сокращение равносильно упрощению. Для программиста это требует более глубокого знания языка, а иногда и освоения нестандартных подходов, как скажем, булевый оператор диапазона. А сейчас всем некогда изучать глубоко, надо бегом-бегом клепать под очередной фреймворк, пока он не устарел.
А великий однострочник, хоть и навёл в своё время шороху, но больше из-за методики его применения, чем из-за того, что он перловый. Схожие примеры я видел и для других языков. Как, например, после выхода очередного стандарта C++ народ стебался, что теперь в нём выражение ([](){})() — это осмысленная компилирующаяся синтаксическая конструкция, язык достиг совершенства. Да и в чистом C определения типов порой такие, что никакой Перл с ним не сравнится.
просто часто был свидетелем того, как такие поделки "для себя" потом попадали в большой проект
Опять же, это не специфично для Перла, а происходит с любыми проектами на любых языках.
Это синтаксический сахар. Можно и не использовать, если не нравится. А писать нечитаемый код можно абсолютно на любом языке, это претензия не к языку, а к программистам. И особенно удобно, что перл позволяет делать ибыстро на коленке, чисто для себя, и детально-развёрнуто, для проектов с долгосрочной поддержкой. Подход TIMTOWTDI, There Is More Than One Way To Do It.
Но да, современный мир этого не любит, всем подавай упрощение и урезание.
Создавать окружение не надо, это требуется только в тех сценариях, где необходимо обеспечить фиксированный набор модулей и их версий, заточенный под конкретный скрипт.
Я, например, пишу на перле и на питоне, но когда требуется склепать что-нибудь для себя, первым делом выбираю перл. Во многих сценариях он намного лаконичнее:
my $out = `ls -la`;
die "Oh no, we failed!" if ($?);
import sys
import subprocess
try:
out = subprocess.check_output(['ls', '-la'])
except:
print("Oh no, we failed!")
sys.exit(1)
Кроме того, перл гораздо свободнее в оформлении кода. Добавить отладочные принты с намеренным нарушением отступа, чтобы их потом можно было быстрее найти и удалить? Вставить в произвольное место некий временный кусок кода для какой-нибудь проверки наживую, а потом удалить его, без необходимости каждый раз выравнивать пробелы туда-сюда? Быстро сварганить однострочник для одноразового действия (включающего условные операторы)? Питон тут совсем не помощник.
Разумеется, существует и множество сценариев, где питон выигрывает. Как с любым инструментом, нужно просто оценивать применимость к конкретной задаче.
Будучи сам заядлым перлистом, всё же не могу не отметить, что у динамической типизации есть свои минусы. Во-первых, человеки банально могут ошибаться. Во-вторых, забывать. Попробуй через три года влезть в проект и сходу понять, что там куда и как передаётся. Комментарии, конечно, помогают, но они тоже зачастую пишутся "в моменте" и могут разъяснять совсем не то, что окажется непонятным когда-то в будущем. В-третьих, есть ещё задачи по изучению и поддержке чужого кода, когда надо понять, что за фигня сидит в переменной, а инициализация этой фигни живёт за тридевять прослоек в тридесятом модуле, да ещё и делается по-разному в зависимости от сотен условных веток исполнения.
Один минус — это не "заминусили". Я не ставил оценок, но потенциальными причинами минуса могли быть: а) плохое решение с удалением Edge, что может привести к поломке различных компонентов системы; б) недоказанная связь между наличием-отсутствием Edge в системе и показом уведомлений (компонент, показывающий всплывашки, может и не проверять существование Edge, а полагаться на то, что он в системе всегда обязан быть); в) отбор прав вообще не может иметь отношения к всплывашкам, в лучшем случае он лишь препятствует самопроизвольному возвращению Edge в систему, да и то, учитывая, что у системы наивысшие привилегии, ничто не мешает забрать ей права обратно, вопрос лишь в том, догадались ли это реализовать разработчики винды.
У меня не было сурового диалапного детства, но неоднократно уже возникало желание, чтобы оно у меня было, когда в очередной раз тыкнув на закладку с "проверенным решением" обнаруживал, что там либо 404, либо "домен продаётся", либо "видео удалено по запросу правообладателя из-за того, что там в фоне проигрались три ноты, по которым можно угадать мелодию, и теперь мы вам не скажем даже, как это видео вообще называлось и кто его автор". И как же легко становится на душе, когда вспоминаешь, что вот именно этот материал я некогда догадался утащить к себе локально!
Мне кажется, что тогда та часть, где узел, плохо простирается. Я обычно либо застёгиваю, если есть пуговицы, либо просто ниткой прихватываю в паре-тройке мест.
О засовывании ВСЕГО белья в мешок вроде никто не писал…
В комментарии, на который я отвечал, говорилось: "всё загрузил сразу и так же сразу выгрузил после стирки". Звучало именно так, будто полное содержимое барабана засовывается в мешок. Поэтому я и удивился такому подходу.
Никогда не использовал мешки для стирки, поэтому вопрос, возможно глупый, но как они вообще работают? Скажем, когда у меня при стирке пододеяльник сжирает внутрь себя всё остальное бельё, получается один компактный тяжеленный ком, который ни простирать толком невозможно, ни отжать: этот ком не может быть распределён по поверхности барабана, а сидит с одной стороны, и из-за весового дисбаланса машинка начинает скакать как бешеная. В чём отличие между засовыванием всего белья в мешок и засовыванием всего белья в пододеяльник? Или там предполагается использовать несколько мешков с равномерной загрузкой?
А не проще ли было привести венгерский алфавит в соответствие Здравому Смыслу, а не вводить в Юникод всякую хрень? Если букву можно записать двумя буквами то это две буквы.
В статье же сказано: чтобы обеспечить однозначность конвертации алфавитов. Про венгерский я не знаю, а, скажем, в сербском есть буквы Њ (мягкая Н), обычная Н, и Ј (соответствующая русскому Й). В латинице эти буквы записываются как NJ, N, J. Поэтому возникает неоднозначность при переводе латиницы в кириллицу, как трактовать этот NJ: как одну букву Њ или как НЈ. И да, есть слова, где такое буквосочетание присутствует. Использование единого юникодного символа для диграфа NJ позволяет различить эти ситуации.
По-хорошему, конечно, разработчики алфавита должны были сразу использовать неповторяющиеся буквы, скажем, ввести Ñ. Но имеем что имеем. А стандарт Юникод не диктует языкам, что они должны стать ёжиками, он лишь фиксирует существующие нормы. Хотя, конечно, на практике этими диграфами вряд ли кто-то пользуется; их даже на клавиатурах нет, насколько я знаю…
В Паскале/Дельфи такое присвоение, а одиночный = для сравнения и определения типов. Но историю вопроса тоже не знаю.
Так а break-то там в итоге зачем?
Он сокращает код, но не всегда сокращение равносильно упрощению. Для программиста это требует более глубокого знания языка, а иногда и освоения нестандартных подходов, как скажем, булевый оператор диапазона. А сейчас всем некогда изучать глубоко, надо бегом-бегом клепать под очередной фреймворк, пока он не устарел.
А великий однострочник, хоть и навёл в своё время шороху, но больше из-за методики его применения, чем из-за того, что он перловый. Схожие примеры я видел и для других языков. Как, например, после выхода очередного стандарта C++ народ стебался, что теперь в нём выражение
([](){})()
— это осмысленная компилирующаяся синтаксическая конструкция, язык достиг совершенства. Да и в чистом C определения типов порой такие, что никакой Перл с ним не сравнится.Опять же, это не специфично для Перла, а происходит с любыми проектами на любых языках.
Это синтаксический сахар. Можно и не использовать, если не нравится. А писать нечитаемый код можно абсолютно на любом языке, это претензия не к языку, а к программистам. И особенно удобно, что перл позволяет делать ибыстро на коленке, чисто для себя, и детально-развёрнуто, для проектов с долгосрочной поддержкой. Подход TIMTOWTDI, There Is More Than One Way To Do It.
Но да, современный мир этого не любит, всем подавай упрощение и урезание.
Создавать окружение не надо, это требуется только в тех сценариях, где необходимо обеспечить фиксированный набор модулей и их версий, заточенный под конкретный скрипт.
Я, например, пишу на перле и на питоне, но когда требуется склепать что-нибудь для себя, первым делом выбираю перл. Во многих сценариях он намного лаконичнее:
Кроме того, перл гораздо свободнее в оформлении кода. Добавить отладочные принты с намеренным нарушением отступа, чтобы их потом можно было быстрее найти и удалить? Вставить в произвольное место некий временный кусок кода для какой-нибудь проверки наживую, а потом удалить его, без необходимости каждый раз выравнивать пробелы туда-сюда? Быстро сварганить однострочник для одноразового действия (включающего условные операторы)? Питон тут совсем не помощник.
Разумеется, существует и множество сценариев, где питон выигрывает. Как с любым инструментом, нужно просто оценивать применимость к конкретной задаче.
Будучи сам заядлым перлистом, всё же не могу не отметить, что у динамической типизации есть свои минусы. Во-первых, человеки банально могут ошибаться. Во-вторых, забывать. Попробуй через три года влезть в проект и сходу понять, что там куда и как передаётся. Комментарии, конечно, помогают, но они тоже зачастую пишутся "в моменте" и могут разъяснять совсем не то, что окажется непонятным когда-то в будущем. В-третьих, есть ещё задачи по изучению и поддержке чужого кода, когда надо понять, что за фигня сидит в переменной, а инициализация этой фигни живёт за тридевять прослоек в тридесятом модуле, да ещё и делается по-разному в зависимости от сотен условных веток исполнения.
Кроме того, есть ещё $#x — последний существующий индекс в массиве @x (== длина минус один).
Один минус — это не "заминусили". Я не ставил оценок, но потенциальными причинами минуса могли быть: а) плохое решение с удалением Edge, что может привести к поломке различных компонентов системы; б) недоказанная связь между наличием-отсутствием Edge в системе и показом уведомлений (компонент, показывающий всплывашки, может и не проверять существование Edge, а полагаться на то, что он в системе всегда обязан быть); в) отбор прав вообще не может иметь отношения к всплывашкам, в лучшем случае он лишь препятствует самопроизвольному возвращению Edge в систему, да и то, учитывая, что у системы наивысшие привилегии, ничто не мешает забрать ей права обратно, вопрос лишь в том, догадались ли это реализовать разработчики винды.
А по-моему, реакция более чем однозначная.
У меня не было сурового диалапного детства, но неоднократно уже возникало желание, чтобы оно у меня было, когда в очередной раз тыкнув на закладку с "проверенным решением" обнаруживал, что там либо 404, либо "домен продаётся", либо "видео удалено по запросу правообладателя из-за того, что там в фоне проигрались три ноты, по которым можно угадать мелодию, и теперь мы вам не скажем даже, как это видео вообще называлось и кто его автор". И как же легко становится на душе, когда вспоминаешь, что вот именно этот материал я некогда догадался утащить к себе локально!
Это как? Пустая коробка весит 53 килограмма?
Мне кажется, что тогда та часть, где узел, плохо простирается. Я обычно либо застёгиваю, если есть пуговицы, либо просто ниткой прихватываю в паре-тройке мест.
В комментарии, на который я отвечал, говорилось: "всё загрузил сразу и так же сразу выгрузил после стирки". Звучало именно так, будто полное содержимое барабана засовывается в мешок. Поэтому я и удивился такому подходу.
Никогда не использовал мешки для стирки, поэтому вопрос, возможно глупый, но как они вообще работают? Скажем, когда у меня при стирке пододеяльник сжирает внутрь себя всё остальное бельё, получается один компактный тяжеленный ком, который ни простирать толком невозможно, ни отжать: этот ком не может быть распределён по поверхности барабана, а сидит с одной стороны, и из-за весового дисбаланса машинка начинает скакать как бешеная. В чём отличие между засовыванием всего белья в мешок и засовыванием всего белья в пододеяльник? Или там предполагается использовать несколько мешков с равномерной загрузкой?
Автор предлагает не применять статистические результаты к конкретному индивидууму. Вроде бы, очевидная вещь, но на практике происходит сплошь и рядом.
И всё-таки, да, это ошибка, так как 1080 метров это более километра. :-)
tsch = ч.
В казахском языке кириллический алфавит, в котором есть и Ь, и Ы, и І.
В статье же сказано: чтобы обеспечить однозначность конвертации алфавитов. Про венгерский я не знаю, а, скажем, в сербском есть буквы Њ (мягкая Н), обычная Н, и Ј (соответствующая русскому Й). В латинице эти буквы записываются как NJ, N, J. Поэтому возникает неоднозначность при переводе латиницы в кириллицу, как трактовать этот NJ: как одну букву Њ или как НЈ. И да, есть слова, где такое буквосочетание присутствует. Использование единого юникодного символа для диграфа NJ позволяет различить эти ситуации.
По-хорошему, конечно, разработчики алфавита должны были сразу использовать неповторяющиеся буквы, скажем, ввести Ñ. Но имеем что имеем. А стандарт Юникод не диктует языкам, что они должны стать ёжиками, он лишь фиксирует существующие нормы. Хотя, конечно, на практике этими диграфами вряд ли кто-то пользуется; их даже на клавиатурах нет, насколько я знаю…