Clojure:
Склеивание строк
Как это сделать:
Clojure делает конкатенацию строк простой с помощью функции str
. Давайте погрузимся прямо в это:
;; Простая конкатенация с функцией str
(str "Hello, " "world!")
;; => "Hello, world!"
;; Конкатенация нескольких строк
(str "Clojure" " это" " прекрасно!")
;; => "Clojure это прекрасно!"
;; Сочетание строк и других значений
(str "Ответ " 42)
;; => "Ответ 42"
;; Использование apply для конкатенации последовательности строк
(apply str ["Соедините" " " "эти" " " "строки!"])
;; => "Соедините эти строки!"
Отлично, теперь вы видели это на практике. Просто помните, что str
работает с любым значением, вызывая на нем toString
. Если это nil, вы получите строку “nil”.
Погружение в Детали
Исторически, конкатенация строк существует с тех пор, как нам потребовалась обработка текста программным способом, и каждый язык предлагает свои методы. В Clojure, str
является частью основной библиотеки, введенной для простоты и унификации.
Альтернативы str
? Да! StringBuilder
может быть более эффективен для большого количества конкатенаций, особенно в циклах. Clojure может вызывать Java методы, так что вы также можете использовать StringBuilder
:
;; Использование StringBuilder для повышения эффективности
(let [builder (StringBuilder.)]
(.append builder "Это")
(.append builder " более")
(.append builder " эффективный способ!")
(.toString builder))
;; => "Это более эффективный способ!"
Почему тогда не использовать всегда StringBuilder
? Для большинства повседневных задач str
проще и достаточно быстр. StringBuilder
выделяется в сценариях высокой производительности с множеством конкатенаций.
С точки зрения реализации, поскольку Clojure работает на JVM, он получает выгоду из возможностей обработки строк Java. Однако, как и в случае со строками String
в Java, каждый вызов str
создает новую String
, что может быть важным с точки зрения использования памяти.
Смотрите также:
- Документация функции
str
в Clojure: Clojure Strings StringBuilder
в Java: Документация StringBuilder- Практическое руководство по
str
и не только: Clojure для Смелых и Правдивых