
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.217.4] |
![]() |
|
Страницы: (27) 1 2 [3] 4 5 ... 26 27 ( Перейти к последнему сообщению ) |
Сообщ.
#31
,
|
|
|
B.V., аргументируй. На конкретных примерах. И, скажем, если в букварях по C# будут продвигать использование List<T> и фич из System.Linq - это есть зло? Так что-ли?
|
![]() |
Сообщ.
#32
,
|
|
ООП - понятие растяжимое ![]() ![]() |
Сообщ.
#33
,
|
|
|
Да и понимания шаблонов - тоже не особо. Вполне достаточно: "если хотите так, то делайте сяк".
|
Сообщ.
#34
,
|
|
|
Цитата B.V. @ Взять тот же for each, к примеру. Вот что, кроме религии, мешало тому же Страуструпу предусмотреть конструкцию for each в языке C++? Нет, надо было городить шаблонную затычку... Кстати, можно небольшой технический вопрос? Каким образом реализована и работает конструкция подобная for each в C++? |
![]() |
Сообщ.
#35
,
|
|
Цитата --Ins-- @ Каким образом реализована и работает конструкция подобная for each в C++? Смотря какую ты имеешь ввиду. Есть STL for_each - это просто ф-ция, которая принимает на вход два итератора(первый и последний) и функтор и итерирует по ним применяя к каждому из элементов функтор. Есть BOOST_FOREACH - это макрос, который чудесным образом выводит тип элеменов контейнера и на каждой итерации засовывает в локальную переменную результат разыменования итератора. |
Сообщ.
#36
,
|
|
|
archimed7592, спасибо, примерно понятно. Кстати, у for each более глубокий смысл, чем просто синтаксический сахар. Тут ключевой момент проявляется тогда, когда порядок обхода списка не регламентирован. Он может быть выполнен с начала в конец, с конца в начало, в произвольном порядке или параллельно - эффект будет одинаковым. А вот последнее - это уже интересно. Операция может быть распараллелена и язык вполне это позволяет. Следующий шаг - за компилятором. Это конечно не функциональное программирование, где нет побочных эффектов, и распараллелить можно почти все что угодно, но уже кое что.
|
Сообщ.
#37
,
|
|
|
--Ins--, в случае std::for_each - это тоже верно, ибо порядок обхода явным образом не специфицирован.
|
![]() |
Сообщ.
#38
,
|
|
Цитата --Ins-- @ Следующий шаг - за компилятором. В нашем случае шаг за библиотекой ![]() |
Сообщ.
#39
,
|
|
|
Цитата B.V. @ Да что вы опять пытаетесь навязать новичкам шаблоны... ![]() Про STL и шаблоны не сказал бы что это библиотека затычек - это часть стандартной библиотеки языка, как она может быть затычкой тогда? ![]() ![]() ![]() Ну как еще довольно "зеленый" программсит, находящийся еще в стадии набирания опыта, скажу, что по "чистому" C++ просто нет нормальных книг. Нету и все в основном, те с которых я начинал, там я даже не знаю как сказать, конструкции + ООП. То есть песня у всех одна, основные конструкции языка, ООП и все как будто больше ничего не существует, STL, другие вопросы по библиотекам и прочее это все как будто не относиться вообще, где-то на заднем плане остаеться. Единственно мне понравилась книга по С++ это почему-то автор Липманн "С++ для начинающих", может кто-то не согласиться, но мне именно методика книги понравилась, там сразу наряду с конструкциями языка и ООП сразу будущий специалист вводиться в курс дела да и примеры построены таким образом, что сразу на равне с самим языком и парадигмой ООП будущий специалист получает знания и навыки работы с STL контейнерами с алгоритмами и т. д.. Вот я считаю нормальный учебник по С++ должен быть именно таким, а не как всегда сначала предлагаеться строять самому новичку какие-то алгоритмы, стеки и т. д., а потом новичек узнает, что все чем он занимался это была обезьянья работа, так как это все уже давно есть в стандартной библиотеке, в том числе и в STL. Конечно я бы не раскритиковал так в пух и прах многие учебники по С++, кроме Липманна разумееться, который мой любимый учебник по С++ ![]() А что будет после того и какие "шатания" в учебниках и других методических матеориалах начнуться когда выйдет новый стандарт языка, даже представить страшно. ![]() |
![]() |
Сообщ.
#40
,
|
|
Цитата Flex Ferrum @ аргументируй. На конкретных примерах. Что именно аргументировать? Цитата Flex Ferrum @ И, скажем, если в букварях по C# будут продвигать использование List<T> и фич из System.Linq - это есть зло? Так что-ли? Нет, я полностью поддерживаю изучение шаблонов вместе с основами языка, я просто говорю о том, что не стоит так зацикливаться на шаблонах, это не язык, это всего-лишь дополнительные классы-затычки на нем. |
Сообщ.
#41
,
|
|
|
Тогда бы я наверно говорил о том, что вы хотите сказать, что сначала изучать синтаксис языка, а потом только переходить к библиотечным средствам?
Странный ход мысли, получаеться, что например язык Java полностью состоит из "затычек", так как хоть малые операции невозможно сделать без использования средств библиотеки языка, и статических методов классов библиотеки. Хотябы для примера рассмотрим случай, определить длину массиива уже использутеься уже поле length. ![]() ![]() int[] arr = new int[100]; for(int i = 0; i < arr.length; i++) .......; Те же самые фишки-аналоги похожие на STL. И почему программист на С++ должен объявлять константу длины массива, ошибаться или что-то там вычислять. Или теже статические методы класса Arrays из Java для массивов по сортировке, копированию, сравнению, поиску Java программист это уже знает сразу и может уже юзить, а С++ программисту сначала вдалбливаеться, как это все делаеться вручную, а потом только он узнает, что есть такая штука как STL, вернее теперь уже стандартная библиотека языка С++ где все это есть. Несправедливо как-то получаеться. ![]() |
Сообщ.
#42
,
|
|
|
Цитата MumiyTroll2008 @ а потом новичек узнает, что все чем он занимался это была обезьянья работа, так как это все уже давно есть в стандартной библиотеке, в том числе и в STL. Ну, обучение всегда подразумевает обезьянью работу. Без этого никак и это правильно, я так считаю. Все сначала учат таблицу умножения, прежде чем узнают о существовании калькуляторов. В этом случае меньше белых пятен останется. |
Сообщ.
#43
,
|
|
|
Цитата B.V. @ Что именно аргументировать? Почему именно затычки? Что в таком случае не является затычками? При том условии, что в том же C# все контейнеры (в том числе и языковые массивы) - это сущности .NET Framework, в прочем как и исключения, reflection и прочее... Тоже затычки, по твоей логике? |
Сообщ.
#44
,
|
|
|
Цитата MumiyTroll2008 @ И почему программист на С++ должен объявлять константу длины массива, ошибаться или что-то там вычислять. Ну да. Куда проще: ![]() ![]() int main(int argc, char* argv[]) { using namespace std; using namespace boost::lambda; boost::array<int, 5> arr = {1, 2, 3, 4, 5}; for (int n = 0; n < arr.size(); ++ n) std::cout << arr[n] << std::endl; BOOST_FOREACH(int a, arr) { std::cout << a << std::endl; } std::for_each(arr.begin(), arr.end(), std::cout << _1 << "\n"); return 0; } ![]() Просто три варианта прохода по статически инициализируемому массиву. |
![]() |
Сообщ.
#45
,
|
|
Цитата Flex Ferrum @ Почему именно затычки? Как я тебе должен это аргументировать? Я привел пример -- for each. Сравни вот этот вот ужас Цитата Flex Ferrum @ std::for_each(arr.begin(), arr.end(), std::cout << _1 << "\n"); и ![]() ![]() for VarName in SomeArray do begin // end; |