воскресенье, 5 августа 2018 г.

Именованные параметры. K-Macros

https://blog.tartanllama.xyz/simple-named-bools/

При вызове функции типа

 cake make_cake (bool with_dairy, bool chocolate_sauce, bool poison)  

явна видно проблема ненаглядности передаваемых параметров и, как следствие, отсутствие понимания намерений програмиста.

 auto c = make_cake(true, true, false);  

Что означает первый true, второй true и третий false ? Совершенно непонятно и надо заглядывать в определение функции.

Для разрешения данной проблемы можно использовать следующий подход

 const bool with_dairy      = true;  
 const bool chocolate_sauce = true;  
 const bool poison          = false;  
 auto c = make_cake(with_dairy, chocolate_sauce, poison);  

Недостаток очевиден - введены три переменные, абсолютно ненужные для правильного исполнения кода, исключительно для улучшения читабельности. Дополнительно происходит 'раздутие' кодовой базы - вместо 1 строчки получается 4 строчки.

Можно попробовать и так

 auto c = make_cake(  
                     true  /* with_dairy      */,   
                     true  /* chocolate_sauce */,   
                     false /* poison          */  
                   );   

Лишних переменных нет, но также происходит 'раздутие' кодовой базы.

Данное затруднение является частным случаем того, что в языках С/С++ нет нативной поддержки так называемых именованных параметров. Много способов разрешить данную проблемы содержится в статье - https://habr.com/company/infopulse/blog/246663/. Также имеется мнение, что, по крайней мере в С++, именованные параметры в общем случае и не нужны - https://habr.com/post/246711/.

Simon Brand (blog.tartanllama.xyz) предлагает свое решение

 #define K(name) true  
   
 auto c = make_cake(K(with_dairy), !K(chocolate_sauce), !K(poison));  

Преимуществом является относительная наглядность, отсутствие 'раздутия' кодовой базы.
Недостатком является некоторая необычность синтаксиса.

1 комментарий:

  1. El Yucateco | Casino & Resort in CA | MapyRO
    The El Yucateco Resort & 평택 출장안마 Casino is 성남 출장안마 a 익산 출장샵 4-star resort, walk to El Yucateco Casino and 8 restaurants, a full-service spa, and 목포 출장마사지 a casino. Rating: 4.5 · ‎29 reviews · ‎Price range: $$$How 거제 출장안마 is El Yucateco rated?What days are El Yucateco open?

    ОтветитьУдалить