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

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

Пікірлер: 254

  • @S0ERDEVS
    @S0ERDEVS3 жыл бұрын

    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
    @cover241583 жыл бұрын

    Нужно больше архитектуры и ООП на канале, банальные вещи везде разжеваны, а чуть глубже копнешь и всё - тьма.

  • @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
    @MrTandem313 жыл бұрын

    Извращения из мира программирования, прикольно ) Началось с легкой эротики

  • @zmeygavrilych

    @zmeygavrilych

    3 жыл бұрын

    Началось с петтинга )

  • @JohnWickMovie

    @JohnWickMovie

    3 жыл бұрын

    А концовка в виде BDSM

  • @ArtemKuznetsovTV
    @ArtemKuznetsovTV3 жыл бұрын

    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
    @CHERNOMORGAMES3 жыл бұрын

    07:17 Какая красота! ФП - райское наслаждение :)))

  • @M27B_our_victory
    @M27B_our_victory3 жыл бұрын

    Интересно подаете материал, часто стал вдохновляться вашими видео, по больше про js и python!))Если возможно!)

  • @DraginAnatoliy
    @DraginAnatoliy3 жыл бұрын

    Спасибо за видео, Соер, был бы рад увидеть на канале больше нативного js и решения часто встречаемых задач)

  • @hellothere9195
    @hellothere91953 жыл бұрын

    Бритва окамы порезала вены от этого видоса

  • @bukanaka

    @bukanaka

    3 жыл бұрын

    😂😏

  • @fpv_am
    @fpv_am3 жыл бұрын

    А я то думал что знаю ооп.......... Вот это да.... Женя выдал.... - тыща к самооценке

  • @LRXAORLOV
    @LRXAORLOV3 жыл бұрын

    Очень хорошо обучающий ролик по архитектуре) хотелось бы больше таких) с разными примерами и паттернами)

  • @Vnikny
    @Vnikny3 жыл бұрын

    Функциональное решение - это гамма эмоций. Сначала такой "ЧЁ Б..?", а потом "ОГО!!! Круто! Тоже так хочу"

  • @user-vu6hn4ul2i
    @user-vu6hn4ul2i3 жыл бұрын

    Комменты делятся на два типа: 90% ООП говно, зачем так усложнять? 10% Блин, нужно изучать архитектуру

  • @overparser
    @overparser3 жыл бұрын

    Спасибо большое, давно ищу хоть какую то информацию по разбору архитектуры.

  • @user-sj4oy1el5y
    @user-sj4oy1el5y3 жыл бұрын

    Мир нуждается в таких видосах! Спасибо сенсей, все круто!

  • @rinatvaliullov3247
    @rinatvaliullov32473 жыл бұрын

    Спасибо за разбор задачи FizzBuzz с примерами решений. Очень полезно и интересно! Даёшь отдельный ролик про SOLID. А может и серию роликов )

  • @clumsy_weirdo
    @clumsy_weirdo3 жыл бұрын

    Красава! Когда под рукой появилась эта задачка не мог оставить ее в покое, постоянно усложнял реализацию... ты указал на мой пробел, архитектуры реально не хватает, а я концентрировался на структурах и алгоритмах. Красава!)

  • @evgeniym29
    @evgeniym293 жыл бұрын

    Приветствую. Буквально на днях, в одном JS чате, ради прикола написал решение этой задачи в одну строчку в ФП стиле. Мне сказали, что люди так не пишут, обвинили в ереси и наверное сожги бы на костре, ибо функция то работала, а они не понимали как. Тут до меня дошло, что они никогда не видели Perl или Lisp :) Но увидев твой SOLID.... В общем, я понял, что в плане троллинга мне еще есть куда расти. Браво!

  • @moon.trance

    @moon.trance

    3 жыл бұрын

    Строчку в студию.

  • @user-vu6hn4ul2i

    @user-vu6hn4ul2i

    3 жыл бұрын

    @@moon.trance ну третье решение из видео.

  • @1kvolt1978

    @1kvolt1978

    2 жыл бұрын

    Покажи в одну строчку, пожалуйста. Интересно сравнить с моей.

  • @karimkimsanbaev7932
    @karimkimsanbaev79323 жыл бұрын

    Потрясающее видео, сам натыкался на собеседовании на такую задачу, когда устраивался программистом. Сейчас раскопал, посмотрел свое решение, делал ifками, но в отдельном для этого классе, старался следовать mvc Меня все таки взяли, но увидев 4-ое решение, я готов аплодировать стоя. Отличный пример проектирования сложных архитектурных систем на пальцах) Спасибо большое) Хочется полный разбор с принципами SOLID, чтобы понять их на примере, это всегда проще, чем теория)

  • @eugenijusmargalikas6237
    @eugenijusmargalikas62373 жыл бұрын

    Спасибо. Часть про ООП помогла осознать достоинства такого подхода. А так же, минуя джунов и мидлов прыгнуть сразу в синьоры, решив тестовое задание в таком стиле. ;)

  • @old-empire
    @old-empire3 жыл бұрын

    Круто! Очень доступно

  • @crutchmaster9637
    @crutchmaster96373 жыл бұрын

    В ооп варианте тоже есть фатальный недостаток. Он заключается в названии класса TagNumRulesCollection. Как рос бы лапшекод в первом варианте, также будут расти названия и количество классов с 1 методом в 4-м. Правильнее ли это? Возможно. Но иногда бывает абсолютно избыточно. Встречал такое, что вместо 10 строчек кода делали 20 классов и интерфейсов, в итоге вместо добавления одной строчки надо было наследовать 3 класса. С тех пор у меня психотравма и при виде ООП начинает трясти. Хотелось бы еще посмотреть на декларативный вариант.

  • @ev_geniy17
    @ev_geniy173 жыл бұрын

    Спасибо за видео, почерпнул новое, функциональное программирование мне ближе к сердцу, но по опыту работы с легаси кодом все больше склоняюсь к ООП и понимаю что для бизнеса на серьезных проектах использование различных паттернов и соблюдение солид должно быть прописано в договоре найма сотрудников. К сожалению создание похожих архитектур для меня еще является довольно сложной задачей

  • @user-is9fv5bi7x
    @user-is9fv5bi7x3 жыл бұрын

    Шикарный урок. Спасибо.

  • @MrAlexander88m
    @MrAlexander88m3 жыл бұрын

    Я сейчас читаю книгу Cracking the Coding Interview, и там ни слова про такой подход OOP не сказано. Спасибо тебе SSoEr! Открыл глаза!

  • @timurdanilenko3582
    @timurdanilenko35823 жыл бұрын

    Я бы "Программирование с флагами" , в функции 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 - а зачем эти двойные присвоения?

  • @user-ri5jr2xm3d
    @user-ri5jr2xm3d3 жыл бұрын

    Нифига он умный👍👍👍

  • @ArchakovBlog
    @ArchakovBlog3 жыл бұрын

    Последний вариант прям кайф. Помню на собесе уровня Middle давали такую задачку, что было странно.

  • @user-rq3oz7ug8j
    @user-rq3oz7ug8j3 жыл бұрын

    Крутяк! Спасибо за видео

  • @zcbesaba
    @zcbesaba3 жыл бұрын

    Я вдохновился вашим примером и тоже наговнякал 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))) Изначально, то что сам придумал, было раза в два длиннее. Никогда бы не додумался, что так можно, если бы этот пример не увидел...

  • @AndreiVvedenskii
    @AndreiVvedenskii3 жыл бұрын

    только вчера решал эту задачу на codewars для RSSchool))

  • @sayeretjob
    @sayeretjob3 жыл бұрын

    вау-как четко и интересно

  • @ms-33
    @ms-333 жыл бұрын

    Спасибо!

  • @VladykaVladykov
    @VladykaVladykov3 жыл бұрын

    Так вот почему все врёмя не хватает новым программам памяти и производительности процессора!!!!

  • @P1oN4ik

    @P1oN4ik

    3 жыл бұрын

    да, потому что от функциональщины куча проверок и потерь на неверных предположениях процессора о ветвлении кода )

  • @vyacheslavgvorus3883

    @vyacheslavgvorus3883

    3 жыл бұрын

    @@P1oN4ik Не хватает писателям понимания, что код хороший тогда, когда он интуитивно понятен даде новичку и использует всем известные паттерны. А зная паттерны, вся архитектура как карта, и добавить новое поведение намного быстрее и проще. Не нужно выделываться в сокращениях. Видео класс!

  • @evgenasd8892

    @evgenasd8892

    3 жыл бұрын

    Vyacheslav Gvorus согласен что зная паттерны- архитектура как карта, Но как научиться самому выбрать верный паттерн для задачи?

  • @mikaelgevorgyan4521

    @mikaelgevorgyan4521

    3 жыл бұрын

    @@vyacheslavgvorus3883 Ойщ какие паттерны последняя😁😂🤣,даже смотреть не за хотелось мне!!!Там заворухо классов,в которых не увидел смысла FrizzBuss.Говорит об функциональности,а сам классы пишет=)))!!!Функциональность сила в JS.Функциональность это и есть динамичность и преимущество в нём!!!Просто надо уметь писать.А так же первый вариант был прощще и читабельнее.Просто надо найти подход.А не писать классы 😁😁,даже в реакте мало преимуществ у классов чем в функционале=))!!

  • @optimusprime9456

    @optimusprime9456

    3 жыл бұрын

    @@mikaelgevorgyan4521 А ничо, что это пример? А на простых примерах невозможно понять, в чем смысл ООП. Он хорошо раскрывается только на больших программах.

  • @stranger271271
    @stranger2712713 жыл бұрын

    Идеально мне понравилось

  • @dev_tsx
    @dev_tsx18 күн бұрын

    Хотел тоже сделать подобный ролик, но еще добавить рекурсию 😀Теперь видимо не буду 🙂 По ООП хорошо объяснил

  • @nickml5138
    @nickml51383 жыл бұрын

    Крутое видео!) На 6:24 ESlint ругался бы if (n % 5 === 0) { return true } return false попросил бы заменить на return n % 5 === 0

  • @MisterGenix

    @MisterGenix

    3 жыл бұрын

    Я хоть и не eslint, но тоже удивился зачем так писать, мож кто подскажет?

  • @drovoseg
    @drovoseg3 жыл бұрын

    Почему-то никто не заметил что во втором примере все три оператора if лишние, надо сразу возвращать boolean. И в ООП MAX_NUM = 100 неверное название, максимальное же по факту 99. Ну и можно его инкапсулировать в еще один класс вместе с циклом, раз уж в ООП стиле делаем.

  • @asdffewfew
    @asdffewfew3 жыл бұрын

    было интересно. можете рассказать про unit тесты?

  • @dmitriyart2989
    @dmitriyart29893 жыл бұрын

    Мой любимый js!

  • @a.osethkin55
    @a.osethkin553 жыл бұрын

    Огонь!

  • @SlavaCh
    @SlavaCh3 жыл бұрын

    Можно ещё так 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 жыл бұрын

    можно, но не нужно - много лишнего кода в котором нет смысла

  • @andreyzhukov2821
    @andreyzhukov28213 жыл бұрын

    Какое же это классное видео! Спасибо!

  • @Veujin
    @Veujin3 жыл бұрын

    В последнем примере от дефолтного значение лучше избавиться в find. в TagNameRule можно передавать что-то вроде билдера тега, а не готовый тег. внутри find инстанцировать тег билдером, передавая ему num. так появится новое правило в коллекции, к которому можно будет написать стратегию TrueCondition. если find ничего не нашел, возвращать nil таким способом все правила будут описаны в коллекции правил, а логика дефолтного значения уйдет из того места, где вызывается find

  • @Mitreskotv
    @Mitreskotv3 жыл бұрын

    Сторонник первого варианта. Все просто и понятно. Если задача решается просто, зачем усложнять? всеми любимый KISS. Если мы знаем о будущих изменениях, или думаем наперед и предполагаем изменения, то возможно другие подходы лучше. Switch(true) для меня ад. можно например в том же if (isBuzz(i)) структуру не менять. Если это вопрос на архитектуру - спору нет. Если вопрос на "сделай" - для меня лучше чем первое решение нет. Разве можно избавится от magic Numbers.

  • @user-br4gt7xu2j
    @user-br4gt7xu2j3 жыл бұрын

    почему числа в константы не вывели понятно, но строковые fizz и buzz не лучше ли тут вывести в private final variables?)

  • @kuzymaks180
    @kuzymaks1803 жыл бұрын

    соер а ты похудел сильно)

  • @cafedead
    @cafedead7 ай бұрын

    Соер, оцени FizzBuzz от Мурыча. Тебе понравился!😂

  • @vasilyh4588
    @vasilyh45883 жыл бұрын

    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 жыл бұрын

    Вы же понимаете, что это искусственный пример? Намерено взята максимально простая задача, чтоб вы как зритель могли сосредоточится на парадигмах программирования, а не на осознании поставленной задачи? ООП в принципе рассчитано на декомпозицию сложной логики с целью упростить ее понимание. Вне этого контекста это стрельба из пушки по воробьям.

  • @McMeil
    @McMeil3 жыл бұрын

    как получить такие навыки в проектировании: что читать, где учить? можете дать список литературы? в любом случае спасибо - понял сколько всего нужно изучать

  • @mykola_antal

    @mykola_antal

    3 жыл бұрын

    Большие компании, окружение специалистов в этой области на голову выше, и конечно же практика. Литература конечно хорошо, но лучше ее читать во время решения задач или попытке понять почему было принято какое то конкретное решение

  • @evgenasd8892

    @evgenasd8892

    3 жыл бұрын

    А у меня столько раз проектирование не оправдовало дальнейшее расширение проекта, что я поддержу вопрос в комментарии: что почитать чтобы верно определить необходимый паттерн для проектирование архитектуры задачи?

  • @McMeil

    @McMeil

    3 жыл бұрын

    @@mykola_antal спс, но это я и сам понимаю) много работать, много учить, думать и анализировать)

  • @ivankiselev8672

    @ivankiselev8672

    3 жыл бұрын

    Попробуй "Программист-прагматик", 2е издание

  • @McMeil

    @McMeil

    3 жыл бұрын

    @@ivankiselev8672 спс, посмотрю)

  • @anazkomult
    @anazkomult3 жыл бұрын

    Я думал что начал понимать программирование, но господин СОЕР просто взял и поставил на место.

  • @alexsanderdolov1945
    @alexsanderdolov19453 жыл бұрын

    Вообще, идея тегирования очень крутая - по сути наша нейросеть работает по методу тегирования, где совокупность определенных связей и весов обозначена каким-то тегом(в данном случае отедльный неройн - это уже тэг) А вся нейросеть - это иерархия тегов. Только имена им никто не дает. А дальше, когда уже тег образовался, по сути он может отдавать своё значения выше или ниже другим, чтобы те образовывали свои на их базе теги. Т.е. если нейрон ответственнен на данном уровне за горизонтальную линию, то это изображение он тегирует тогда, когда видит эту линию на изображении. Только тут ещё и с процентами теги, а не бинарные. (Четкие и нечеткие теги :) ) Может создать свой язык на основе тегов? :) И там будет уже не ООП, а Тегировано Ориентированное Программирование. :)

  • @user-nr7vt6it5y
    @user-nr7vt6it5y3 жыл бұрын

    Очень понятно объясняешь, спасибо ! Скажи пожалуйста что такое 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 жыл бұрын

    Степан Савельев там Соер ниже пояснил уже, что для исключения ложных срабатываний при передаче нечисловых значений

  • @qwe-rty-
    @qwe-rty-3 жыл бұрын

    Что делать, если не понял ООП подход? Как это вообще, что это? Я пересмотрел уже несколько раз. Что нужно знать, чтобы так мыслить? И как вообще понять, какой подход мне нужен? Подскажите, пожалуйста. Почитал много комментариев ниже, не особо помогло, конечно, хотелось бы книжку какую-то, но я пробовал читать Мартина про чистую архитектуру, там сложно...

  • @user-sn7pp1uz6m
    @user-sn7pp1uz6m3 жыл бұрын

    22:55 прикольно, а где больше об этом узнать можно? впервые с таким сталкиваюсь

  • @AlexanderSavchenko91
    @AlexanderSavchenko913 жыл бұрын

    какую книгу надо прочитать чтобы хотя бы примерно приблизиться к такому ООП?)

  • @semenpetrov9456
    @semenpetrov94563 жыл бұрын

    не совсем понял что такое тег и что значит тегирование?

  • @mou8285
    @mou82853 жыл бұрын

    Если возможно, выводи код с номерами строк, так на него проще ссылаться

  • @megaman13able
    @megaman13able3 жыл бұрын

    18:36 Что здесь значит нижнее подчеркивание у аргумента?

  • @vlad-yelnikov

    @vlad-yelnikov

    3 жыл бұрын

    подчеркиванием принято обозначать protected property в JavaScript

  • @uncle-xxi
    @uncle-xxi3 жыл бұрын

    Во втором примере стоило бы isFizz и isBuzz переиспользовать :)

  • @GoldiPlatinum
    @GoldiPlatinum3 жыл бұрын

    А где стримы можно найти?

  • @kazarovroman
    @kazarovroman3 жыл бұрын

    Очень крутое видео. Спасибо за него. Очень понравился подход ООП. Но признатся чесно я не понял, очень тяжелая логика(для меня) и представить не могу что я должен сделать что бы мыслить так же. Я повторил код на JS. Потом переписал его на C#. Часами дебажил. В принципе понял как работает, но всеравно через боль. Ребят посоветуйте пожалуйста как можно изучить и оттачивать этот навык(мкасимально конкретно). Соеру еще раз большое спасибо!!!

  • @AnonAristotel
    @AnonAristotel3 жыл бұрын

    А в JS break на switch, не на цикл for? За видео плюс!

  • @drygdryg2
    @drygdryg23 жыл бұрын

    Спасибо за видео. Третье решение поставило меня в тупик: сижу и думаю, как это реализовать на 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..

  • @alikhanmukhanaliyev2857
    @alikhanmukhanaliyev28573 жыл бұрын

    Вау. Иду покупать патрона для доступа к стримам по архитектуре

  • @iloveclimbru
    @iloveclimbru3 жыл бұрын

    Использование тэга для вывода чисел отдает костылем. Вам так не кажется?

  • @MaximRovinsky
    @MaximRovinsky3 жыл бұрын

    Не JavaScript но пример интересный. Взято где-то из интернета, мне показалось лаконичным. Вариант который печатает только заданные числа for i = 1; i

  • @sergeys4732

    @sergeys4732

    3 жыл бұрын

    Это go

  • @MaximRovinsky

    @MaximRovinsky

    3 жыл бұрын

    Верно, но пример чисто для наглядности. Вдруг кому-то пригодиться

  • @user-vu6hn4ul2i

    @user-vu6hn4ul2i

    3 жыл бұрын

    @@MaximRovinsky чем решение отличается от первого в видео?

  • @MaximRovinsky

    @MaximRovinsky

    3 жыл бұрын

    отличие первого варианта, что код выводит только те числа, которые нам нужны (а не всех подряд) + другой подход проверки. Пример просто для подумать, для расширение кругозора

  • @kyrylo_alekseev
    @kyrylo_alekseev3 жыл бұрын

    Как насчёт принципа читаемости кода?

  • @uranproject
    @uranproject2 жыл бұрын

    а есть что-нибудь про протокольно ориентированного программирования?

  • @arseniyzuev353
    @arseniyzuev3532 жыл бұрын

    Смысл fizzbuzz в том, что старые процессоры не имели аппаратного блока деления, и поэтому решения с mod или делением сильно проседали по времени выполнения по сравнению с решениями без. Но видимо это настолько забыто, что даж старичок Соер не в курсе. Классическое "правильное" решение - это два счетчика для 3 и 5, которые инкрементятся, потом типа counter3 ==3 => print(Fizz); counter3=0

  • @evgenasd8892
    @evgenasd88923 жыл бұрын

    какой паттерн применить нужно и нужен ли воопще паттерн? Лайк что бы Sorer разъяснил, как абстрактно представить задачу с использованием паттерна. Что поможет научить себя?

  • @vasalib
    @vasalib3 жыл бұрын

    Я js не знаю, но первые три примера более-менее понятны. Но в ООП такое накрутили... Мне бы понять, приведенный пример кода вообще рабочий или это только некий каркас?

  • @VseNikiSukaZanyaty
    @VseNikiSukaZanyaty3 жыл бұрын

    осталось только перемешать два последних способа

  • @shamilsalakhutdinov5519
    @shamilsalakhutdinov55193 жыл бұрын

    Мне эта задача на экзамене в школе 21 попалась)

  • @user-vu6hn4ul2i

    @user-vu6hn4ul2i

    3 жыл бұрын

    Этой задаче 100 лет в обед. Классика, хуле.

  • @waldemarkunz9173
    @waldemarkunz91733 жыл бұрын

    switch "синтаксический сахар" :D

  • @user-vu6hn4ul2i
    @user-vu6hn4ul2i3 жыл бұрын

    Посоветуй что нибудь хорошее по архитектуре?

  • @snky_

    @snky_

    3 жыл бұрын

    SICP

  • @linkernick5379
    @linkernick53793 жыл бұрын

    А код на ФП необязательно было делать нечитаемым, можно было точно также сделать поток, фильтры на основе правил и изолировать сайд-эффект (то есть вывод на экран).

  • @S0ERDEVS

    @S0ERDEVS

    3 жыл бұрын

    Если накидаешь годный пример в ФП стиле, я его опубликую на стене.

  • @asd-sl1kv
    @asd-sl1kv3 жыл бұрын

    вот ты мужик любишь джаваскриптик

  • @rellez5442
    @rellez54423 жыл бұрын

    8:59 создастся массив от 1 до 99)

  • @vorontsovru270895
    @vorontsovru2708953 жыл бұрын

    Сделал данную задачку на С# на случай, если тут будут люди, которые захотят сами разобрать принцип работы каждого из стилей без необходимости мучаться с JS =) github.com/Zodt/FizzBuzz/

  • @maxpapirovnyk4304
    @maxpapirovnyk43043 жыл бұрын

    SOLID +

  • @DimonEx
    @DimonEx3 жыл бұрын

    В четвертом примере Java немного расплескалась по JavaScript? Познавательно, но зачем?

  • @daniilzyubin2865
    @daniilzyubin28653 жыл бұрын

    Понять не могу - волосы в синий покрашены или это с цветами в видосе что-то?

  • @lollopin3362

    @lollopin3362

    3 жыл бұрын

    С цветокоррекцией что-то

  • @tarpaha
    @tarpaha2 жыл бұрын

    Но ведь тут в коде сразу же ошибка. По условию дано 100 чисел. Цикл i = 1; i < 100; i++ работает с 99

  • @mmclist9926
    @mmclist99263 жыл бұрын

    ждём четвёртой реализации на brainfuck :)

  • @igor_quantumman
    @igor_quantumman3 жыл бұрын

    Почему в функциональном решении gen, fizz и buzz объявлены как константы?

  • @user-vu6hn4ul2i

    @user-vu6hn4ul2i

    3 жыл бұрын

    Потому, что в js так можно

  • @d1namis
    @d1namis3 жыл бұрын

    @S0ER забавный факт на Codegolf очень большой % програмистов провалились на этом задании. Видео ахеренное, кстати у этого кода есть маленькая спортная оптимизация: if (i % 15 === 0) {} elif % 5 {} elif % 3 {} else {} - короче ищем остаток от деления на 15 так как математика.

  • @vasya.k1n6
    @vasya.k1n63 жыл бұрын

    Первый - твой FizzBuzz, четвертый - FizzBuzz сына маминой подруги

  • @deniskulakov682
    @deniskulakov6823 жыл бұрын

    Для меня ООП подход - это что то что облегчает реализацию. Но разработка такого подхода заключается в том что надо на столько "деградировать" в мышлении что бы декомпозировать. И на простом примере это уже сложно, а если задача реальная, то если не получится "деградировать" то все рассыпится на стадии реализации. Соер как научится "деградировать"?

  • @anzarsh
    @anzarsh3 жыл бұрын

    Возникают 2 вопроса: 1. Применяют ли 4 способ в реальной практике на фронте? 2. Почему многие отказываются от парадигмы ООП?

  • @pythononelove5882
    @pythononelove58823 жыл бұрын

    Это gan x?

  • @igorsushko1356
    @igorsushko13563 жыл бұрын

    В ООП ошибка в выводе будет. дописал немного кода codepen.io/igor-sushko/pen/JjKKwmY

  • @chepudila9607

    @chepudila9607

    3 жыл бұрын

    По идее, достаточно return true обернуть для стратегии AND в условие this.conditions.length - 1 == i

  • @yevhendatsenko9989
    @yevhendatsenko99893 жыл бұрын

    Почему МИН_ВЕЛЬЮ не вынесен в константу ?

  • @nyannyan8243
    @nyannyan82433 жыл бұрын

    Так вот для чего нужны паттерны проектирования: чтобы писать многостраничные портянки ужасного, заумного объектно-ориентированного кода, с кучей аллокаций, фрагментирующих память и насилующих сборщик мусора...

  • @user-mb4xy2cz3t

    @user-mb4xy2cz3t

    3 жыл бұрын

    При чём для решения простых задач

  • @JingoBo
    @JingoBo3 жыл бұрын

    Можно решить шаблоном посетитель)

  • @alexsokol1086
    @alexsokol10863 жыл бұрын

    4:40 зачем if(bool) return true, когда можно return bool

  • @S0ERDEVS

    @S0ERDEVS

    3 жыл бұрын

    Явное лучше неявного. Просто привычка флаги делать явно.

  • @maxgreen3643
    @maxgreen36433 жыл бұрын

    С каждым годом только всë больше разочаровываюсь в ооп. Прав был Алан Кэй =(

  • @mikaelgevorgyan4521

    @mikaelgevorgyan4521

    3 жыл бұрын

    Я в javascript =))) функционал люблю.Короче проще и читабельнее!😎😎😎

  • @egorselyanin9739
    @egorselyanin97393 жыл бұрын

    Функциональная парадигма, говорите? А почему не на Хаскеле тогда? themonadreader.files.wordpress.com/2014/04/fizzbuzz.pdf

  • @user-mb4xy2cz3t
    @user-mb4xy2cz3t3 жыл бұрын

    В этом проблема многих програмистов, вот простая же была задача, зачем туда лепить вот это 17:38? От прочтения цикла и пары-тройки ифов ещё никто не умирал, зато думаю постоянно разбирая вот такие Орхитектуры, сделанные для простых задач, можно словить раннюю аневризму

  • @user-ft9fw5gn3o

    @user-ft9fw5gn3o

    3 жыл бұрын

    "От прочтения пары-тройки `(десятков)` ифов" умирают часы у других программистов, которым требуется поддержать твой код. Была простая задача, использовали непростой подход. Проблемой видео было решение задачи? Нет, проблемой видео было показать подход к решению задачи. Сегодня ты смотришь на решение ФизБаз, завтра тебе потребуется начать реализацию нового проекта, и тебе сразу станет понятно - понял ты то, что хотел донести автор, или не понял.

  • @user-mb4xy2cz3t

    @user-mb4xy2cz3t

    3 жыл бұрын

    ​@@user-ft9fw5gn3o Да нет, не умирают, зашёл, прочитал, понял, быстро дописал ещё иф если нужно. А чтобы разобраться как блин взаимодействуют классы в той архитектурной колбасе, как раз часы и тратятся. Проблемой видео не было, но люди насмотрятся таких видео, наслушаются что паттерны это круто и начинают пихать их просто везде. И видел я такие проекты. Например один из последних, написан по всем канонам Microsoft best practices, паттерны, микросервисы, технологии, вот это всё, реально толково написаны. Чел это писал полтора года, в нерабочее время. А просто и понятно это можно было написать за месяц, во всё то же нерабочее время и поддерживать это смог бы мидл, даже не крепкий, а в итоге поддерживают синьоры, потому что мидлы в нём разобраться просто не могут.

  • @fun6789
    @fun67893 жыл бұрын

    Это видео наглядно показывает почему ФП вытесняет ООП, особенно на js

  • @etoyonker
    @etoyonker9 ай бұрын

    Лапшекод и оверинжиниринг в чистом виде

Келесі