Comments 28
Часть классических ошибок можно избежать просто не используя копипасту, а переписывая код. Ну потратишь ты на две минуты больше, за то избежишь ошибок «V501 There are identical sub-expressions»
+1
Это верно.
Но Вы же скопировали «V501 There are identical sub-expressions», а не набрали заново? :-).
Но Вы же скопировали «V501 There are identical sub-expressions», а не набрали заново? :-).
+67
Это сомнительное утверждение. Нет, я не защищаю копипасту, но вероятность того, что при переписывании вы допустите «свою» опечатку или ошибку скорей всего НЕ ниже, чем вероятность ошибки в уже написанном коде.
+15
Подскажите, как вы вычислили такую вероятность?
-5
Вы видимо плохо знакомы с высказываниями статистов, поясню — это равносильное обратное предположение, показывающее сомнительность первоначального утверждения о копипасте (кратко — вероятно и то и другое).
+1
Моё утверждение абсолютно — нет копипасты, нет ошибок, которые тянут за собой недосмотры по копипасте. То, что при этом могут быть ошибки программиста в его логике, которую он пишет — тоже возможно. А могут и не быть.
А высказывания — то такое. Все вокруг высказываются. Но я программист, а не статист, и не занимаюсь вычислением вероятности без каких либо данных.
А высказывания — то такое. Все вокруг высказываются. Но я программист, а не статист, и не занимаюсь вычислением вероятности без каких либо данных.
-6
Источником некоторых проблемных мест стал фреймворк Zend
Это вроде не фреймворк. Это Zend Engine.
+6
В spl_fixedarray_object_write_dimension ошибки нет — в конце тела условия if (intern->fptr_offset_set) стоит return, так что tmp объявлена в правильном scope, в противном случае могла быть утечка памяти.
UPD: чёрт, я был уверен, что markdown в комментах поддерживается.
UPD: чёрт, я был уверен, что markdown в комментах поддерживается.
+5
Упрощение конечно хорошо, но вот в этом примере, где вы предлагаете заменить if (!path || (path && !*path)) на if (!path || !*path)) человеку будет проще понять первое условие, по крайней мере мне.
-3
а не вызовет ли тут чтение по указателю 0 ошибку доступа к странице в упрощённом случае?
-6
Да скорее всего так и есть.
-5
«Вредные советы» от PVS-Studio? :)
-4
Нет. Просто надо знать, как работает оператор ||. :)
Подсказка: Short circuit
Подсказка: Short circuit
+6
Точно
0
Да верно, это азы, не подумайте что мы их не знаем :), просто конструкция сбивает с толку с первого взгляда. Тут надо чуть больше подумать, чем в первом варианте, чтобы разобраться как работает. Но может это дело привычки.
0
Ждем официальных объяснений ;) С первого взгляда упрощение кажется ошибочным, да и не нужно тут ничего упрощать, компилятору пофиг на все эти упрощения, а человеку во многих случаях понять сложнее будет в итоге.
-3
Ох уж этот php…
-2
Кстати, скажу слово в защиту макросов: правильное применение макросов позволяет свести к нулю ошибки копипаста и значительно сократить количество кода.
Простейший пример (код на 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) <...> экономит десятки строк кода на измерении быстродействия.
Простейший пример (код на 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) <...> экономит десятки строк кода на измерении быстродействия.
0
Когда перл5 проверите?
0
Sign up to leave a comment.
Проверка PHP 7