Pull to refresh

Comments 28

Часть классических ошибок можно избежать просто не используя копипасту, а переписывая код. Ну потратишь ты на две минуты больше, за то избежишь ошибок «V501 There are identical sub-expressions»
Это верно.

Но Вы же скопировали «V501 There are identical sub-expressions», а не набрали заново? :-).
Это хабр, а не редактор/ide для проектного кода.
Довольно странно при цитировании не использовать копирование. Задача как раз повторить.
С кодом да, лень берет своё, тут вы правы.
Это сомнительное утверждение. Нет, я не защищаю копипасту, но вероятность того, что при переписывании вы допустите «свою» опечатку или ошибку скорей всего НЕ ниже, чем вероятность ошибки в уже написанном коде.
Подскажите, как вы вычислили такую вероятность?
Вы видимо плохо знакомы с высказываниями статистов, поясню — это равносильное обратное предположение, показывающее сомнительность первоначального утверждения о копипасте (кратко — вероятно и то и другое).
Моё утверждение абсолютно — нет копипасты, нет ошибок, которые тянут за собой недосмотры по копипасте. То, что при этом могут быть ошибки программиста в его логике, которую он пишет — тоже возможно. А могут и не быть.
А высказывания — то такое. Все вокруг высказываются. Но я программист, а не статист, и не занимаюсь вычислением вероятности без каких либо данных.
нет копипасты, нет ошибок, которые тянут за собой недосмотры по копипасте


вы заменяете один класс ошибок (ошибки при копипасте) другими (опечатки). По итогу человеческий фактор всеравно берет свое.
Источником некоторых проблемных мест стал фреймворк Zend

Это вроде не фреймворк. Это Zend Engine.

Точно, спасибо.
Ошибкам, правда, везде уютно живётся — и в коде фреймворков, и в коде виртуальных машин. :)
В spl_fixedarray_object_write_dimension ошибки нет — в конце тела условия if (intern->fptr_offset_set) стоит return, так что tmp объявлена в правильном scope, в противном случае могла быть утечка памяти.

UPD: чёрт, я был уверен, что markdown в комментах поддерживается.
UPD: чёрт, я был уверен, что markdown в комментах поддерживается.
Поддерживается, если установить галочку под комментарием.
Прошу прощения, где именно «под комментарием»?

https://yadi.sk/i/yesu-7MCrRWBa
Странно, у меня есть.
Понятно, отрицательная карма. Спасибо!
Упрощение конечно хорошо, но вот в этом примере, где вы предлагаете заменить if (!path || (path && !*path)) на if (!path || !*path)) человеку будет проще понять первое условие, по крайней мере мне.
а не вызовет ли тут чтение по указателю 0 ошибку доступа к странице в упрощённом случае?
«Вредные советы» от PVS-Studio? :)
Нет. Просто надо знать, как работает оператор ||. :)
Подсказка: Short circuit
Да верно, это азы, не подумайте что мы их не знаем :), просто конструкция сбивает с толку с первого взгляда. Тут надо чуть больше подумать, чем в первом варианте, чтобы разобраться как работает. Но может это дело привычки.
Для меня наоборот второй вариант кажется лучше — меньший код необходимо интерпретировать в мозге, чтобы понять логику.
Ждем официальных объяснений ;) С первого взгляда упрощение кажется ошибочным, да и не нужно тут ничего упрощать, компилятору пофиг на все эти упрощения, а человеку во многих случаях понять сложнее будет в итоге.
Кстати, скажу слово в защиту макросов: правильное применение макросов позволяет свести к нулю ошибки копипаста и значительно сократить количество кода.

Простейший пример (код на ObjC):

#define __T_STRINGIFY(x) #x
#define DEFINE_CONSTANT_KEY(kConstantKey) static NSString * const kConstantKey = @__T_STRINGIFY(kConstantKey)

DEFINE_CONSTANT_KEY(kLanguagesSelectionKey);

И всё. Вы больше никогда не забудете изменить значение переменной.

Так же есть вещи, которые нельзя вынести в методы, вроде агрегации va_list. Так же неплохо макросы подходят для отладки: например, единственный #define MEASURE_ELAPSED_TIME(code) <...> экономит десятки строк кода на измерении быстродействия.
Sign up to leave a comment.