Ну, строго говоря, хорошо читаемый язык от плохо читаемого отличает в том числе и читабельность однострочников. Другими словами, write-only однострочник можно на чём угодно написать… А вот такой однострочник, который читался бы не хуже чем verbose-вариант, очень мало языков позволяют писать… и Python, к сожалению, к ним не относится. В основном, тому виной плохо согласованная стандартная библиотека, которая так и не определилась процедурная она или объектно-ориентированная, в каком порядке должны следовать аргументы и т.д. В принципе, такие же проблемы есть и в PHP, поэтому с PHP на Python можно легко перейти… Но перейти с того же Ruby на Python крайне сложно, т.к. к хорошему быстро привыкаешь :-)
Замечу, что помимо Ruby есть ещё много языков с прекрасно продуманной стандартной библиотекой, например C#, Haskell, Elixir.
Вот Вы развели то ветку…
В данном случае, речь вообще о конкретной девушке… Даже фото над этой фразой есть. Или Вам определённый артикль нужен, чтобы не казалось?
Ну так-то да, особенно если не ASCII, но просили пример попроще, чтобы новичку легко читалось…
Кстати, для демонстрации возможностей можно ещё и по символам range использовать:
Сайт-визитку на VPS? Уж что-что, а Wordpress можно на любом shared-хостинге поднять… За 80 руб/месяц уже можно достаточно приличный найти. И этот несчастный Wordpress прям из админки хостинга установить.
Я на Python не программирую, чисто на уровне чтения читабельного кода с ним знаком, поэтому просто взял вариант ближе к классическому набору map/filter/reduce. Хотя генераторы в Python пользуются большой популярностью, подозреваю, что они там тупо быстрее работают :-)
Ну, это Вы немного схитрили… заранее подготовив range.
Аналог второго варианта на Ruby выглядит на Python так:
import re
print '\n'.join(re.findall('.{16}', ''.join(map(lambda x: chr(x), range(32, 128)))))
А первый вариант, емнип, стандартной библиотекой Python не решается, придётся свою функцию писать для разбиения массива на чанки.
P.S. В любом случае, однострочники на Python лучше даже не пытаться писать, это ни разу не его сильная сторона. Получается довольно страшненько и практически нечитаемо.
Это извечный философский вопрос: Что значит "изучил язык"?
Вопрос этот не ограничивается языками программирования… и для естественных языков придумали такое понятие как уровень владения. И по факту с годами это почти не коррелирует. Точнее, очевидно, что для освоения языка на уровне С2 требуется несколько лет. Но обратное не верно, т.е. можно десятилетиями активно и успешно пользоваться языком, но не владеть им на уровне C2. Более того, практическая ценность такого уровня владения весьма спорна.
То же справедливо и для ЯП, изучить язык на уровне B2 достаточно для решения более 90% практических задач, вне зависимости от чьих-то представлений.
Ruby — неплохой вариант для начинающих. Тут я не спорю.
Однако, примеры Ваши даже программистам не понять… Потому что они нелогичны! Посмотрите, в какой ступор Вы вогнали бедного Eudokimoff своим "13.to_s.length.nil?".
Я уверен, что любой пример должен делать что-то осмысленное, ну например ASCII-табличку печатать:
Пфф, а что с ней так? Зачем делать то, что будет медленнее, когда сделать нормально не составляет никакого труда: array.sort! {|a, b| b <=> a}
Зачем писать белиберду "13.to_s.length.nil?" в качестве примера? Или Вы поставили себе задачу показать, как не надо писать на Ruby?
Пожалуйста, прекратите позорить Ruby своими примерами… Никто в здравом уме не будет так делать сортировку в обратном порядке.
Для демонстрации цепочек вызовов прекрасно подходят ActiveRecord, Ransack и т.д., проще говоря, те случаи, где уместен паттерн Fluent Interface.
работу программиста через двадцать лет я скорее всего найду, а вот работу инженера-конструктора — вряд ли!
Хороший инженер может быть настолько не уверен в своих способностях?
Мне кажется, там речь скорее о неуверенности в перспективах развития отрасли… Посмотрите, для примера, как за предыдущие 30 лет полностью развалили лёгкую промышленность, сколько закрыли НИИ, фабрик и т.д.
Это scaffolding называется, собственно в Rails 1.x он и появился (в Rails 1.2 его с REST подружили), а потом уже все остальные скопировали.
Ну, строго говоря, хорошо читаемый язык от плохо читаемого отличает в том числе и читабельность однострочников. Другими словами, write-only однострочник можно на чём угодно написать… А вот такой однострочник, который читался бы не хуже чем verbose-вариант, очень мало языков позволяют писать… и Python, к сожалению, к ним не относится. В основном, тому виной плохо согласованная стандартная библиотека, которая так и не определилась процедурная она или объектно-ориентированная, в каком порядке должны следовать аргументы и т.д. В принципе, такие же проблемы есть и в PHP, поэтому с PHP на Python можно легко перейти… Но перейти с того же Ruby на Python крайне сложно, т.к. к хорошему быстро привыкаешь :-)
Замечу, что помимо Ruby есть ещё много языков с прекрасно продуманной стандартной библиотекой, например C#, Haskell, Elixir.
Вот Вы развели то ветку…
В данном случае, речь вообще о конкретной девушке… Даже фото над этой фразой есть. Или Вам определённый артикль нужен, чтобы не казалось?
Ну так-то да, особенно если не ASCII, но просили пример попроще, чтобы новичку легко читалось…
Кстати, для демонстрации возможностей можно ещё и по символам range использовать:
Мне кажется, с ЦА промашка вышла в плане рекламы..
Сайт-визитку на VPS? Уж что-что, а Wordpress можно на любом shared-хостинге поднять… За 80 руб/месяц уже можно достаточно приличный найти. И этот несчастный Wordpress прям из админки хостинга установить.
Ага, я когда читал, подумал… зачем там вообще генерация HTML, прикрутил бы лучше XSLT для полного BDSM-набора :-)
Спасибо, отличное уточнение. Буду знать, что в Python тоже так можно сокращать.
Я на Python не программирую, чисто на уровне чтения читабельного кода с ним знаком, поэтому просто взял вариант ближе к классическому набору map/filter/reduce. Хотя генераторы в Python пользуются большой популярностью, подозреваю, что они там тупо быстрее работают :-)
Ну, это Вы немного схитрили… заранее подготовив range.
Аналог второго варианта на Ruby выглядит на Python так:
А первый вариант, емнип, стандартной библиотекой Python не решается, придётся свою функцию писать для разбиения массива на чанки.
P.S. В любом случае, однострочники на Python лучше даже не пытаться писать, это ни разу не его сильная сторона. Получается довольно страшненько и практически нечитаемо.
Это извечный философский вопрос: Что значит "изучил язык"?
Вопрос этот не ограничивается языками программирования… и для естественных языков придумали такое понятие как уровень владения. И по факту с годами это почти не коррелирует. Точнее, очевидно, что для освоения языка на уровне С2 требуется несколько лет. Но обратное не верно, т.е. можно десятилетиями активно и успешно пользоваться языком, но не владеть им на уровне C2. Более того, практическая ценность такого уровня владения весьма спорна.
То же справедливо и для ЯП, изучить язык на уровне B2 достаточно для решения более 90% практических задач, вне зависимости от чьих-то представлений.
Ruby — неплохой вариант для начинающих. Тут я не спорю.
Однако, примеры Ваши даже программистам не понять… Потому что они нелогичны! Посмотрите, в какой ступор Вы вогнали бедного Eudokimoff своим "13.to_s.length.nil?".
Я уверен, что любой пример должен делать что-то осмысленное, ну например ASCII-табличку печатать:
или
Это он сможет переписать на Python и сравнить… А код, напрочь лишённый смысла, нельзя сравнить с кодом на другом языке.
Ну, для обучения тому, как работает машина Тьюринга, Brainfuck вполне сойдёт. Несмотря на свою эзотеричность, это не самый бесполезный ЯП.
Пфф, а что с ней так? Зачем делать то, что будет медленнее, когда сделать нормально не составляет никакого труда:
array.sort! {|a, b| b <=> a}Зачем писать белиберду "13.to_s.length.nil?" в качестве примера? Или Вы поставили себе задачу показать, как не надо писать на Ruby?
Пожалуйста, прекратите позорить Ruby своими примерами… Никто в здравом уме не будет так делать сортировку в обратном порядке.
Для демонстрации цепочек вызовов прекрасно подходят ActiveRecord, Ransack и т.д., проще говоря, те случаи, где уместен паттерн Fluent Interface.
13.to_s.length.nil?— это абсолютно бессмысленный код… видимо, с целью показать, что методы можно объединять в цепочки.Мне кажется, там речь скорее о неуверенности в перспективах развития отрасли… Посмотрите, для примера, как за предыдущие 30 лет полностью развалили лёгкую промышленность, сколько закрыли НИИ, фабрик и т.д.
При этом map & filter реализуются через reduce, а reduce — через рекурсию )))
Для новичков обычно "Выразительный JavaScript" советуют.
Зачем свой велосипед пилить? Есть же ETS, но сути аналог memcached, только быстрее.
В качестве дополнительной обёртки можно ConCache использовать.