История изменений
Исправление soomrack, (текущая версия) :
Я очень открыт к новому, потому что я не считаю себя проф. программистом (хотя, тут формально есть разные критерии, если судить по количеству интернет трафа, людей, которое прошло через мой код, то я в топ 10% точно попаду… в некоторые года), но это решение конкретных сиюминутных практических задач, а не фундаментальный код… Разница, конечно, чудовищна между этими областями…
И объективно говоря, я очень плохо знаю С++, но меня спасает то, что я обычно стараюсь понять до той степени, в которой это необходимо для решения задачи.
На самом деле, ничего криминального в таких for-лупчиках нет, и зачастую это остаётся самым быстрым способом итерации (если сомневаетесь - посмотрите на disasm, я это делаю регулярно - очень познавательно).
И да, и нет. Касательно этого примера – for с массивом вполне приемлим для ряда задач, особенно когда нужно быстродействие, но тут есть нюансы, которые сегодня недопустимо уже делать:
int s=0;
for(i=0;i<100;++i){ if(l[i]<6 && l[i]>2) ++s; }
-
форматирование, оно отстутсвует
-
именование переменных – просто дно, i если и можно употреблять, то только для мнимой единицы, l – нельзя. Однажды я три дня отлаживал программу в которой в одном месте вместо l было написано 1.
-
magic constants
А если говорить про обработку данных, когда нет жесткого требования по быстродействию, то код
const auto success = std::count_if(values.begin(), values.end(),
[](int val) { return val > 2 && val < 6; });
или с «range» выглядит гораздо понятней (2 и 6 тоже закинуть в переменные с нормальным названием). И гораздо гибче, нет жесткой привязки к типам, это обычное высокоуровневое абстрактное программироание, когда код отражает то, что хочется получить без привязки к типу данных и магическим константам…, с контролем выхода за границы массивов и пр.
По поводу быстродействия ООП… Был у меня опыт по потреблению памяти и скорости, в 2-3 раза было лучше сделать на структурах в c-style… рекламный движок делали… с ооп в те времена в оперативу не влезли :)
Исходная версия soomrack, :
Я очень открыт к новому, потому что я не считаю себя проф. программистом (хотя, тут формально есть разные критерии, если судить по количеству интернет трафа, людей, которое прошло через мой код, то я в топ 10% точно попаду…), но это решение конкретных сиюминутных практических задач, а не фундаментальный код… Разница, конечно, чудовищна между этими областями…
И объективно говоря, я очень плохо знаю С++, но меня спасает то, что я обычно стараюсь понять до той степени, в которой это необходимо для решения задачи.
На самом деле, ничего криминального в таких for-лупчиках нет, и зачастую это остаётся самым быстрым способом итерации (если сомневаетесь - посмотрите на disasm, я это делаю регулярно - очень познавательно).
И да, и нет. Касательно этого примера – for с массивом вполне приемлим для ряда задач, особенно когда нужно быстродействие, но тут есть нюансы, которые сегодня недопустимо уже делать:
int s=0;
for(i=0;i<100;++i){ if(l[i]<6 && l[i]>2) ++s; }
-
форматирование, оно отстутсвует
-
именование переменных – просто дно, i если и можно употреблять, то только для мнимой единицы, l – нельзя. Однажды я три дня отлаживал программу в которой в одном месте вместо l было написано 1.
-
magic constants
А если говорить про обработку данных, когда нет жесткого требования по быстродействию, то код
const auto success = std::count_if(values.begin(), values.end(),
[](int val) { return val > 2 && val < 6; });
или с «range» выглядит гораздо понятней (2 и 6 тоже закинуть в переменные с нормальным названием). И гораздо гибче, нет жесткой привязки к типам, это обычное высокоуровневое абстрактное программироание, когда код отражает то, что хочется получить без привязки к типу данных и магическим константам…, с контролем выхода за границы массивов и пр.
По поводу быстродействия ООП… Был у меня опыт по потреблению памяти и скорости, в 2-3 раза было лучше сделать на структурах в c-style… рекламный движок делали… с ооп в те времена в оперативу не влезли :)