Вроде мелочь, а хотелось бы понять глубинный смысл:
В С++/C#/Java для представления литеральных массивов и структур используется одна и та же форма: фигурные скобки. Т.е. {1,2,3} и {1,"hello",3.14} как-бы одно и то же, компилятор сам разбирается как использовать конструкцию.
В других языках (D, Rust, Python, Ruby, Javascript/JSON) для массивов используют квадратные скобки: [1,2,3]. И похоже есть такая интересная тенденция, что фигурные скобки для всех случаев — это просто по инерции из Си, а в новых языках предпочитают квадратные.
Пытаясь это дело систематизировать, я подумал что, возможно, было бы удобно, когда квадратные скобки используются для создания литералов из однородных значений (массивы, списки), а фигурные — для неоднородных (структуры). Имеет ли это какой-то смысл? Или это просто вопрос внешнего вида и никакого философского смысла здесь не заложено?
Здравствуйте, x-code, Вы писали:
XC>Вроде мелочь, а хотелось бы понять глубинный смысл:
Спец. конструкции языка имеют смысл, если без них существенно хреновее. В скале, к примеру, мне нафиг не нужны литералы для массивов и классов, я тупо юзаю конструктор/фабричный метод:
val a = Array(1, 2, 3)
class C(a: Int, b: Int)
val c = new C(1, 2) // или, например, new C(a = 1, b = 2); для case-класса "new" можно опустить
А вот для XML спец. литералы
val x = <b a="1">2</b>
существенно удобнее, чем
import scala.xml._
val x = Elem(null, "b", new UnprefixedAttribute("a", Text("1"), Null), TopScope, Text("2"))
По исходному вопросу: квадратные или фигурные — пофиг.
Здравствуйте, x-code, Вы писали: XC>Пытаясь это дело систематизировать, я подумал что, возможно, было бы удобно, когда квадратные скобки используются для создания литералов из однородных значений (массивы, списки), а фигурные — для неоднородных (структуры).
ИМХО, фигурные лучше для кода(блоки кода, функции, классы,...), а квадратные для данных(массивы, кортежи,...). XC>Имеет ли это какой-то смысл? Или это просто вопрос внешнего вида и никакого философского смысла здесь не заложено?
Эстетичность и эргономичность синтаксиса, это очень важно
Между тем,что я думаю,тем,что я хочу сказать,тем,что я,как мне кажется,говорю,и тем,что вы хотите услышать,тем,что как вам кажется,вы слышите,тем,что вы понимаете,стоит десять вариантов возникновения непонимания.Но всё-таки давайте попробуем...(Э.Уэллс)
Здравствуйте, x-code, Вы писали:
XC>В других языках (D, Rust, Python, Ruby, Javascript/JSON) для массивов используют квадратные скобки: [1,2,3]. И похоже есть такая интересная тенденция, что фигурные скобки для всех случаев — это просто по инерции из Си, а в новых языках предпочитают квадратные.
Может, квадратные — по инерции из динамических языков, где иначе непонятно.
Здравствуйте, x-code, Вы писали:
XC>Вроде мелочь, а хотелось бы понять глубинный смысл:
XC>В С++/C#/Java для представления литеральных массивов и структур используется одна и та же форма: фигурные скобки. Т.е. {1,2,3} и {1,"hello",3.14} как-бы одно и то же, компилятор сам разбирается как использовать конструкцию.
Здравствуйте, x-code, Вы писали:
возможно, было бы удобно, когда квадратные скобки используются для создания литералов из однородных значений (массивы, списки), а фигурные — для неоднородных (структуры).
В свете современной тенденции, когда все типы являются подтипами единственного корневого типа (Object), набор неоднородных элементов можно трактовать как набор однородных (типа Object). С другой стороны, отчетливо проявляется разница между наборами именованных (структуры, мапы) и неименованных (массивы, списки) значений. С учетом этого уточнения, ваше предложение реализовано в самом популярном формате изображения сложных литералов (json), и принято во многих других стандартах (напр. dart). Старые языки (java, C) уже не изменить, да и литералы там не играют особой роли.
Здравствуйте, Don Reba, Вы писали: DR>Может, квадратные — по инерции из динамических языков, где иначе непонятно.
Зришь в корень. Пунктуационное разнообразие — вообще зло. Меня вот парит PowerShell, в котором нужно помнить, где ставить запятую, а где ";".
Поэтому вводить разную пунктуацию надо только там, где без этого никак.
Вот, в частности, в ужасном PHP массивы и хеши — одно и то же. По-моему — прекрасная идея.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, x-code, Вы писали:
XC>Пытаясь это дело систематизировать, я подумал что, возможно, было бы удобно, когда квадратные скобки используются для создания литералов из однородных значений (массивы, списки), а фигурные — для неоднородных (структуры). Имеет ли это какой-то смысл?
Поздравляю, Вы изобрели Erlang Точнее, его списки и кортежи.
Здравствуйте, netch80, Вы писали:
XC>>Пытаясь это дело систематизировать, я подумал что, возможно, было бы удобно, когда квадратные скобки используются для создания литералов из однородных значений (массивы, списки), а фигурные — для неоднородных (структуры). Имеет ли это какой-то смысл?
N>Поздравляю, Вы изобрели Erlang Точнее, его списки и кортежи.
Кортежи это вообще другое, и Erlang я не изобретал
Я всего лишь пытаюсь выяснить, имеет ли смысл деление на литералы в квадратных и фигурных скобках.
Пока только такие мысли
За:
1. json-like (это типа стандарт)
2. дополнительный контроль компилятора
Против:
1. нужно каждый раз думать в каких скобках
2. все равно кроме массивов и структур существует еще бесконечно много возможных коллекций, и хотелось бы чтобы все они могли инициализироваться списками инициализации
XC>>Пытаясь это дело систематизировать, я подумал что, возможно, было бы удобно, когда квадратные скобки используются для создания литералов из однородных значений (массивы, списки), а фигурные — для неоднородных (структуры). Имеет ли это какой-то смысл?
N>Поздравляю, Вы изобрели Erlang Точнее, его списки и кортежи.
В Эрланге списки могут быть из неоднородных элементов.
Здравствуйте, Mamut, Вы писали:
XC>>>Пытаясь это дело систематизировать, я подумал что, возможно, было бы удобно, когда квадратные скобки используются для создания литералов из однородных значений (массивы, списки), а фигурные — для неоднородных (структуры). Имеет ли это какой-то смысл?
N>>Поздравляю, Вы изобрели Erlang Точнее, его списки и кортежи.
M>В Эрланге списки могут быть из неоднородных элементов.
Могут. Но правильное использование — это когда они логически однородны (интерпретируются и обрабатываются независимо от номера в группе).
M>>В Эрланге списки могут быть из неоднородных элементов. N>Могут. Но правильное использование — это когда они логически однородны (интерпретируются и обрабатываются независимо от номера в группе).
Как правильно и неправильно — неважно, это не форсируется VM.
Более того, proplists и iolists, которые являются списками, являются «неправильными» списаками, но никого это не волнует, и использовать их правильно, а не неправильно.