Size: a a a

2021 March 23

AP

Antony Polukhin in pro.cxx
Joshua Jakowlew
Понял, спасибо. А как вообще в плюсах относятся к ФП в целом? Под ФП подразумеваю не лямбды и функции высшего порядка, а декларативность, композиции всего со всем, чистоту, вынесение побочных эффектов и так далее
Мы всякое любим. В шаблонах у нас так вообще язык prologue
источник

CD

Constantine Drozdov in pro.cxx
Constantine Drozdov
вряд ли, вроде это одна из дефолтных возможностей, она просто странная
может, конечно, я перечитал Маяковского в молодости
if (
   a + b == 0
   || a + b == 1
   || a + b == 2
   || special(
          a, b,
          we_are_descending_to_hell(
              a, b
          )
      )
)
источник

O

Ofee in pro.cxx
Joshua Jakowlew
А насколько дсл приняты в мире плюсов не знаю
DSL любят (особенно писать, а не читать), но эти изменения не являются хорошим примером DSL сами по себе

На мой взгляд, если оператор нужно искать в середине конструкции — код выглядит максимально недекларативно, особенно, если семантика оператора перегружена
источник

PZ

Pavel Zhigulin in pro.cxx
Constantine Drozdov
может, конечно, я перечитал Маяковского в молодости
if (
   a + b == 0
   || a + b == 1
   || a + b == 2
   || special(
          a, b,
          we_are_descending_to_hell(
              a, b
          )
      )
)
Красота :) Я такое люблю :) Но меня все ненавидят за такое :)
источник

PZ

Pavel Zhigulin in pro.cxx
Хотя я бы еще a, b параметры бы каждый на отдельной строке бы написал)
источник

PZ

Pavel Zhigulin in pro.cxx
Joshua Jakowlew
Понял, спасибо. А как вообще в плюсах относятся к ФП в целом? Под ФП подразумеваю не лямбды и функции высшего порядка, а декларативность, композиции всего со всем, чистоту, вынесение побочных эффектов и так далее
Как по мне - это сильно зависит от области :) Вряд ли кто в здравом уме будет микроконтроллеры программировать через ФП-шное ФП :) Где-то местами - вполне может быть, но в целом будет императивщина, ну просто потому, что железо у нас императивное :) А так, вообще книжка даже есть о ФП в С++

https://www.manning.com/books/functional-programming-in-c-plus-plus
источник

AK

Anton Kashcheev in pro.cxx
Constantine Drozdov
может, конечно, я перечитал Маяковского в молодости
if (
   a + b == 0
   || a + b == 1
   || a + b == 2
   || special(
          a, b,
          we_are_descending_to_hell(
              a, b
          )
      )
)
На строку с we_are_descending_to_hell можно перенести запятую с предыдущей :)
источник

D

Danya in pro.cxx
Pavel Zhigulin
Как по мне - это сильно зависит от области :) Вряд ли кто в здравом уме будет микроконтроллеры программировать через ФП-шное ФП :) Где-то местами - вполне может быть, но в целом будет императивщина, ну просто потому, что железо у нас императивное :) А так, вообще книжка даже есть о ФП в С++

https://www.manning.com/books/functional-programming-in-c-plus-plus
И даже не одна есть, вторая от российского автора была, но не помню название и автора..
источник

CD

Constantine Drozdov in pro.cxx
Pavel Zhigulin
Как по мне - это сильно зависит от области :) Вряд ли кто в здравом уме будет микроконтроллеры программировать через ФП-шное ФП :) Где-то местами - вполне может быть, но в целом будет императивщина, ну просто потому, что железо у нас императивное :) А так, вообще книжка даже есть о ФП в С++

https://www.manning.com/books/functional-programming-in-c-plus-plus
Если это то, о чём я думаю, кажется, автор зря буквально транслирует хаскелевскую парадигму в template <template<typename> typename>
источник

D

Danya in pro.cxx
Ещё одна книжка по теории категорий была написана бывшим плюсовиком и он постоянно там примеры из плюсов приводил
источник

PZ

Pavel Zhigulin in pro.cxx
Constantine Drozdov
может, конечно, я перечитал Маяковского в молодости
if (
   a + b == 0
   || a + b == 1
   || a + b == 2
   || special(
          a, b,
          we_are_descending_to_hell(
              a, b
          )
      )
)
Вот так совсем хорошо)

if (
   0 == a + b
   || 1 == a + b
   || 2 == a + b
   || special(
          a,
          b,
          we_are_descending_to_hell(
              a,
              b
          )
      )
)
источник

CD

Constantine Drozdov in pro.cxx
Pavel Zhigulin
Вот так совсем хорошо)

if (
   0 == a + b
   || 1 == a + b
   || 2 == a + b
   || special(
          a,
          b,
          we_are_descending_to_hell(
              a,
              b
          )
      )
)
да, я показывал, что допустимо оставить на той же строке
источник

PZ

Pavel Zhigulin in pro.cxx
Danya
Ещё одна книжка по теории категорий была написана бывшим плюсовиком и он постоянно там примеры из плюсов приводил
ГДЕ? ГДЕ ОНА? :) Хочу её срочно)
источник

PZ

Pavel Zhigulin in pro.cxx
Constantine Drozdov
да, я показывал, что допустимо оставить на той же строке
Мне не нравится :) Неконсистентно)
источник

D

Danya in pro.cxx
Pavel Zhigulin
ГДЕ? ГДЕ ОНА? :) Хочу её срочно)
источник

PZ

Pavel Zhigulin in pro.cxx
Божечки горошечки. Спасибо :)\
источник

CD

Constantine Drozdov in pro.cxx
Anton Kashcheev
На строку с we_are_descending_to_hell можно перенести запятую с предыдущей :)
Я всё разглядывал это, но мне не очень нравится, скажем
foo(
   hello
   , is_cruel()
     ? cruel_world
     : not_cruel_world
)
вариант
foo(
   hello,
   is_cruel()
   ? cruel_world
   : not_cruel_world
)
выглядит как-то чище
источник

O

Ofee in pro.cxx
Constantine Drozdov
может, конечно, я перечитал Маяковского в молодости
if (
   a + b == 0
   || a + b == 1
   || a + b == 2
   || special(
          a, b,
          we_are_descending_to_hell(
              a, b
          )
      )
)
Не должно внутри if быть сложных конструкций — мозгу приходится буквально реверсить их смысл из кода. Чем проще выражение — тем лучше

bool is_special = special(
          a, b,
          we_are_descending_to_hell(
              a, b
          )
      );

bool a_plus_b_evaluated_to_special_value =
   std::set{0, 1, 2}.contains(a + b);

if (a_plus_b_evaluated_to_special_value || is_special)
{ /* ... */ }
источник

D

Danya in pro.cxx
Pavel Zhigulin
Божечки горошечки. Спасибо :)\
А это плейлист, в котором другой С++ разработчик читает эту книгу и делает пометки (вроде)))
источник

CD

Constantine Drozdov in pro.cxx
Ofee
Не должно внутри if быть сложных конструкций — мозгу приходится буквально реверсить их смысл из кода. Чем проще выражение — тем лучше

bool is_special = special(
          a, b,
          we_are_descending_to_hell(
              a, b
          )
      );

bool a_plus_b_evaluated_to_special_value =
   std::set{0, 1, 2}.contains(a + b);

if (a_plus_b_evaluated_to_special_value || is_special)
{ /* ... */ }
я HATE. HATE. HATE. HATE. одноразовые переменные
источник