Я не знаю, существует ли стандарт того, что считается «умным кодом», но я думаю, что если бы вы показывали программистам различные образцы кода, они бы сразу это поняли.
И было время в моей карьере, когда я очень интересовался написанием умного кода. Но чем старше я становлюсь и чем больше работаю по сопровождению проектов, тем меньше меня заботит написание умного кода и тем больше я заинтересован в написании ясного, читаемого и, следовательно, поддерживаемого кода.
Умный код для птиц. Простите эти глупые каламбуры.
Когда мы работаем с WordPress, мы, вероятно, часто имеем дело с массивами, особенно с учетом того, что большая часть внутренностей WordPress построена на них (да, есть и некоторые объекты, но массивы широко распространены).
Как же тогда выглядит умный код с массивами в WordPress по сравнению с менее умным кодом? И, кроме того, должны ли мы избегать стремления писать умный код?
Умный код с массивами
Функции массива, возможно, являются одним из самых больших наборов функций в PHP.
Естественно, написание умного кода с помощью WordPress частично и частично соответствует среде, верно? Я не говорю, что это совсем плохо. Я просто говорю, что когда у вас есть функции в глобальном пространстве имен, которые работают с массивами, которые возвращают массивы, слишком просто писать вложенные вызовы, которые в конечном итоге требуют немного больше умственной работы для анализа того, что делает код.
Конечно, написать об этом — это одно, но, возможно, имеет смысл посмотреть на пример того, как может выглядеть умный код с WordPress, а затем как его можно рефакторить.
Пример
Скажем, например, у нас есть сообщение, и мы обновляем отрывок сообщения, так что имя, содержащееся в отрывке, необходимо удалить. Когда это происходит, не обязательно важно (хотя delete_user нетрудно представить, верно?)
С самого начала нам дано:
- идентификатор поста,
- имя человека, которого нужно удалить.
Один из способов сделать это — использовать комбинацию array, array_map, explore, array_diff, implode. Все по этой причине:
- массив для создания массива персон (поскольку он, как массив, потребуется позже),
- array_map для обрезки пробелов после разделения фрагмента на массив,
- array_diff для поиска строк, оставшихся после удаления имени,
- и implode, чтобы перестроить результат обратно в строку для post_excerpt.
Итак, с учетом сказанного, вот как может выглядеть умный код в WordPress :
<?php
// Get the excerpt from the incoming post.
$post = get_post( $post_id );
$excerpt = $post->post_excerpt;
/**
* And we update the post content without the information (and we don't need
* paragraph tags).
*/
$event_post->post_excerpt =
apply_filters(
'the_excerpt',
implode( ', ',
array_diff(
array_map(
'trim',
explode( ',', $excerpt) ),
array( $name) ),
),
);
Но это много вложений, и нам обычно приходится начинать снаружи и знать, что делает каждая функция, верно?
Чтобы очистить его, нам все равно придется иметь дело с функциями, перечисленными выше, но мы можем разбить все на более простые для чтения шаги (вместе с комментариями кода), чтобы облегчить анализ для другого разработчика.
Возможно, это могло бы выглядеть примерно так :
<?php
// Get the excerpt from the incoming post.
$post = get_post( $post_id );
$excerpt = $post->post_excerpt;
// Remove the name from the array of names in the excerpt.
$to_remove = array( $name );
$names = array_map( 'trim', explode( ',', $excerpt) );
$result = array_diff( $names, $to_remove );
// Now creae the new excerpt.
$new_excerpt = implode( ', ', $result );
/**
* And we update the post content without the information (and we don't need
* paragraph tags).
*/
$event_post->post_excerpt = apply_filters( 'the_excerpt', $new_excerpt );
Теперь, это способ сделать это? Я не знаю. Но это способ сделать это. И это одна из тех ситуаций, которые легче читать и следовать.
Так что, возможно, это не написание умного кода в WordPress, но я не знаю и не думаю, что это должно быть нашей целью.
Должны ли мы стремиться писать умный код?
В Руководстве по WordPress говорится следующее:
В общем, удобочитаемость важнее, чем остроумие или краткость.
А затем продолжает приводить пример. На данном этапе моей карьеры я склонен согласиться:
- умный код не означает более производительный код,
- умному коду часто требуется больше времени, чтобы пройти через большее количество умственных обручей, чем многословному коду,
- Таким образом, умный код сложнее поддерживать, особенно при переходе к старой кодовой базе.
Наконец, я думаю, что разные люди могут считать один код более умным, чем другой, но есть также код, который многие из нас сочли бы попыткой быть более умным, чем нет.
В конечном счете, стремитесь писать код так, как вы хотите писать, но пишите, думая о другом разработчике: если вы когда-либо жаловались на то, что фрагмент кода сложно расшифровать на первый взгляд, скорее всего, он был написан плохо или это была ошибка. попробуй умничать. Так что не будьте тем парнем или девушкой, которые перекладывают ответственность на следующего разработчика.
Вместо этого стремитесь писать понятный код и использовать комментарии, когда это необходимо.