Ответ на вопрос "что лучше?" только действительно имеет смысл, когда интерпретации не отличаются. Языки семейства ML (по крайней мере, SML и OCaml) имеют как параллельную форму инициализации (and
), так и последовательную, по существу, вложенную область видимости (in
), поскольку оба они полезны в определенных ситуациях.
В вашем случае семантика одна и та же, так что вам остается ответить на вопрос "что вам лучше читать?" и может быть (если это не преждевременно) "что может быть выполнено более эффективно?" В вашем случае альтернативы:
Для случая and
: оцените несколько строк и выполните параллельное связывание с тремя идентификаторами.
Для случая in
: связать foo
с a
, , затем , связать bar
с b
, , затем , связать baz
с c
.
Что читается лучше? Это бросок в этом случае, потому что результат не имеет значения. Вы можете опросить некоторых носителей английского языка, но я сомневаюсь, что будет много предпочтений. Возможно, большинству понравится and
, поскольку он разделяет привязки, оставляя подошву in
перед выражением.
Что касается того, что выполняется более эффективно, я думаю, что хороший компилятор, скорее всего, выдаст тот же код, потому что он может определять порядок связывания, не имеет значения. Но, возможно, у вас есть компилятор, который генерирует код для многоядерного процессора, который лучше работает с and
. Или, может быть, наивный компилятор, который записывает все RHS во временное хранилище, а затем связывает их, замедляя дело and
.
Это, скорее всего, несущественные проблемы оптимизации, особенно с учетом того, что они связаны с привязками и, вероятно, не имеют замкнутых циклов.
Итог: в данном случае это true ; просто убедитесь, что правильно используете параллельный или последовательный, когда результат имеет значение.