FizzBuzz четыре варианта решения на JS

  Рет қаралды 50,297

S0ER

S0ER

3 жыл бұрын

#soer #itubeteam
Основной канал для общения и публикации новых видео - Телегарм - t.me/softwareengineervlog
Спонсорство - donate.s0er.ru
Сайт платным контентом - soer.pro
Зеркало для видео Дзен Видео - zen.yandex.ru/id/5f578bdf22e2...
GitHub - github.com/soerdev
Чат для программистов - / discord
Группа ВК - codeartblog

Пікірлер: 259
@S0ERDEVS
@S0ERDEVS 3 жыл бұрын
00:00 Введение 01:10 Структурное программирование 04:20 Программирование с флагами 07:15 Функциональное программирование 10:22 Архитектура решения 18:00 ООП Исходники - www.patreon.com/posts/41484631
@KostiaBazrov
@KostiaBazrov 3 жыл бұрын
Легче без бумаги
@optimusprime9456
@optimusprime9456 3 жыл бұрын
Видно, половина комментаторов не поняли, о чем видео... надо было отдельно подчеркнуть, что прелесть ООП не чувствуется на учебных примерах, нужен большой код) На мелких можно только показать принцип, как это выглядит...
@vasilyh4588
@vasilyh4588 3 жыл бұрын
@@optimusprime9456 ну это вина демонстратора, который на таком коротком коде пытается показать преимущества ООП. Он же такой пример выбрал. С другой стороны, если пример будет жирный - все уснут на середине.
@iuriiankudinov9131
@iuriiankudinov9131 3 жыл бұрын
Отличный пример ООП. Не знание этих приёмов является частой причиной, по которой люди говорят, что в IT не войти - не берут на работу. В то же время это отличный пример, как из 10 строчек абсолютно работающего и удовлетворительного кода можно развернуть целый листинг без изменения функциональности. Если сюда добавить еще продакт оунера, проджект менеджера, тим лида, тестировщика и бухгалтерию - то вокруг этой задачи можно построить IT компанию Fizz Buzz Corp с бюджетом равным бюджету города Саратова. Иногда достаточно написать 10 строчек работающего кода силами одного программиста и запустить продукт ))
@mikaelgevorgyan4521
@mikaelgevorgyan4521 3 жыл бұрын
const fb=(x,y,z)=>for(let i = 0;i{ let a = i%y,b = i%z; (!a && !b)? 'FizzBuzz':( !a)? 'Fizz':(!b)? 'Buzz': i; } fb(100,3,5);😎😎😎 А вот так ещё динамичнее может не хотим было деления на 5 и 3.Может хотим не 100 было,а 50 либо 400 и т.д!Предётся менять в твоих примерах менять почти везьде=)),а так даёшь 3 цифры и меняется смотри где именно!
@cover24158
@cover24158 3 жыл бұрын
Нужно больше архитектуры и ООП на канале, банальные вещи везде разжеваны, а чуть глубже копнешь и всё - тьма.
@adentube746
@adentube746 3 жыл бұрын
полностью поддерживаю
@crutchmaster9637
@crutchmaster9637 3 жыл бұрын
Так в этом всё ООП. Красиво там только на примере с кошечкой мяу и собачкой гав-гав. Но попробуй реализовать таким образом хотя бы всё семейство кошачих. Получишь название интерфейсов на 5 строк, по классу на каждый метод или swith-case лапшу внутри (что ересь).
@konstantinsemenov1627
@konstantinsemenov1627 3 жыл бұрын
@@crutchmaster9637 ооп ооп рознь. Для разных задач существуют разные архитектурные шаблоны. Для кошечек и собачек обратите внимание на ECS шаблон проектирования. Для API MVC. Для интерфейсов MVVM + flux и т.д.
@crutchmaster9637
@crutchmaster9637 3 жыл бұрын
@@konstantinsemenov1627 ECS для ООП - это всё равно, что делать EAV для РСУБД. Проще говоря, ооп тут будет уже не при чём.
@user-vc7hw9co5b
@user-vc7hw9co5b 3 жыл бұрын
гугли на английском
@MrTandem31
@MrTandem31 3 жыл бұрын
Извращения из мира программирования, прикольно ) Началось с легкой эротики
@zmeygavrilych
@zmeygavrilych 3 жыл бұрын
Началось с петтинга )
@JohnWickMovie
@JohnWickMovie 3 жыл бұрын
А концовка в виде BDSM
@ArtemKuznetsovTV
@ArtemKuznetsovTV 3 жыл бұрын
5. Использовать микросервисную архитектуру. 6. Использовать MapReduce, чтобы можно было задачу решить на кластере :)
@evgenasd8892
@evgenasd8892 3 жыл бұрын
Что почитать чтобы заложить правильную архитектуру на старте?
@P1oN4ik
@P1oN4ik 3 жыл бұрын
7. Обучить нейроночку.
@Gregory-vc2vs
@Gregory-vc2vs 3 жыл бұрын
8. Нейрозапрограммировать собеседующего, что ты выполнил задачу
@narzaru
@narzaru 3 жыл бұрын
@@Gregory-vc2vs нейтрализовать собеседующего.
@andrewalyabyev7923
@andrewalyabyev7923 3 жыл бұрын
@@evgenasd8892 чистая архитектура. Роберт Мартин
@CHERNOMORGAMES
@CHERNOMORGAMES 3 жыл бұрын
07:17 Какая красота! ФП - райское наслаждение :)))
@overparser
@overparser 3 жыл бұрын
Спасибо большое, давно ищу хоть какую то информацию по разбору архитектуры.
@DraginAnatoliy
@DraginAnatoliy 3 жыл бұрын
Спасибо за видео, Соер, был бы рад увидеть на канале больше нативного js и решения часто встречаемых задач)
@user-vu6hn4ul2i
@user-vu6hn4ul2i 3 жыл бұрын
Комменты делятся на два типа: 90% ООП говно, зачем так усложнять? 10% Блин, нужно изучать архитектуру
@LRXAORLOV
@LRXAORLOV 3 жыл бұрын
Очень хорошо обучающий ролик по архитектуре) хотелось бы больше таких) с разными примерами и паттернами)
@M27B_our_victory
@M27B_our_victory 3 жыл бұрын
Интересно подаете материал, часто стал вдохновляться вашими видео, по больше про js и python!))Если возможно!)
@user-sj4oy1el5y
@user-sj4oy1el5y 3 жыл бұрын
Мир нуждается в таких видосах! Спасибо сенсей, все круто!
@rinatvaliullov3247
@rinatvaliullov3247 3 жыл бұрын
Спасибо за разбор задачи FizzBuzz с примерами решений. Очень полезно и интересно! Даёшь отдельный ролик про SOLID. А может и серию роликов )
@Vnikny
@Vnikny 3 жыл бұрын
Функциональное решение - это гамма эмоций. Сначала такой "ЧЁ Б..?", а потом "ОГО!!! Круто! Тоже так хочу"
@user-is9fv5bi7x
@user-is9fv5bi7x 3 жыл бұрын
Шикарный урок. Спасибо.
@old-empire
@old-empire 3 жыл бұрын
Круто! Очень доступно
@clumsy_weirdo
@clumsy_weirdo 3 жыл бұрын
Красава! Когда под рукой появилась эта задачка не мог оставить ее в покое, постоянно усложнял реализацию... ты указал на мой пробел, архитектуры реально не хватает, а я концентрировался на структурах и алгоритмах. Красава!)
@karimkimsanbaev7932
@karimkimsanbaev7932 3 жыл бұрын
Потрясающее видео, сам натыкался на собеседовании на такую задачу, когда устраивался программистом. Сейчас раскопал, посмотрел свое решение, делал ifками, но в отдельном для этого классе, старался следовать mvc Меня все таки взяли, но увидев 4-ое решение, я готов аплодировать стоя. Отличный пример проектирования сложных архитектурных систем на пальцах) Спасибо большое) Хочется полный разбор с принципами SOLID, чтобы понять их на примере, это всегда проще, чем теория)
@fpv_am
@fpv_am 3 жыл бұрын
А я то думал что знаю ооп.......... Вот это да.... Женя выдал.... - тыща к самооценке
@eugenijusmargalikas6237
@eugenijusmargalikas6237 3 жыл бұрын
Спасибо. Часть про ООП помогла осознать достоинства такого подхода. А так же, минуя джунов и мидлов прыгнуть сразу в синьоры, решив тестовое задание в таком стиле. ;)
@user-rq3oz7ug8j
@user-rq3oz7ug8j 3 жыл бұрын
Крутяк! Спасибо за видео
@MrAlexander88m
@MrAlexander88m 3 жыл бұрын
Я сейчас читаю книгу Cracking the Coding Interview, и там ни слова про такой подход OOP не сказано. Спасибо тебе SSoEr! Открыл глаза!
@hellothere9195
@hellothere9195 3 жыл бұрын
Бритва окамы порезала вены от этого видоса
@bukanaka
@bukanaka 2 жыл бұрын
😂😏
@crutchmaster9637
@crutchmaster9637 3 жыл бұрын
В ооп варианте тоже есть фатальный недостаток. Он заключается в названии класса TagNumRulesCollection. Как рос бы лапшекод в первом варианте, также будут расти названия и количество классов с 1 методом в 4-м. Правильнее ли это? Возможно. Но иногда бывает абсолютно избыточно. Встречал такое, что вместо 10 строчек кода делали 20 классов и интерфейсов, в итоге вместо добавления одной строчки надо было наследовать 3 класса. С тех пор у меня психотравма и при виде ООП начинает трясти. Хотелось бы еще посмотреть на декларативный вариант.
@ev_geniy17
@ev_geniy17 3 жыл бұрын
Спасибо за видео, почерпнул новое, функциональное программирование мне ближе к сердцу, но по опыту работы с легаси кодом все больше склоняюсь к ООП и понимаю что для бизнеса на серьезных проектах использование различных паттернов и соблюдение солид должно быть прописано в договоре найма сотрудников. К сожалению создание похожих архитектур для меня еще является довольно сложной задачей
@andreyzhukov2821
@andreyzhukov2821 3 жыл бұрын
Какое же это классное видео! Спасибо!
@ArchakovBlog
@ArchakovBlog 3 жыл бұрын
Последний вариант прям кайф. Помню на собесе уровня Middle давали такую задачку, что было странно.
@sayeretjob
@sayeretjob 3 жыл бұрын
вау-как четко и интересно
@evgeniym29
@evgeniym29 3 жыл бұрын
Приветствую. Буквально на днях, в одном JS чате, ради прикола написал решение этой задачи в одну строчку в ФП стиле. Мне сказали, что люди так не пишут, обвинили в ереси и наверное сожги бы на костре, ибо функция то работала, а они не понимали как. Тут до меня дошло, что они никогда не видели Perl или Lisp :) Но увидев твой SOLID.... В общем, я понял, что в плане троллинга мне еще есть куда расти. Браво!
@moon.trance
@moon.trance 3 жыл бұрын
Строчку в студию.
@user-vu6hn4ul2i
@user-vu6hn4ul2i 3 жыл бұрын
@@moon.trance ну третье решение из видео.
@1kvolt1978
@1kvolt1978 Жыл бұрын
Покажи в одну строчку, пожалуйста. Интересно сравнить с моей.
@ms-33
@ms-33 3 жыл бұрын
Спасибо!
@AndreiVvedenskii
@AndreiVvedenskii 3 жыл бұрын
только вчера решал эту задачу на codewars для RSSchool))
@dmitriyart2989
@dmitriyart2989 3 жыл бұрын
Мой любимый js!
@a.osethkin55
@a.osethkin55 2 жыл бұрын
Огонь!
@timurdanilenko3582
@timurdanilenko3582 3 жыл бұрын
Я бы "Программирование с флагами" , в функции isFizzBuzz вместо явного выражения добавил вызов двух предыдущих. Вот тебе и расширяемость. Вдруг для Fizz условие поменяется? Не менять же его везде function isFizzBuzz(n) { return isFizz(n) && isBuzz(n); }
@mikaelgevorgyan4521
@mikaelgevorgyan4521 3 жыл бұрын
Учись=)))!!!Условия можно и в переменную сделать! const fb=x=>for(let i = 0;i{ let a = i%5,b = i%3; (!a && !b)? 'FizzBuzz':( !a)? 'Fizz':(!b)? 'Buzz': i; } fb(100); Зачем менять условия в условии=)).Их всего лишь два же.Возьмем в локальную либо глобальную переменную и всё!!!После используй их!
@timurdanilenko3582
@timurdanilenko3582 3 жыл бұрын
@@mikaelgevorgyan4521 Ну ты крут. Что-то вроде анонимных классов. А "!" это ж вроде отрицание? Я в JS не особо, пока что писал только на ++, Delphi, FoxPro, 1C. Но все впереди.
@user-vu6hn4ul2i
@user-vu6hn4ul2i 3 жыл бұрын
@@mikaelgevorgyan4521 во-первых, работать не будет: ff объявлена через экспрешн ниже места, где используется; fb нужно всё равно оборачивать в фигурные скобки, т.к. у тебя не в одну строку. Во-вторых, а что ты нового привносишь в уже показанные решения?
@user-vu6hn4ul2i
@user-vu6hn4ul2i 3 жыл бұрын
@@mikaelgevorgyan4521 ну и return из ff нет.
@petrvictorovich
@petrvictorovich 2 жыл бұрын
@@mikaelgevorgyan4521 ff=i, fb=x - а зачем эти двойные присвоения?
@stranger271271
@stranger271271 3 жыл бұрын
Идеально мне понравилось
@asdffewfew
@asdffewfew 3 жыл бұрын
было интересно. можете рассказать про unit тесты?
@user-ri5jr2xm3d
@user-ri5jr2xm3d 3 жыл бұрын
Нифига он умный👍👍👍
@Veujin
@Veujin 3 жыл бұрын
В последнем примере от дефолтного значение лучше избавиться в find. в TagNameRule можно передавать что-то вроде билдера тега, а не готовый тег. внутри find инстанцировать тег билдером, передавая ему num. так появится новое правило в коллекции, к которому можно будет написать стратегию TrueCondition. если find ничего не нашел, возвращать nil таким способом все правила будут описаны в коллекции правил, а логика дефолтного значения уйдет из того места, где вызывается find
@VladykaVladykov
@VladykaVladykov 3 жыл бұрын
Так вот почему все врёмя не хватает новым программам памяти и производительности процессора!!!!
@P1oN4ik
@P1oN4ik 3 жыл бұрын
да, потому что от функциональщины куча проверок и потерь на неверных предположениях процессора о ветвлении кода )
@vyacheslavgvorus3883
@vyacheslavgvorus3883 3 жыл бұрын
@@P1oN4ik Не хватает писателям понимания, что код хороший тогда, когда он интуитивно понятен даде новичку и использует всем известные паттерны. А зная паттерны, вся архитектура как карта, и добавить новое поведение намного быстрее и проще. Не нужно выделываться в сокращениях. Видео класс!
@evgenasd8892
@evgenasd8892 3 жыл бұрын
Vyacheslav Gvorus согласен что зная паттерны- архитектура как карта, Но как научиться самому выбрать верный паттерн для задачи?
@mikaelgevorgyan4521
@mikaelgevorgyan4521 3 жыл бұрын
@@vyacheslavgvorus3883 Ойщ какие паттерны последняя😁😂🤣,даже смотреть не за хотелось мне!!!Там заворухо классов,в которых не увидел смысла FrizzBuss.Говорит об функциональности,а сам классы пишет=)))!!!Функциональность сила в JS.Функциональность это и есть динамичность и преимущество в нём!!!Просто надо уметь писать.А так же первый вариант был прощще и читабельнее.Просто надо найти подход.А не писать классы 😁😁,даже в реакте мало преимуществ у классов чем в функционале=))!!
@optimusprime9456
@optimusprime9456 3 жыл бұрын
@@mikaelgevorgyan4521 А ничо, что это пример? А на простых примерах невозможно понять, в чем смысл ООП. Он хорошо раскрывается только на больших программах.
@user-br4gt7xu2j
@user-br4gt7xu2j 3 жыл бұрын
почему числа в константы не вывели понятно, но строковые fizz и buzz не лучше ли тут вывести в private final variables?)
@anazkomult
@anazkomult 3 жыл бұрын
Я думал что начал понимать программирование, но господин СОЕР просто взял и поставил на место.
@SlavaCh
@SlavaCh 3 жыл бұрын
Можно ещё так if(value===1) return 1; if (value===2) return 2: if(value===3) return “Fizz” .... if(value===100) return “Bus”
@vlad-yelnikov
@vlad-yelnikov 3 жыл бұрын
можно, но не нужно - много лишнего кода в котором нет смысла
@drovoseg
@drovoseg 3 жыл бұрын
Почему-то никто не заметил что во втором примере все три оператора if лишние, надо сразу возвращать boolean. И в ООП MAX_NUM = 100 неверное название, максимальное же по факту 99. Ну и можно его инкапсулировать в еще один класс вместе с циклом, раз уж в ООП стиле делаем.
@zcbesaba
@zcbesaba 3 жыл бұрын
Я вдохновился вашим примером и тоже наговнякал console.log(...[...Array(100).keys()].map(i=>(++i%3==0?"Fizz":'')+(i%5==0?"Buzz":'') || i))
@mykola_antal
@mykola_antal 3 жыл бұрын
Зачем до 100 (от 0 до 100 будет 101 елемент), если после инкремент все равно первым выполняется (а не проверка условия на 0)
@zcbesaba
@zcbesaba 3 жыл бұрын
@@mykola_antal я просто тестил на 10 элементах, и в итоговом варианте дописал 0 и всё
@McNeelone
@McNeelone 3 жыл бұрын
CodeWars любит подобные примеры))
@mantrida
@mantrida 3 жыл бұрын
Жесть! Попробовал то же самое на Пуктоне написать, думал не прожуёт такую дичь. А нет получилось... print(*map(lambda i: ('Fizz' if i % 3 == 0 else '') + ('Buzz' if i % 5 == 0 else '') or i, range(1, 101))) Изначально, то что сам придумал, было раза в два длиннее. Никогда бы не додумался, что так можно, если бы этот пример не увидел...
@Mitreskotv
@Mitreskotv 3 жыл бұрын
Сторонник первого варианта. Все просто и понятно. Если задача решается просто, зачем усложнять? всеми любимый KISS. Если мы знаем о будущих изменениях, или думаем наперед и предполагаем изменения, то возможно другие подходы лучше. Switch(true) для меня ад. можно например в том же if (isBuzz(i)) структуру не менять. Если это вопрос на архитектуру - спору нет. Если вопрос на "сделай" - для меня лучше чем первое решение нет. Разве можно избавится от magic Numbers.
@nickml5138
@nickml5138 3 жыл бұрын
Крутое видео!) На 6:24 ESlint ругался бы if (n % 5 === 0) { return true } return false попросил бы заменить на return n % 5 === 0
@MisterGenix
@MisterGenix 3 жыл бұрын
Я хоть и не eslint, но тоже удивился зачем так писать, мож кто подскажет?
@kuzymaks180
@kuzymaks180 3 жыл бұрын
соер а ты похудел сильно)
@vasilyh4588
@vasilyh4588 3 жыл бұрын
OOP решение (да впрочем и почти все остальные) нарушает ОСНОВНОЙ принцип программирования - KISS.
@user-vd4ng2hu3t
@user-vd4ng2hu3t 3 жыл бұрын
"...нарушает ОСНОВНОЙ принцип программирования - KISS MY ASS..."
@ms-33
@ms-33 3 жыл бұрын
Что за принцип?
@LWHikarik
@LWHikarik 3 жыл бұрын
Фигня, вопрос лишь в уровне решения и его задачах
@dimeliora
@dimeliora 3 жыл бұрын
@@ms-33 keep it simple, stupid. Короче, не усложняй без надобности.
@bubblesort6368
@bubblesort6368 3 жыл бұрын
Вы же понимаете, что это искусственный пример? Намерено взята максимально простая задача, чтоб вы как зритель могли сосредоточится на парадигмах программирования, а не на осознании поставленной задачи? ООП в принципе рассчитано на декомпозицию сложной логики с целью упростить ее понимание. Вне этого контекста это стрельба из пушки по воробьям.
@GoldiPlatinum
@GoldiPlatinum 3 жыл бұрын
А где стримы можно найти?
@user-sn7pp1uz6m
@user-sn7pp1uz6m 3 жыл бұрын
22:55 прикольно, а где больше об этом узнать можно? впервые с таким сталкиваюсь
@AlexanderSavchenko91
@AlexanderSavchenko91 3 жыл бұрын
какую книгу надо прочитать чтобы хотя бы примерно приблизиться к такому ООП?)
@kyrylo_alekseev
@kyrylo_alekseev 3 жыл бұрын
Как насчёт принципа читаемости кода?
@semenpetrov9456
@semenpetrov9456 3 жыл бұрын
не совсем понял что такое тег и что значит тегирование?
@AnonAristotel
@AnonAristotel 3 жыл бұрын
А в JS break на switch, не на цикл for? За видео плюс!
@qwe-rty-
@qwe-rty- 3 жыл бұрын
Что делать, если не понял ООП подход? Как это вообще, что это? Я пересмотрел уже несколько раз. Что нужно знать, чтобы так мыслить? И как вообще понять, какой подход мне нужен? Подскажите, пожалуйста. Почитал много комментариев ниже, не особо помогло, конечно, хотелось бы книжку какую-то, но я пробовал читать Мартина про чистую архитектуру, там сложно...
@mou8285
@mou8285 3 жыл бұрын
Если возможно, выводи код с номерами строк, так на него проще ссылаться
@user-nr7vt6it5y
@user-nr7vt6it5y 3 жыл бұрын
Очень понятно объясняешь, спасибо ! Скажи пожалуйста что такое true в switch 4:44. В ней же должно быть i. ???
@yehorazyrankulov553
@yehorazyrankulov553 3 жыл бұрын
Это значение, которе будет сравниваться с кейсами.
@zhenshuang
@zhenshuang 3 жыл бұрын
Свич проверияет все условия по очереди, и где условие выдаёт true, там выходит через break.
@MisterGenix
@MisterGenix 3 жыл бұрын
А для чего вместо return условие возвращать отдельно true и false разными строками?
@user-ft9fw5gn3o
@user-ft9fw5gn3o 3 жыл бұрын
@@MisterGenix чтобы уточнить, что функция возвращает булево значение. Для наглядности
@MisterGenix
@MisterGenix 3 жыл бұрын
Степан Савельев там Соер ниже пояснил уже, что для исключения ложных срабатываний при передаче нечисловых значений
@McMeil
@McMeil 3 жыл бұрын
как получить такие навыки в проектировании: что читать, где учить? можете дать список литературы? в любом случае спасибо - понял сколько всего нужно изучать
@mykola_antal
@mykola_antal 3 жыл бұрын
Большие компании, окружение специалистов в этой области на голову выше, и конечно же практика. Литература конечно хорошо, но лучше ее читать во время решения задач или попытке понять почему было принято какое то конкретное решение
@evgenasd8892
@evgenasd8892 3 жыл бұрын
А у меня столько раз проектирование не оправдовало дальнейшее расширение проекта, что я поддержу вопрос в комментарии: что почитать чтобы верно определить необходимый паттерн для проектирование архитектуры задачи?
@McMeil
@McMeil 3 жыл бұрын
@@mykola_antal спс, но это я и сам понимаю) много работать, много учить, думать и анализировать)
@ivankiselev8672
@ivankiselev8672 3 жыл бұрын
Попробуй "Программист-прагматик", 2е издание
@McMeil
@McMeil 3 жыл бұрын
@@ivankiselev8672 спс, посмотрю)
@megaman13able
@megaman13able 3 жыл бұрын
18:36 Что здесь значит нижнее подчеркивание у аргумента?
@vlad-yelnikov
@vlad-yelnikov 3 жыл бұрын
подчеркиванием принято обозначать protected property в JavaScript
@uncle-xxi
@uncle-xxi 3 жыл бұрын
Во втором примере стоило бы isFizz и isBuzz переиспользовать :)
@alikhanmukhanaliyev2857
@alikhanmukhanaliyev2857 3 жыл бұрын
Вау. Иду покупать патрона для доступа к стримам по архитектуре
@drygdryg2
@drygdryg2 3 жыл бұрын
Спасибо за видео. Третье решение поставило меня в тупик: сижу и думаю, как это реализовать на Nim lang
@levovix
@levovix 3 жыл бұрын
у меня получилось что-то такое: proc gen(n: int, w: string): proc(num: int): string = return proc(num: int): string = if num mod n == 0: w else: "" let fizz = gen(3, "Fizz") let buzz = gen(5, "Buzz") for i in 1..
@waldemarkunz9173
@waldemarkunz9173 3 жыл бұрын
switch "синтаксический сахар" :D
@uranproject
@uranproject 2 жыл бұрын
а есть что-нибудь про протокольно ориентированного программирования?
@cafedead
@cafedead 4 ай бұрын
Соер, оцени FizzBuzz от Мурыча. Тебе понравился!😂
@kazarovroman
@kazarovroman 3 жыл бұрын
Очень крутое видео. Спасибо за него. Очень понравился подход ООП. Но признатся чесно я не понял, очень тяжелая логика(для меня) и представить не могу что я должен сделать что бы мыслить так же. Я повторил код на JS. Потом переписал его на C#. Часами дебажил. В принципе понял как работает, но всеравно через боль. Ребят посоветуйте пожалуйста как можно изучить и оттачивать этот навык(мкасимально конкретно). Соеру еще раз большое спасибо!!!
@alexsanderdolov1945
@alexsanderdolov1945 3 жыл бұрын
Вообще, идея тегирования очень крутая - по сути наша нейросеть работает по методу тегирования, где совокупность определенных связей и весов обозначена каким-то тегом(в данном случае отедльный неройн - это уже тэг) А вся нейросеть - это иерархия тегов. Только имена им никто не дает. А дальше, когда уже тег образовался, по сути он может отдавать своё значения выше или ниже другим, чтобы те образовывали свои на их базе теги. Т.е. если нейрон ответственнен на данном уровне за горизонтальную линию, то это изображение он тегирует тогда, когда видит эту линию на изображении. Только тут ещё и с процентами теги, а не бинарные. (Четкие и нечеткие теги :) ) Может создать свой язык на основе тегов? :) И там будет уже не ООП, а Тегировано Ориентированное Программирование. :)
@rellez5442
@rellez5442 3 жыл бұрын
8:59 создастся массив от 1 до 99)
@AAGeine
@AAGeine 3 жыл бұрын
Уверен, большинство лайкнуло не понимая за что ...
@mikaelgevorgyan4521
@mikaelgevorgyan4521 3 жыл бұрын
Тоже можно 😂🤣😃😁!!Мне первые понравились=))!!!
@maxpapirovnyk4304
@maxpapirovnyk4304 2 жыл бұрын
SOLID +
@mmclist9926
@mmclist9926 3 жыл бұрын
ждём четвёртой реализации на brainfuck :)
@iloveclimbru
@iloveclimbru 3 жыл бұрын
Использование тэга для вывода чисел отдает костылем. Вам так не кажется?
@vasalib
@vasalib 3 жыл бұрын
Я js не знаю, но первые три примера более-менее понятны. Но в ООП такое накрутили... Мне бы понять, приведенный пример кода вообще рабочий или это только некий каркас?
@pythononelove5882
@pythononelove5882 3 жыл бұрын
Это gan x?
@MaximRovinsky
@MaximRovinsky 3 жыл бұрын
Не JavaScript но пример интересный. Взято где-то из интернета, мне показалось лаконичным. Вариант который печатает только заданные числа for i = 1; i
@sergeys4732
@sergeys4732 3 жыл бұрын
Это go
@MaximRovinsky
@MaximRovinsky 3 жыл бұрын
Верно, но пример чисто для наглядности. Вдруг кому-то пригодиться
@user-vu6hn4ul2i
@user-vu6hn4ul2i 3 жыл бұрын
@@MaximRovinsky чем решение отличается от первого в видео?
@MaximRovinsky
@MaximRovinsky 3 жыл бұрын
отличие первого варианта, что код выводит только те числа, которые нам нужны (а не всех подряд) + другой подход проверки. Пример просто для подумать, для расширение кругозора
@asd-sl1kv
@asd-sl1kv 3 жыл бұрын
вот ты мужик любишь джаваскриптик
@VseNikiSukaZanyaty
@VseNikiSukaZanyaty 3 жыл бұрын
осталось только перемешать два последних способа
@shamilsalakhutdinov5519
@shamilsalakhutdinov5519 3 жыл бұрын
Мне эта задача на экзамене в школе 21 попалась)
@user-vu6hn4ul2i
@user-vu6hn4ul2i 3 жыл бұрын
Этой задаче 100 лет в обед. Классика, хуле.
@user-vu6hn4ul2i
@user-vu6hn4ul2i 3 жыл бұрын
Посоветуй что нибудь хорошее по архитектуре?
@snky_
@snky_ 3 жыл бұрын
SICP
@arseniyzuev353
@arseniyzuev353 2 жыл бұрын
Смысл fizzbuzz в том, что старые процессоры не имели аппаратного блока деления, и поэтому решения с mod или делением сильно проседали по времени выполнения по сравнению с решениями без. Но видимо это настолько забыто, что даж старичок Соер не в курсе. Классическое "правильное" решение - это два счетчика для 3 и 5, которые инкрементятся, потом типа counter3 ==3 => print(Fizz); counter3=0
@DimonEx
@DimonEx 3 жыл бұрын
В четвертом примере Java немного расплескалась по JavaScript? Познавательно, но зачем?
@JingoBo
@JingoBo 3 жыл бұрын
Можно решить шаблоном посетитель)
@linkernick5379
@linkernick5379 3 жыл бұрын
А код на ФП необязательно было делать нечитаемым, можно было точно также сделать поток, фильтры на основе правил и изолировать сайд-эффект (то есть вывод на экран).
@S0ERDEVS
@S0ERDEVS 3 жыл бұрын
Если накидаешь годный пример в ФП стиле, я его опубликую на стене.
@evgenasd8892
@evgenasd8892 3 жыл бұрын
какой паттерн применить нужно и нужен ли воопще паттерн? Лайк что бы Sorer разъяснил, как абстрактно представить задачу с использованием паттерна. Что поможет научить себя?
@user-sv3dc5nz8w
@user-sv3dc5nz8w 3 жыл бұрын
Это не решение в лоб. В лоб это так: 0. Циклы не нужны 1. Объявляем массив на 100 элементов 2. Каждый элемент - строковое значение физ, баз, либо физбаз, заполненное вручную 3. 100 строк console.println - вывод
@gelzenkirhenn
@gelzenkirhenn 3 жыл бұрын
Так в лоб только сенсей решает.
@user-vu6hn4ul2i
@user-vu6hn4ul2i 3 жыл бұрын
А память для массива бесплатная, да? 100 раз пишем console.log с нужным значением, это наш метод.
@user-sv3dc5nz8w
@user-sv3dc5nz8w 3 жыл бұрын
@@user-vu6hn4ul2i хз как в яваскрипе, а в Яве монописуально, думаю - что в массиве, что в принтлайне будут тупо поинтеры на стринг пул. Пара байт на сам массив не в счёт :) А в си, наверное, компилятор вообще сам цикл уберет и тупо скомпилит без массива. Но идея замечательная, если доработать ещё немного, то на govnokod можно выходить
@daniilzyubin2865
@daniilzyubin2865 3 жыл бұрын
Понять не могу - волосы в синий покрашены или это с цветами в видосе что-то?
@lollopin3362
@lollopin3362 3 жыл бұрын
С цветокоррекцией что-то
@vasya.k1n6
@vasya.k1n6 3 жыл бұрын
Первый - твой FizzBuzz, четвертый - FizzBuzz сына маминой подруги
@fun6789
@fun6789 3 жыл бұрын
Это видео наглядно показывает почему ФП вытесняет ООП, особенно на js
@etoyonker
@etoyonker 6 ай бұрын
Лапшекод и оверинжиниринг в чистом виде
@egorselyanin9739
@egorselyanin9739 3 жыл бұрын
Функциональная парадигма, говорите? А почему не на Хаскеле тогда? themonadreader.files.wordpress.com/2014/04/fizzbuzz.pdf
@alexsokol1086
@alexsokol1086 3 жыл бұрын
4:40 зачем if(bool) return true, когда можно return bool
@S0ERDEVS
@S0ERDEVS 3 жыл бұрын
Явное лучше неявного. Просто привычка флаги делать явно.
@vorontsovru270895
@vorontsovru270895 3 жыл бұрын
Сделал данную задачку на С# на случай, если тут будут люди, которые захотят сами разобрать принцип работы каждого из стилей без необходимости мучаться с JS =) github.com/Zodt/FizzBuzz/
@igor_quantumman
@igor_quantumman 3 жыл бұрын
Почему в функциональном решении gen, fizz и buzz объявлены как константы?
@user-vu6hn4ul2i
@user-vu6hn4ul2i 3 жыл бұрын
Потому, что в js так можно
@tarpaha
@tarpaha 2 жыл бұрын
Но ведь тут в коде сразу же ошибка. По условию дано 100 чисел. Цикл i = 1; i < 100; i++ работает с 99
@deniskulakov682
@deniskulakov682 3 жыл бұрын
Для меня ООП подход - это что то что облегчает реализацию. Но разработка такого подхода заключается в том что надо на столько "деградировать" в мышлении что бы декомпозировать. И на простом примере это уже сложно, а если задача реальная, то если не получится "деградировать" то все рассыпится на стадии реализации. Соер как научится "деградировать"?
@anzarsh
@anzarsh 3 жыл бұрын
Возникают 2 вопроса: 1. Применяют ли 4 способ в реальной практике на фронте? 2. Почему многие отказываются от парадигмы ООП?
@yevhendatsenko9989
@yevhendatsenko9989 3 жыл бұрын
Почему МИН_ВЕЛЬЮ не вынесен в константу ?
@d1namis
@d1namis 3 жыл бұрын
@S0ER забавный факт на Codegolf очень большой % програмистов провалились на этом задании. Видео ахеренное, кстати у этого кода есть маленькая спортная оптимизация: if (i % 15 === 0) {} elif % 5 {} elif % 3 {} else {} - короче ищем остаток от деления на 15 так как математика.
@user-mb4xy2cz3t
@user-mb4xy2cz3t 3 жыл бұрын
В этом проблема многих програмистов, вот простая же была задача, зачем туда лепить вот это 17:38? От прочтения цикла и пары-тройки ифов ещё никто не умирал, зато думаю постоянно разбирая вот такие Орхитектуры, сделанные для простых задач, можно словить раннюю аневризму
@user-ft9fw5gn3o
@user-ft9fw5gn3o 3 жыл бұрын
"От прочтения пары-тройки `(десятков)` ифов" умирают часы у других программистов, которым требуется поддержать твой код. Была простая задача, использовали непростой подход. Проблемой видео было решение задачи? Нет, проблемой видео было показать подход к решению задачи. Сегодня ты смотришь на решение ФизБаз, завтра тебе потребуется начать реализацию нового проекта, и тебе сразу станет понятно - понял ты то, что хотел донести автор, или не понял.
@user-mb4xy2cz3t
@user-mb4xy2cz3t 3 жыл бұрын
​@@user-ft9fw5gn3o Да нет, не умирают, зашёл, прочитал, понял, быстро дописал ещё иф если нужно. А чтобы разобраться как блин взаимодействуют классы в той архитектурной колбасе, как раз часы и тратятся. Проблемой видео не было, но люди насмотрятся таких видео, наслушаются что паттерны это круто и начинают пихать их просто везде. И видел я такие проекты. Например один из последних, написан по всем канонам Microsoft best practices, паттерны, микросервисы, технологии, вот это всё, реально толково написаны. Чел это писал полтора года, в нерабочее время. А просто и понятно это можно было написать за месяц, во всё то же нерабочее время и поддерживать это смог бы мидл, даже не крепкий, а в итоге поддерживают синьоры, потому что мидлы в нём разобраться просто не могут.
@simplewebdev1098
@simplewebdev1098 3 жыл бұрын
Привет, как тебе такое решение? Как вообще относишься к подобному стилю написания кода? class FizzBuzz { constructor(length) { this.arr = new Array(length).fill(null); this.fizz = this._fillByCondition(3, 'Fizz'); this.buzz = this._fillByCondition(5, 'Buzz'); } _fillByCondition = (cond, title) => () => { this.arr.forEach((item, index) => { this.arr[index] = (index + 1)%cond ? item : item ? item + title : title; }); return this; } fillEmptyIndices = () => { this.arr.forEach((item, index)=> this.arr[index] = item ? item : index + 1); return this; } print = () => { this.arr.forEach((item) => console.log(item)); return this; } } new FizzBuzz(100).fizz().buzz().fillEmptyIndices().print();
@nyannyan8243
@nyannyan8243 3 жыл бұрын
Так вот для чего нужны паттерны проектирования: чтобы писать многостраничные портянки ужасного, заумного объектно-ориентированного кода, с кучей аллокаций, фрагментирующих память и насилующих сборщик мусора...
@user-mb4xy2cz3t
@user-mb4xy2cz3t 3 жыл бұрын
При чём для решения простых задач
Follow @karina-kola please 🙏🥺
00:21
Andrey Grechka
Рет қаралды 13 МЛН
小路飞姐姐居然让路飞小路飞都消失了#海贼王  #路飞
00:47
路飞与唐舞桐
Рет қаралды 42 МЛН
SHE WANTED CHIPS, BUT SHE GOT CARROTS 🤣🥕
00:19
OKUNJATA
Рет қаралды 6 МЛН
FizzBuzz на Erlang
12:15
S0ER
Рет қаралды 9 М.
FizzBuzz: One Simple Interview Question
7:18
Tom Scott
Рет қаралды 3,5 МЛН
JS interview tasks | FizzBuzz | Online platforms for training problem solving
8:44
Front-end Science із Сергієм Пузанковим
Рет қаралды 11 М.
Follow @karina-kola please 🙏🥺
00:21
Andrey Grechka
Рет қаралды 13 МЛН