Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Говнокод?

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (4): [1] 2 3 4 »   

> Без описания
Weber
Отправлено: 04 Декабря, 2014 - 15:13:36
Post Id


Частый гость


Покинул форум
Сообщений всего: 172
Дата рег-ции: Окт. 2014  


Помог: 0 раз(а)

[+][+]


Первый вопрос. Можно ли приведенный код, назвать говнокодом?

PHP:
скопировать код в буфер обмена
  1. unset($this->id_prefix);
  2.                                
  3. foreach($this->pr_prefix as $vp){
  4.                        
  5.        $name =  trim(str_replace(explode('%' , $vp['prefix_ORIGIN']), '', $this->no_prob_name));
  6.                                
  7.         $count_pr = mb_stlen($vp['prefix_ORIGIN']);    
  8.                                
  9.         if(!$this->news_bd[$name] ||
  10.            $this->news_bd[$name]['prefix'] == 0 ||
  11.            $this->name == $this->news_bd[$name]['orignen'] ||
  12.            $count_ > $count_pr
  13.         ) continue;
  14.                                                                                
  15.         $this->no_prob_name = $name;
  16.                                        
  17.         $this->name = trim(str_replace(explode('%' , $vp['prefix_ORIGIN']), '', $this->name));
  18.                                        
  19.         $this->id_prefix    = $vp['id_p'];             
  20.                                
  21.         $count_ = $count_pr;   
  22.                                        
  23. }
  24.                        
  25. if($this->id_prefix) return;


Можно ли, что нибудь сделать попроще? Там, упростить, что та...
 
 Top
OrmaJever Модератор
Отправлено: 04 Декабря, 2014 - 15:28:12
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




по виду нет, по логике не знаю


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
DeepVarvar Супермодератор
Отправлено: 04 Декабря, 2014 - 16:05:40
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Weber пишет:
trim(str_replace(explode('%'
ГК, что ты там в массиве реплейсишь ака строку? Слово Array при отключенных ошибках?
Weber пишет:
mb_stlen
ГК, чуть выше ты даже не задумывался что там много байтная и лепил str_replace.
Weber пишет:
trim(str_replace(explode('%'
ГК, те же грабли.
Weber пишет:
if($this->id_prefix) return;
ГК, ретёрн посреди метода без ничего и втихую?
 
 Top
Weber
Отправлено: 04 Декабря, 2014 - 16:35:44
Post Id


Частый гость


Покинул форум
Сообщений всего: 172
Дата рег-ции: Окт. 2014  


Помог: 0 раз(а)

[+][+]


Если $this->id_prefix содержит число, значит останавливаю выполнение функции. Дабы префикс в бд есть и записывать новый не нужно.

Про многобайтную не совсем понял. Что именно не так? Верный подсчет в скрипте это если использовать mb_
 
 Top
MiksIr
Отправлено: 04 Декабря, 2014 - 16:35:59
Post Id


Забанен


Покинул форум
Сообщений всего: 378
Дата рег-ции: Сент. 2014  


Помог: 10 раз(а)

[+]


DeepVarvar пишет:
ГК, что ты там в массиве реплейсишь ака строку? Слово Array при отключенных ошибках?

Откройте для себя синтаксис str_replace =)
DeepVarvar пишет:
ГК, чуть выше ты даже не задумывался что там много байтная и лепил str_replace.

Это binary safe функция, mb тут не нужно.
DeepVarvar пишет:
ГК, ретёрн посреди метода без ничего и втихую?

А что вас смущает?

Weber пишет:
Первый вопрос. Можно ли приведенный код, назвать говнокодом?

Стиль не очень красивый. Однострочные if-ы - потенциальная проблема. Советую изучить PSR стандарты. Длинные цепочки функций плохо читаются, лучше не ленится и разбивать на несколько строчек с использованием переменных.


-----
self-banned
 
 Top
DeepVarvar Супермодератор
Отправлено: 04 Декабря, 2014 - 17:00:13
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




MiksIr пишет:
Это binary safe функция

http://stackoverflow[dot]com/questio[dot][dot][dot]trings-dangerous

MiksIr пишет:
Откройте для себя синтаксис str_replace
Да, я попутал порядок аргументов, эта проблема у многих пыхофункций.

MiksIr пишет:
А что вас смущает?
Ретёрн нужен для возврата чего либо. Да, понятно что его используют дабы не продолжать, это не корректно.
 
 Top
Bio man
Отправлено: 04 Декабря, 2014 - 17:51:11
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


Помог: 52 раз(а)




DeepVarvar пишет:
Ретёрн нужен для возврата чего либо. Да, понятно что его используют дабы не продолжать, это не корректно.
А как корректно?
Допустим имеется метод-процедура, в нём return для прекращения выполнения "втихую" вполне уместен. Другое дело, если у нас метод-функция, в таком случае пустой return, да ещё и втихую, недопустим, и является серьёзной ошибкой.
(Добавление)
Weber пишет:
Можно ли приведенный код, назвать говнокодом?
Можно. А именно изза своего, или не принятого обществом, стандарта оформления кода. Присмотритесь к PSR1/PSR2. Хотя не совсем корректно по этой причине называть код ГК'ом.

Но ГК можно назвать это

Разбей построчно. Читабельность превыше всего. И изменить, если что, будет проще.

Всё остальное описывается в PSR1/PSR2
(Добавление)
Вот, в наглядном виде стандарт (возможно не полный) https://github[dot]com/yiisoft/yii2/[dot][dot][dot]re-code-style[dot]md
 
 Top
MiksIr
Отправлено: 04 Декабря, 2014 - 18:02:22
Post Id


Забанен


Покинул форум
Сообщений всего: 378
Дата рег-ции: Сент. 2014  


Помог: 10 раз(а)

[+]



Для UTF8 эта функция безопасна.


-----
self-banned
 
 Top
DeepVarvar Супермодератор
Отправлено: 04 Декабря, 2014 - 19:09:31
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Bio man пишет:
А как корректно?

Ты уже и сам ответил как корректно.
Но ПСРы тут ни при чем, это правила структурного программирования.
Примеры:

PHP:
скопировать код в буфер обмена
  1. // НЕкорректно
  2. function x()
  3. {
  4.     $data = array();
  5.     // что-то делаем
  6.     if (!$data) {
  7.         return;
  8.     }
  9.     // делаем что-то еще
  10. }
  11.  
  12. // корректно
  13. function x()
  14. {
  15.     $data = array();
  16.     // что-то делаем
  17.     if ($data) {
  18.         // делаем что-то еще
  19.     }
  20. }
  21.  
  22. // НЕкорректно
  23. function x()
  24. {
  25.     foreach (...) {
  26.         foreach (...) {
  27.             return;
  28.         }
  29.     }
  30. }
  31.  
  32. // корректно
  33. function x()
  34. {
  35.     foreach (...) {
  36.         foreach (...) {
  37.             break 2;
  38.         }
  39.     }
  40. }

Насколько это актуально для пхп, я не буду утверждать, впринципе там на уровне ядра уже куча касяков.
Но для (гну)си и асма - вроде как очень даже, т.к. return это дорогостоящая операция перемещения в другой регистр(?) проца, чот тип того.
Ну т.е. это все не с того что у кого-то там зачесалась левая пятка, а вполне оправданно.
MiksIr пишет:
Для UTF8 эта функция безопасна.
Да хоть для черта лысого. Заставят тебя делать сайт с поддержкой какого-нибудь китайского, начнешь репу чесать.
А еще по ссылке посмотри внимательнее - там чел показывает касяк с утф.
 
 Top
MiksIr
Отправлено: 04 Декабря, 2014 - 19:45:14
Post Id


Забанен


Покинул форум
Сообщений всего: 378
Дата рег-ции: Сент. 2014  


Помог: 10 раз(а)

[+]


Про косяк с utf-8 там ни слова нет. А если мне придется работать с иными кодировками - я их предварительно изучу.


-----
self-banned
 
 Top
DeepVarvar Супермодератор
Отправлено: 04 Декабря, 2014 - 19:51:29
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Чел говорит о потенциальной возможности просунуть два однобайтных как один двубайтный, и т.д. для "болеебайтных".
Ну, ты будешь изучать по месту надобности, а я уже сейчас интересуюсь.
 
 Top
Bio man
Отправлено: 04 Декабря, 2014 - 20:50:14
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


Помог: 52 раз(а)




DeepVarvar пишет:
Но ПСРы тут ни при чем, это правила структурного программирования.
PSR я относил к общей структуре кода, а не к return'у.

Как насчёт компилируемых языков - не знаю, не изучал, но для PHP +/- 1 микросекунда это ничто.
Да и ничего не случится страшного, если указатель, или что там, переместится в другой регистр, регистры, они шустрые.
Да и по сути, какая разница, когда выходить из ф-ции? Или ты выйдешь return'ом, или выход произойдёт в конце выполнения ф-ции. В любом случае произойдёт передача управления.
Но зато ЧИТАЕМОСТЬ кода становится гораздо лучше, в этом случае:
PHP:
скопировать код в буфер обмена
  1.  
  2. function x()
  3. {
  4.     $data = array();
  5.     // что-то делаем
  6.     if (!$data) {
  7.         return;
  8.     }
  9.     // делаем что-то еще
  10. }
  11.  

Хотелось бы услышать мнение ещё кого нибудь.. может тему создать?
Погуглил, нашёл кое что.
http://www[dot]sql[dot]ru/forum/991601/pustoy-return
http://citforum[dot]ru/programming/c/h14[dot]shtml пункт 1.4.11

По твоему утверждению ничего не нашёл, буду признателен, если кинешь линк где это обсуждается
(Добавление)
А вот еще более уродливый пример:
PHP:
скопировать код в буфер обмена
  1.  
  2. function x()
  3. {
  4.     $data = array();
  5.     // что-то делаем
  6.     if ($data) {
  7.        // делаем что-то еще
  8.        if($condition) {
  9.           // делаем что-то еще
  10.        }
  11.     }
  12. }
  13.  

А вот, как бы это выглядело бы, если использовать return
PHP:
скопировать код в буфер обмена
  1.  
  2. function x()
  3. {
  4.     $data = array();
  5.     // что-то делаем
  6.     if (!$data) {
  7.        return;
  8.     }
  9.  
  10.     // делаем что-то еще
  11.  
  12.     if(!$condition) {
  13.        return;
  14.     }
  15.  
  16.     // делаем что-то еще
  17. }
  18.  

И какой код более похож на ГК?

(Отредактировано автором: 04 Декабря, 2014 - 20:56:41)

 
 Top
Viper
Отправлено: 04 Декабря, 2014 - 20:58:35
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




Weber пишет:
$count_ = $count_pr;
вот от такого точно избавляемся!
В целом согласен с DeepVarvar. Последний пункт требует уточнения т.к. исходный код ТС привел как часть метода, а не полностью.


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
MiksIr
Отправлено: 04 Декабря, 2014 - 21:01:04
Post Id


Забанен


Покинул форум
Сообщений всего: 378
Дата рег-ции: Сент. 2014  


Помог: 10 раз(а)

[+]


DeepVarvar пишет:
а я уже сейчас интересуюсь

Так молодец! Так я тебе и говорю, что в случае валидного UTF8 с обоих сторон - риска нет.
UTF8 исходя из этого проектировался.

Если в двух словах - все UTF8 символы - это байты от 128 до 255. Причем первый байт - от 192 до 255, а последующие от 128 до 191.

По-этому, если UTF8 валиден - ты никак ANSI (который от 0 до 127) символом не заменишь ни одного байта UTF8 символа.


-----
self-banned
 
 Top
Bio man
Отправлено: 04 Декабря, 2014 - 21:02:18
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


Помог: 52 раз(а)




DeepVarvar пишет:

PHP:
скопировать код в буфер обмена
  1. // НЕкорректно
  2. function x()
  3. {
  4.     foreach (...) {
  5.         foreach (...) {
  6.             return;
  7.         }
  8.     }
  9. }
  10.  
  11. // корректно
  12. function x()
  13. {
  14.     foreach (...) {
  15.         foreach (...) {
  16.             break 2;
  17.         }
  18.     }
  19. }



Вот с этим согласен, циклы всё же не условные операторы.
 
 Top
Страниц (4): [1] 2 3 4 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB