Блин, совсем вылетело из головы, что ты меня спрашивал...
List<String>[] data = new ArrayList<String>[10]; // такие коллекции недопустимы
List<String> data1 = new ArrayList<String>(); // а так мона
VD>Что за проблема не дает создать массив ArrayList-ов?
Всё из-за того, что дженерики исчезают в рантайме.
Если глянуть рефлекшном data1, то он окажется обычным ArrayList. Таким образом, невозможно в рантайме отличить ArrayList<String> от ArrayList<Integer>, и теоретически можно написать
data[0] = new ArrayList<String>();
data[1] = new ArrayList<Integer>();
, я бы решил, что ты предлагаешь человеку учть *только* "язык на букву N".
Это список того что нужно изучять для расширения кругозора. А начинать надо по любому с одного языка. И только Руби с Немерле подходят для этого. Причем я бы выбрал естественно послелдний.
G>ИМХО, язык всегда заточен под определенную парадигму/стиль/как там еще назвать. Если программировать на нем в ключе этой парадигмы — хорошо, если нет — не очень.. Даже у Н есть свой стиль программирования, который ты так рассхваливаешь.
Ошибашся. Немерле одинаково хорошо поддерижват все стил (кроме ЛП).
Для обучения это самое оно. И это никак не свзяано с предпочтениями в реальном программировании.
G> Друое дело, что в Н очень малы затраты при программировании в чуждом ему ключе (например, строго императивно).
Нет там никаких затрат, так как нет там никаких "чуждых ключей". Он просто поддерживает структуроное програмировани, ООП, ФП, МП.
G>Да и, в конце концов, разные языки учить — это фан
Это кому как. Можно и перегрузить. В общем, я считаю, что перечисленный список хорош для общего развития. И чтобы не зацикливаться на одном решении. А начинать обучать можно и нужно на одном универсальном языке. Вот еще бы ЛП включить. Было бы вообще здорово. Может со временем так и будет.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
насчёт case в руби. в его альтернативах можно писать любые значения, которые будут сопоставляться с выюбираемым специальным оператором. определение этого оператора для различнх типов ты можешь написать сам. так что case там программируемый. пример:
case x of
1, 2..5, even -> do_something
/regexp/, "str" -> do_nothing
за синтаксис не отвечаю, я давно им не пользовался. в целом, руби у меня стоит на втором месте в списке любимых после хаскела хотя крупные системы я на нём писать естественно не рекомендую
Здравствуйте, BulatZiganshin, Вы писали:
BZ>насчёт case в руби. в его альтернативах можно писать любые значения, которые будут сопоставляться с выюбираемым специальным оператором. определение этого оператора для различнх типов ты можешь написать сам. так что case там программируемый. пример:
BZ>case x of BZ> 1, 2..5, even -> do_something BZ> /regexp/, "str" -> do_nothing
Сдается мне, что match (сопоставление с образцом) по мощьнее будет.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, Константин Л., Вы писали:
VD>>>Перебирать из довольно бессмысленно так как они могут иметь разные типы данных. Хотя в макросах их можно и переберать и даже генерировать. К примеру, параметры методов тоже генерируеются как кортежи.
КЛ>>хаха, и что? От этого это становится бесмысленным? Че за бред?
VD>Ну, придумай осмысленную задачу. И вообще, ты же сам сравнивал кортежи со структурами. Тебя не удивляет, что струтуру тоже нельзя перебрать?
так вот если бы кортеж можно было перебрать, то это было бы знач. преимущество над структурой. Иногда очень нужно пребрать поля какой-либо структуры.
VD>Еще интересно почему ты не считашь бредом тот факт, что параметры метода тоже невозможно перебрать (если список фиксирован)?
КЛ>>>> А об их отсутствии (точнее о том, что это плохо и они заменяются кортежами.) я уже писал.
VD>>>(задумчиво) Да, ты много пишешь...
КЛ>>а это к чему? У тебя с этим проблемы? Не читай
VD>Не догадливый?
КЛ>так вот если бы кортеж можно было перебрать, то это было бы знач. преимущество над структурой. Иногда очень нужно пребрать поля какой-либо структуры.
"кортеж с перебором" называется полиморфным списком. в языках типа явы он будет иметь тип что-то типа List<Object>
КЛ>так вот если бы кортеж можно было перебрать, то это было бы знач. преимущество над структурой. Иногда очень нужно пребрать поля какой-либо структуры.
Так во многих языках кортежи без проблем перебираются:
питон:
def aprint(*args):
for arg in args:
print arg
aprint(1, 2, 3, "test")
D:
import std.stdio;
void aprint(A...)(A a)
{
foreach(t; a)
writefln(t);
}
void main()
{
aprint(1, 2, 3, "test");
}
В D кстати и структура легко превращатся в тупл:
import std.stdio;
void aprint(A...)(A a)
{
foreach(t; a)
writefln(t);
}
struct S
{
int x;
char [] msg;
}
void main()
{
static S s = {123, "test"};
aprint(s.tupleof);
}
Здравствуйте, Константин Л., Вы писали:
КЛ>так вот если бы кортеж можно было перебрать, то это было бы знач. преимущество над структурой. Иногда очень нужно пребрать поля какой-либо структуры.
Дык есть языки которые позволяют это сделать. Только перебирать их в рантайме смысла немног. Это делается во время компиляции.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, Константин Л., Вы писали:
КЛ>>так вот если бы кортеж можно было перебрать, то это было бы знач. преимущество над структурой. Иногда очень нужно пребрать поля какой-либо структуры.
VD>Дык есть языки которые позволяют это сделать. Только перебирать их в рантайме смысла немног. Это делается во время компиляции.
отлично. Это мне нравится. Я с тобой за немерле уже все видеть перестал
КЛ>>так вот если бы кортеж можно было перебрать, то это было бы знач. преимущество над структурой. Иногда очень нужно пребрать поля какой-либо структуры.
BZ>"кортеж с перебором" называется полиморфным списком. в языках типа явы он будет иметь тип что-то типа List<Object>
не знаю как он там называется, но то что он не есть Java::List<Object> (если я все правильно понял) — это точно. В том то и прокол, чтобы сохранить информацию о типе.
BZ>>"кортеж с перебором" называется полиморфным списком. в языках типа явы он будет иметь тип что-то типа List<Object>
КЛ>не знаю как он там называется, но то что он не есть Java::List<Object> (если я все правильно понял) — это точно. В том то и прокол, чтобы сохранить информацию о типе.
Здравствуйте, BulatZiganshin, Вы писали:
BZ>>>"кортеж с перебором" называется полиморфным списком. в языках типа явы он будет иметь тип что-то типа List<Object>
КЛ>>не знаю как он там называется, но то что он не есть Java::List<Object> (если я все правильно понял) — это точно. В том то и прокол, чтобы сохранить информацию о типе.
BZ>в static языках за это отвечает reflection
я тебе про Фому, ты мне про Ерёму. Кортеж с разнотипными элементами отличается от списка однотипных объектов, пусть даже полиморфных. Равзе разница не очевидна?
Здравствуйте, Константин Л., Вы писали:
КЛ>Здравствуйте, BulatZiganshin, Вы писали:
BZ>>>>"кортеж с перебором" называется полиморфным списком. в языках типа явы он будет иметь тип что-то типа List<Object>
КЛ>>>не знаю как он там называется, но то что он не есть Java::List<Object> (если я все правильно понял) — это точно. В том то и прокол, чтобы сохранить информацию о типе.
BZ>>в static языках за это отвечает reflection
КЛ>я тебе про Фому, ты мне про Ерёму. Кортеж с разнотипными элементами отличается от списка однотипных объектов, пусть даже полиморфных. Равзе разница не очевидна?
но ведь можно сделать и язык с поддержкой туплов в foreach. для хаскела есть такая библиотека — OOHaskell, если не ошибаюсь, и в ней модуль OOList, реализующий полиморфные списки для хаскела черех туплы. вот такая вот загогулина..
Hi Константин Л.
VD>>Ну, придумай осмысленную задачу. И вообще, ты же сам сравнивал кортежи со структурами. Тебя не удивляет, что струтуру тоже нельзя перебрать?
КЛ>так вот если бы кортеж можно было перебрать, то это было бы знач. преимущество над структурой. Иногда очень нужно пребрать поля какой-либо структуры.
А зачем перебирать надо? Может проще сразу присвоить соответсвующим переменным нужные значения.
Вот тебе пример из Питона
def testFun():
return ("aaa", "b")
(a,b)=testFun()
print a
print b
Да полюбому надо!
Вот банальный пример — тебя не затрахало писать скрипты в формате cmd без возможности обработать исключения?
Наверное да. Python может сделать то же самое, только остановиться если что-то не так.
Ты пробовал делать эксперную систему на строго-типизированном языке? На Prolog это сделать проще — особенно если "мышцы" на ОО языке сделаны.
Ты пробовал сделать анализатор языка на С? А на FP(например haskel)? Что тебе больше по-душе?
КЛ>>так вот если бы кортеж можно было перебрать, то это было бы знач. преимущество над структурой. Иногда очень нужно пребрать поля какой-либо структуры.
BZ>"кортеж с перебором" называется полиморфным списком. в языках типа явы он будет иметь тип что-то типа List<Object>
Кортеж с перебором называется "кортеж", а список списоком. Я еще не видел языков где допускались бы списки с разными типами элементов. Обычно допускаются списки с элементами одного типа в которые можно помещать некие подтипы этого типа. Причем выявлять конкретные типы можно только в рантайме. Что с одной стороные несколько медленее, а с другой может привести к рантайм-ошибкам. К тому же, обычно, кортеежи организуются в памяти как непрерывный кусок памяти, а списки в виде некий ссылочных структур. Это приводит к тому. что кортежи более эффектинвы.
В общем, это разные структуры данных. А то можно и массивом все проблемы решать.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.