Другие языки программирования и технологии

Что оптимальнее: a -= b или a = a - b ? [obj c]

Когда хотите найти где-то что-то оптимальное, надо, прежде всего, сказать о критерии оптимальности!
Конечно о глобальной экономии памяти или достижение высокого быстродействия здесь речи быть не может. А вот текстовая запись программы действительно короче!
Конечно, кому-то не нравится такое сокращение, а кто-то уже привык к этому и писать в выражении два раза одну и ту же переменную уже не может, так как это просто раздражает.
Кстати если переменная представлена одним символом, то, конечно, экономия текста всего на 1 символ. А если в переменной несколько символов! ? Правильно говорить, что экономия текстовой записи происходит на длину переменной в символах.
Кстати, действительно, раньше это (размер текстовой части программы) было критично, но и сейчас, если кто-то желает распечатать программу для её анализа или др. , то компактность записи сбережёт не одно дерево! :)
Михаил Михалчич
Михаил Михалчич
76 473
Лучший ответ
о какой оптимизации речь? о том что на один символ меньше кода напечатаете? за кадром будут происходить те же самые действия.
вы не там оптимальности ищете.

оптимальность это когда повторяющийся код грамотно выделен в функции, когда грамотно и не перебарщивая определены глобальные переменные, когда не создаётся море одноразовых переменных на каждом шаге цикла. короче говоря, когда сперва разбираются в природе решаемой задачи, а потом только начинают кодировать.

оптимальность это когда, для примера, ради перемножения матриц вам не требуется писать вложенные циклы, а достаточно просто записать С = А * В и программа сама должна "оптимально" перемножить матрицы. к сожалению, такое дано далеко не всякому языку программирования.
Рустам Ерубаев
Рустам Ерубаев
73 325
Оптимизатор, вообще-то, должен уравнять.. . но a-=b - одно действие, а a=a-b - два.
раньше, когда процессоры были большими а производительность маленькой, эти конструкции (на моем опыте) компилировались по разному.
первый: вычитание с косвенной адресацией
второй: с загрузкой значения в аккумулятор и выгрузкой
т. е. 1й) вариант был быстрее и короче.

сейчас как уже написали это не имеет никакого значения, и результирующий код зависит от компилятора. оптимизировать надо bottleneck-и: циклы, вызовы, создание больших объектов. .

ну и 1й вариант более естественный для с++ по моему
Hello Mother
Hello Mother
58 224
Первое, так как если я делаю класс и перегружаю оператор, то ни о каком присваивании (копировании) и речи не будет. А второе оператор идет через стек, по мне бы я вообще запретил такие операторы, так как это понятней человеку, но жутко не оптимально. По возможности всегда заменяйте длинное выражение на подобные операторы, особенно когда проектируете свой класс.
компилятору посрать, итоговый код будет одинаковый
фишка в том что первый компилятор Си писался для машины с 16Кб!!!! памяти, естественно текст программы должен был быть компактным a-=b на 1 байт короче чем a=a-b (пробелы тогда это ваще роскошь)
если у тебя 100 присваиваний то первый вариант даст экономию аж 100 байт, в то время это было очень много.
На сегодняшний момент, когда, оперативная память измеряется Гигабайтами, вариант a -= b не более чем дань моде. Многие чайники так пишут чтобы продемонстрировать свою "крутость", но потом запутываются в плохо читаемом коде и демонстрируют в итоге свою тупость
Первое.
Сергей Романов
Сергей Романов
33 164
блин, это одно и тоже на низком уровне, но 1ое писать быстрее.
тут два абсолютно одинаково затрачивается память, все равно что написать 1+2 или 2+1, это может быть только визуально оптимальнее:)
Дима Угадай
Дима Угадай
7 837
а -= в конечно. Особенно в цикле выгодно
AM
Askhat Mensagiev
414

Похожие вопросы