Как не делать багов 🪲 Предусловия и Guard Expressions

แชร์
ฝัง
  • เผยแพร่เมื่อ 16 ธ.ค. 2024

ความคิดเห็น •

  • @nick7ikin
    @nick7ikin 10 หลายเดือนก่อน +2

    применяю такой подход с множественные return после того, как где-то увидел пример "линеаризации кода" (кажется на хабре) . суть сводится к уменьшению вложенности кода за счёт выхода из метода после проверки условия, которое запрещает дальнейшее выполнение основной ветки алгоритма метода.

    • @kydavoiti
      @kydavoiti  10 หลายเดือนก่อน

      Точно! Забыл совсем про этот термин, он хорошо отражает суть

  • @Вродебычеловек
    @Вродебычеловек 10 หลายเดือนก่อน +1

    19:07 Этим занимается формальная верификация. Интересовался этим очень-очень поверхностно, но на сколько понимаю, она сейчас постепенно развивается и уже используется для доказания корректности небольших, но популярных алгоритмов/программ. Например уже доказали корректность криптографических алгоритмов в основе протокола TLS.

    • @qoopdata
      @qoopdata 10 หลายเดือนก่อน

      В том же Rust, например, используют Chalk как верификатор лайфтаймов и звучимости системы типов. Из популярных примеров теорем-пруверов есть ATS. Существуют также языки программирования, архитектура которых построена вокруг зависимых типов, что позволяет обуславливать императивный и декларативный код: например, Idris или Agda.

  • @d4vlL
    @d4vlL 10 หลายเดือนก่อน +1

    Видео суперактуально, недавно как раз на работе спорил с коллегами о том, что преждевременный return в начале функции - это не плохо, а наоборот помогает избежать вложенности и делает код последовательным что-ли, более плоским, оттого и более читабельным. А это, оказывается, даже термин имеет - guard expression. Основной аргумент против них был - наличие большого количества точек выхода. Не знаю, как это мешает, если функция или метод все равно возвращают или ошибку, или результат.

    • @kydavoiti
      @kydavoiti  10 หลายเดือนก่อน +1

      Да и если за всеми точками выхода сложно уследить, то проблема не в guard expression, а в большой функции.
      А вообще, современные IDE показывают точки выхода из функции (даже neovim), если навести на одну из них.

    • @vgsnva
      @vgsnva 7 หลายเดือนก่อน

      В целом об этом не надо спорить, всё зависит о размера функции. Если большая, то множественные ретерн зло. Хотя опять же, если в команде принято писать guard expression, то можно, в общем во всём ваден здравый смысл, а не карго культ.

  • @tesgreat8958
    @tesgreat8958 10 หลายเดือนก่อน +2

    не знаю насчёт фортрана, но несколько return в той же java могут стать проблемой если функция на три километра с if..else тройной вложенности, из которых можно неожиданно и непрозрачно выйти.
    Другой вопрос что множественные return в такой функции скорее всего не самая главная проблема))

  • @apostol_fet
    @apostol_fet 10 หลายเดือนก่อน

    Мне норм. Особенно зашла аналогия про выстрел в ногу с фейерверка

  • @Shindos-Kopernik
    @Shindos-Kopernik 10 หลายเดือนก่อน

    Познавательно! Лайк в поддержку!

  • @vlad071096
    @vlad071096 10 หลายเดือนก่อน

    Противникам множества точек возврата, если в их языке есть stack unwinding, можно напомнить, что они в любом случае должны при чтении кода мысленно раздваивать поток исполнения каждый раз, когда видят вызов функции (повезло еще, если нет перегрузки операторов). Если они этот факт игнорируют (даже легитимно, если, например, речь идет о каком-то обычном сервере, где, грубо говоря, все состояние лежит в базе данных), то им не составит труда игнорировать и сторожевые if'ы.

  • @montecristo31
    @montecristo31 10 หลายเดือนก่อน

    Пасиба за контент!

  • @lobaevsl
    @lobaevsl 10 หลายเดือนก่อน

    Как не делать багов? Не писать код)

    • @kydavoiti
      @kydavoiti  10 หลายเดือนก่อน

      Это слишком правда

  • @pjpodx
    @pjpodx 10 หลายเดือนก่อน +1

    "предусловия, постусловия и инварианты" , чe ?? чем раньше перейдете на родной язык програмированния (английский) тем лучше , не надо будет потом кучу терминов переучивать

    • @qoopdata
      @qoopdata 10 หลายเดือนก่อน

      ru.wikipedia.org/wiki/%D0%98%D0%BD%D0%B2%D0%B0%D1%80%D0%B8%D0%B0%D0%BD%D1%82_(%D0%BC%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0)
      Инвариант - это математическое обозначение: из какого языка пришло, так и будет называться и писаться. Это не случай англицизмов - не надо гадости писать не по наитию.