Допустим, вставить-вынуть кабель можно десять тысяч раз. А сколько проживут контакты в разъеме при 20В, 5А? Не будут ли они подгорать? Особенно, если не покупать совсем уж дорогие кабели.
Это IT, тут ничего не поделаешь. Но, если честно, лично я очень люблю обычные информационные сайты. Без хитровы… деланного оформления и всяких современных плюшек. Многим сайтам не хватает именно информации.
Веб-приложения — это из другой оперы. Это сайты, призванные заменить обычные приложения. Это особая отрасль, которая пересекается с информационными сайтами разве что технологиями и средой запуска.
Полученный результат не является каким-то завершенным программным продуктом, который рекомендуется использовать именно в таком виде. Как заготовку — да. Тут автор, скорее, не выставляет на всеобщее обозрение очередную библиотеку, а демонстрирует итерационный процесс разработки и ход своих мыслей. Отсюда много текста и кода, устаревающего уже в процессе чтения.
Еще один важный момент заключается в том, что мы рассмотрели только полноценные настольные веб-приложения с мышью в качестве устройства ввода. Пользователи могут пользоваться клавиатурой или мобильными устройствами, поэтому не забудьте предусмотреть альтернативные способы взаимодействия для сохранения дружественного интерфейса.
Либо вешать свои обработчики, либо дублировать действия в панели команд.
В данном случае оно не имеет большого значения, ибо относится к элементу списка задач. А узкий круг поддерживаемых браузеров хоть и развязывает руки, но возможен разве что для каких-то внутренних продуктов.
Потому что пост не об этом. Он о функциональном программировании. Примеры с for i in range(len(names)) здесь используются как примеры того, «как не надо писать» (конечно же, в контексте функционального программирования).
Нужен был пример «обычного» цикла, и используемый подходил как нельзя лучше.
Кроме того, в данном примере enumerate как раз и не нужен, так как имя из итератора не берется. Это видно из примера выше: for i, _ in enumerate(names). Вы собираетесь использовать итератор с сущностями, которые вам не нужны. Это просто лишнее усложнение. В вашем же примере вводится еще и новое имя name, которое не нужно.
Тут все зависит от задачи. Что-то делается через map или генераторы списков. Где-то достаточно
for i in names. Но если требуется именно цикл по списку/кортежу со знанием ключа текущего элемента, то такая конструкция вполне приемлема. Во-первых, в ней нет ничего плохого. Во-вторых, она смотрится не хуже, чем предложенное выше
names.index(name), и не имеет присущих этому варианту недостатков.
Другой вариант, не менее подходящий, в ответе к тому комментарию имеется.
x/xs мне ясны и знакомы еще из книги по Хаскелю. Скорее, интересовало именно сокращение fn. Будем считать, что с ним все ясно.
Про a — аккумулятор не задумался, ибо, просматривая пост в поисках примера, не обратил внимания, что оно исключительно к reduce относится здесь. Действительно удобно, возьму на заметку.
Это все здорово, но меня тут больше волнует именование переменных. Постоянно в именах не хватает краткости, но сложно бывает не ударяться в крайности. И в итоге половину времени, потраченного на разработку, уходит на выдумывание имени очередной переменной.
Аргумент _d и переменная d в assoc — это терпимое зло? Пусть даже с учетом краткости функции. Но допустим, что это набор абстрактных данных, пусть. А вот s не слишком ли кратко для последовательности чего-либо кроме символов?
fn и fns — насколько устоявшиеся сокращения? Всем ли оно понятно с первого взгляда?
И как таки вы именуете параметры в анонимных функциях? У меня обычно a, b, … или x, y, …. И выбираются как-то интуитивно. А здесь a, x заставили призадуматься даже.
Что вы так к дизайну автомобиля пристали? Это ж китайцы. Они выпустят автомобиль, а через месяц на ebay будут сменные чехлы по 10 баксов, как на айфоны. Захотел — поменял цвет. Захотел — кузов. Подороже можно и алюминиевый взять. И защитную пленочку на стекла.
Веб-приложения — это из другой оперы. Это сайты, призванные заменить обычные приложения. Это особая отрасль, которая пересекается с информационными сайтами разве что технологиями и средой запуска.
for i in range(len(names))здесь используются как примеры того, «как не надо писать» (конечно же, в контексте функционального программирования).Нужен был пример «обычного» цикла, и используемый подходил как нельзя лучше.
Кроме того, в данном примере enumerate как раз и не нужен, так как имя из итератора не берется. Это видно из примера выше:
for i, _ in enumerate(names). Вы собираетесь использовать итератор с сущностями, которые вам не нужны. Это просто лишнее усложнение. В вашем же примере вводится еще и новое имя name, которое не нужно.for i in names. Но если требуется именно цикл по списку/кортежу со знанием ключа текущего элемента, то такая конструкция вполне приемлема. Во-первых, в ней нет ничего плохого. Во-вторых, она смотрится не хуже, чем предложенное вышеnames.index(name), и не имеет присущих этому варианту недостатков.Другой вариант, не менее подходящий, в ответе к тому комментарию имеется.
Про a — аккумулятор не задумался, ибо, просматривая пост в поисках примера, не обратил внимания, что оно исключительно к reduce относится здесь. Действительно удобно, возьму на заметку.
Аргумент _d и переменная d в assoc — это терпимое зло? Пусть даже с учетом краткости функции. Но допустим, что это набор абстрактных данных, пусть. А вот s не слишком ли кратко для последовательности чего-либо кроме символов?
fn и fns — насколько устоявшиеся сокращения? Всем ли оно понятно с первого взгляда?
И как таки вы именуете параметры в анонимных функциях? У меня обычно a, b, … или x, y, …. И выбираются как-то интуитивно. А здесь a, x заставили призадуматься даже.