From 55e58d277d649a068df42da08c83c601970d0189 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A2=D0=B0=D1=80=D0=B0=D1=81?= <92remox92@gmail.com> Date: Tue, 31 Dec 2024 05:05:59 +0100 Subject: [PATCH] 05 - fix 5.2.4 example --- book/05-данные-и-функции-функциональный-стиль/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/book/05-данные-и-функции-функциональный-стиль/README.md b/book/05-данные-и-функции-функциональный-стиль/README.md index cdce749..1e53848 100644 --- a/book/05-данные-и-функции-функциональный-стиль/README.md +++ b/book/05-данные-и-функции-функциональный-стиль/README.md @@ -258,7 +258,8 @@ void log(string message) writeln(message); } ... -int result = foo(); log("foo() returned " ~ to!string(result)); +int result = foo(); +log("foo() returned " ~ to!string(result)); ``` Как видим, вычислять выражение `"foo() returned " ~ to!string(result)` нужно, только если переменная `verbose` имеет значение `true`. При этом выражение, передаваемое этой функции в качестве аргумента, будет вычислено в любом случае. В данном примере это конкатенация двух строк, которая потребует выделения памяти и копирования в нее содержимого каждой из них. И все это для того, чтобы узнать, что переменная `verbose` имеет значение `false` и значение аргумента никому не нужно! Можно было бы передавать вместо строки делегат, возвращающий строку (делегаты описаны в разделе 5.6.1):