Я не знаю, чи існує стандарт для того, що вважається «розумним кодом», але я думаю, що якби ви показали програмістам різноманітні зразки коду, вони б це дізналися, коли побачили.
І був час у моїй кар’єрі, коли я був дуже зацікавлений у написанні розумного коду. Але чим старшим я стаю і чим більше роботи роблю над підтримкою проектів, тим менше мене хвилює написання розумного коду і тим більше я зацікавлений у написанні коду, який є зрозумілим і читається, а отже, підтримувати його.
Розумний код для птахів. Вибачте за ці дурні каламбури.
Коли ми працюємо з WordPress, ми, ймовірно, часто маємо справу з масивами, особливо з огляду на те, що більшість внутрішніх елементів WordPress побудовано на них (так, є також деякі об’єкти, але масиви поширені).
Як же тоді розумний код із масивами виглядає в WordPress порівняно з менш розумним кодом? Крім того, чи варто уникати написання розумного коду?
Розумний код із масивами
Функції масиву, можливо, є одним із найбільших наборів функцій у PHP.
Природно, написання розумного коду за допомогою WordPress, здається, частково відповідає навколишньому середовищу, чи не так? Я зовсім не кажу, що це погано. Я просто кажу, що коли у вас є функції в глобальному просторі імен, які працюють з масивами, які повертають масиви, надто легко писати вкладені виклики, які зрештою вимагають трохи більше розумової роботи для аналізу того, що робить код.
Звичайно, писати про це — це одне, але, можливо, має сенс подивитися на приклад того, як може виглядати розумний код із WordPress, а потім як його можна переробити.
Приклад
Скажімо, наприклад, у нас є публікація, і ми оновлюємо фрагмент публікації, щоб ім’я, яке міститься у фрагменті, потрібно було видалити. Коли це відбувається, не обов’язково важливо (хоча delete_user неважко уявити, чи не так?)
З самого початку нам дано:
- ідентифікатор посади,
- ім’я особи, яку потрібно видалити.
Одним із способів зробити це було б використовувати комбінацію array, array_map, explode, array_diff, implode. Все з цієї причини:
- array для створення масиву особи (оскільки він, як масив, знадобиться пізніше),
- 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 зазначено наступне:
Загалом, читабельність важливіша за кмітливість чи стислість.
А потім переходить до наведення прикладу. На цьому етапі моєї кар’єри я погоджуюсь:
- розумний код не означає більш продуктивний код,
- розумний код часто займає більше часу, щоб проскочити більше розумових кіл, ніж багатослівний код,
- розумний код, таким чином, важче підтримувати, особливо якщо переходити до старішої кодової бази.
Нарешті, я думаю, що різні люди можуть вважати певний код більш розумним, ніж інші, але є також код, який багато хто з нас вважає спробою бути більш розумним, ніж ні.
Зрештою, прагніть писати код так, як вам хочеться, але пишіть, пам’ятаючи про іншого розробника: якщо ви коли-небудь скаржилися на те, що фрагмент коду важко розшифрувати на перший погляд, швидше за все, він був погано написаний або це був спробувати бути розумним. Тож не будьте тим хлопцем чи дівчиною, які перекладають відповідальність на наступного розробника.
Натомість прагніть писати чіткий код і використовувати коментарі, коли це необхідно.