Литералы массивов и структур
От: x-code  
Дата: 09.04.14 12:59
Оценка: +1
Вроде мелочь, а хотелось бы понять глубинный смысл:

В С++/C#/Java для представления литеральных массивов и структур используется одна и та же форма: фигурные скобки. Т.е. {1,2,3} и {1,"hello",3.14} как-бы одно и то же, компилятор сам разбирается как использовать конструкцию.
В других языках (D, Rust, Python, Ruby, Javascript/JSON) для массивов используют квадратные скобки: [1,2,3]. И похоже есть такая интересная тенденция, что фигурные скобки для всех случаев — это просто по инерции из Си, а в новых языках предпочитают квадратные.

Пытаясь это дело систематизировать, я подумал что, возможно, было бы удобно, когда квадратные скобки используются для создания литералов из однородных значений (массивы, списки), а фигурные — для неоднородных (структуры). Имеет ли это какой-то смысл? Или это просто вопрос внешнего вида и никакого философского смысла здесь не заложено?
Re: { ... }
От: Qbit86 Кипр
Дата: 09.04.14 13:09
Оценка:
Здравствуйте, x-code, Вы писали:

XC>И похоже есть такая интересная тенденция, что фигурные скобки для всех случаев — это просто по инерции из Си


Или из теории множеств.
Глаза у меня добрые, но рубашка — смирительная!
Re: Литералы массивов и структур
От: dimgel Россия https://github.com/dimgel
Дата: 09.04.14 13:15
Оценка:
Здравствуйте, 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"))


По исходному вопросу: квадратные или фигурные — пофиг.
Re: Литералы массивов и структур
От: C.A.B LinkedIn
Дата: 09.04.14 13:36
Оценка:
Здравствуйте, x-code, Вы писали:
XC>Пытаясь это дело систематизировать, я подумал что, возможно, было бы удобно, когда квадратные скобки используются для создания литералов из однородных значений (массивы, списки), а фигурные — для неоднородных (структуры).
ИМХО, фигурные лучше для кода(блоки кода, функции, классы,...), а квадратные для данных(массивы, кортежи,...).
XC>Имеет ли это какой-то смысл? Или это просто вопрос внешнего вида и никакого философского смысла здесь не заложено?
Эстетичность и эргономичность синтаксиса, это очень важно
Между тем,что я думаю,тем,что я хочу сказать,тем,что я,как мне кажется,говорю,и тем,что вы хотите услышать,тем,что как вам кажется,вы слышите,тем,что вы понимаете,стоит десять вариантов возникновения непонимания.Но всё-таки давайте попробуем...(Э.Уэллс)
Re: Литералы массивов и структур
От: Don Reba Канада https://stackoverflow.com/users/49329/don-reba
Дата: 09.04.14 14:20
Оценка: +2
Здравствуйте, x-code, Вы писали:

XC>В других языках (D, Rust, Python, Ruby, Javascript/JSON) для массивов используют квадратные скобки: [1,2,3]. И похоже есть такая интересная тенденция, что фигурные скобки для всех случаев — это просто по инерции из Си, а в новых языках предпочитают квадратные.


Может, квадратные — по инерции из динамических языков, где иначе непонятно.
Ce n'est que pour vous dire ce que je vous dis.
Re: Литералы массивов и структур
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 09.04.14 16:18
Оценка:
Здравствуйте, x-code, Вы писали:

XC>Вроде мелочь, а хотелось бы понять глубинный смысл:


XC>В С++/C#/Java для представления литеральных массивов и структур используется одна и та же форма: фигурные скобки. Т.е. {1,2,3} и {1,"hello",3.14} как-бы одно и то же, компилятор сам разбирается как использовать конструкцию.


А как он разберется в случае
auto xs = {1,2,3};

или
auto x = f( {1,2,3} );

?

Вот
auto xs = [1,2,3];

и
auto x = f( [1,2,3] );

вполне понятны и разбирабельны.
Re: Литералы массивов и структур
От: nikov США http://www.linkedin.com/in/nikov
Дата: 10.04.14 02:05
Оценка:
Здравствуйте, x-code, Вы писали:

XC>В С++/C#/Java для представления литеральных массивов и структур используется одна и та же форма: фигурные скобки.


Где это в C# используются фигурные скобки для литеральных структур?
Re: Литералы массивов и структур
От: rfq  
Дата: 10.04.14 06:37
Оценка: :))
Здравствуйте, x-code, Вы писали:
возможно, было бы удобно, когда квадратные скобки используются для создания литералов из однородных значений (массивы, списки), а фигурные — для неоднородных (структуры).
В свете современной тенденции, когда все типы являются подтипами единственного корневого типа (Object), набор неоднородных элементов можно трактовать как набор однородных (типа Object). С другой стороны, отчетливо проявляется разница между наборами именованных (структуры, мапы) и неименованных (массивы, списки) значений. С учетом этого уточнения, ваше предложение реализовано в самом популярном формате изображения сложных литералов (json), и принято во многих других стандартах (напр. dart). Старые языки (java, C) уже не изменить, да и литералы там не играют особой роли.
Re[2]: Литералы массивов и структур
От: x-code  
Дата: 10.04.14 07:49
Оценка:
Здравствуйте, nikov, Вы писали:

N>Где это в C# используются фигурные скобки для литеральных структур?


Да, про C# погорячился, там только массивы
Re[2]: Литералы массивов и структур
От: Sinclair Россия https://github.com/evilguest/
Дата: 10.04.14 07:50
Оценка: +1
Здравствуйте, Don Reba, Вы писали:
DR>Может, квадратные — по инерции из динамических языков, где иначе непонятно.
Зришь в корень. Пунктуационное разнообразие — вообще зло. Меня вот парит PowerShell, в котором нужно помнить, где ставить запятую, а где ";".
Поэтому вводить разную пунктуацию надо только там, где без этого никак.
Вот, в частности, в ужасном PHP массивы и хеши — одно и то же. По-моему — прекрасная идея.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re: Литералы массивов и структур
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 10.04.14 15:08
Оценка:
Здравствуйте, x-code, Вы писали:

XC>Пытаясь это дело систематизировать, я подумал что, возможно, было бы удобно, когда квадратные скобки используются для создания литералов из однородных значений (массивы, списки), а фигурные — для неоднородных (структуры). Имеет ли это какой-то смысл?


Поздравляю, Вы изобрели Erlang Точнее, его списки и кортежи.
The God is real, unless declared integer.
Re[2]: Литералы массивов и структур
От: x-code  
Дата: 10.04.14 16:47
Оценка:
Здравствуйте, netch80, Вы писали:

XC>>Пытаясь это дело систематизировать, я подумал что, возможно, было бы удобно, когда квадратные скобки используются для создания литералов из однородных значений (массивы, списки), а фигурные — для неоднородных (структуры). Имеет ли это какой-то смысл?


N>Поздравляю, Вы изобрели Erlang Точнее, его списки и кортежи.


Кортежи это вообще другое, и Erlang я не изобретал
Я всего лишь пытаюсь выяснить, имеет ли смысл деление на литералы в квадратных и фигурных скобках.
Пока только такие мысли
За:
1. json-like (это типа стандарт)
2. дополнительный контроль компилятора
Против:
1. нужно каждый раз думать в каких скобках
2. все равно кроме массивов и структур существует еще бесконечно много возможных коллекций, и хотелось бы чтобы все они могли инициализироваться списками инициализации
Re[2]: Литералы массивов и структур
От: FR  
Дата: 11.04.14 16:00
Оценка: 14 (1)
Здравствуйте, D. Mon, Вы писали:

DM>А как он разберется в случае

DM>
auto xs = {1,2,3};

DM>или
DM>
auto x = f( {1,2,3} );

DM>?

В С++ (>= 11) вполне нормально разберется, для {x, ...} есть специальный тип std::initializer_list<T>

#include <iostream>
#include <typeinfo>
#include <initializer_list>

template <typename T>
T f(std::initializer_list<T> const &lst)
{
return *lst.begin();
}

int main()
{
auto xs = {1,2,3};
std::cout << typeid(xs).name() << std::endl;
std::cout << typeid(f({1, 2})).name() << std::endl;
}

вывод:
St16initializer_listIiE
i
Re[2]: Литералы массивов и структур
От: Mamut Швеция http://dmitriid.com
Дата: 13.04.14 08:41
Оценка:
XC>>Пытаясь это дело систематизировать, я подумал что, возможно, было бы удобно, когда квадратные скобки используются для создания литералов из однородных значений (массивы, списки), а фигурные — для неоднородных (структуры). Имеет ли это какой-то смысл?

N>Поздравляю, Вы изобрели Erlang Точнее, его списки и кортежи.


В Эрланге списки могут быть из неоднородных элементов.


dmitriid.comGitHubLinkedIn
Re[3]: Литералы массивов и структур
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 13.04.14 09:36
Оценка:
Здравствуйте, Mamut, Вы писали:

XC>>>Пытаясь это дело систематизировать, я подумал что, возможно, было бы удобно, когда квадратные скобки используются для создания литералов из однородных значений (массивы, списки), а фигурные — для неоднородных (структуры). Имеет ли это какой-то смысл?


N>>Поздравляю, Вы изобрели Erlang Точнее, его списки и кортежи.


M>В Эрланге списки могут быть из неоднородных элементов.


Могут. Но правильное использование — это когда они логически однородны (интерпретируются и обрабатываются независимо от номера в группе).
The God is real, unless declared integer.
Re[4]: Литералы массивов и структур
От: Mamut Швеция http://dmitriid.com
Дата: 13.04.14 11:33
Оценка:
M>>В Эрланге списки могут быть из неоднородных элементов.
N>Могут. Но правильное использование — это когда они логически однородны (интерпретируются и обрабатываются независимо от номера в группе).

Как правильно и неправильно — неважно, это не форсируется VM.

Более того, proplists и iolists, которые являются списками, являются «неправильными» списаками, но никого это не волнует, и использовать их правильно, а не неправильно.


dmitriid.comGitHubLinkedIn
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.