Условные обозначения, стиль и использование для констант Clojure?

Каковы лучшие практики для определения констант в Clojure с точки зрения стиля, условностей, эффективности и т. Д.

Например, правильно ли это?

(def * PI * 3.14)

Вопросы:

Должны ли константы быть написаны заглавными буквами в Clojure?

Стилистически, должны ли они иметь символ звездочки (*) на одной или обеих сторонах?

Любые соображения по поводу вычислительной эффективности, которые мне следует знать?

40
задан Julien Chastang 26 August 2010 в 20:21
поделиться

3 ответа

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

Звездочки с обеих сторон в Clojure называются «наушниками». Обычно они используются для обозначения «особой» переменной или переменной, которая будет динамически повторно связываться с использованием привязки позже. Например, такие вещи, как out и in, которые время от времени перенаправляются пользователями на разные потоки.

Лично я бы назвал его просто пи. Я не думаю, что когда-либо видел, чтобы люди давали константам специальные имена в Clojure.

РЕДАКТИРОВАТЬ: Мистер Карпер только что указал, что он сам пишет константы в своем коде с большой буквы, потому что это соглашение в других языках. Я думаю, это говорит о том, что есть по крайней мере некоторые люди, которые делают это.

Я бегло просмотрел стандарты кодирования, но ничего об этом не нашел. Это приводит меня к выводу, что на самом деле вам решать, будете ли вы использовать их с большой буквы. Я не думаю, что кто-то даст вам пощечину за это в долгосрочной перспективе.

24
ответ дан 27 November 2019 в 01:22
поделиться

Что касается вычислительной эффективности, вы должны знать, что в Clojure нет такой вещи, как глобальная константа. То, что у вас есть выше, это var, и каждый раз, когда вы ссылаетесь на него, он выполняет поиск. Даже если вы не надеваете на него наушники, переменные всегда можно восстановить, поэтому значение всегда может измениться, поэтому они всегда ищутся в таблице. Для циклов, критичных к производительности, это определенно неоптимально.

Есть несколько вариантов, таких как размещение блока let вокруг ваших критических циклов и значение любых «константных» переменных, чтобы они не искались. Или создать макрос без аргументов, чтобы значение константы скомпилировалось в код. Или вы можете создать класс Java со статическим членом.

См. этот пост и следующее обсуждение констант для получения дополнительной информации:

http://groups.google.com/group/clojure/msg/78abddaee41c1227

13
ответ дан 27 November 2019 в 01:22
поделиться

Наушники — это способ обозначить, что данный символ будет иметь свою собственную локальную привязку к потоку в какой-то момент. Таким образом, нет смысла применять наушники к вашей константе Пи.

*clojure-version* — это пример константы в Clojure, и она полностью написана строчными буквами.

8
ответ дан 27 November 2019 в 01:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: