Учимся разбираться в искусстве программирования

Классика


Самый обычный код.

    $size = sizeof($arr)-1;
    for ($i = $size; $i>=0; $i--) {
        for ($j = 0; $j<=($i-1); $j++)
            if ($arr[$j]>$arr[$j+1]) {
                $k = $arr[$j];
                $arr[$j] = $arr[$j+1];
                $arr[$j+1] = $k;
            }
    }


Барокко


Барокко (итал. barocco — «причудливый», «странный», «склонный к излишествам»)
Барокко свойственны контрастность, напряженность, стремление к величию и пышности как в именовании, так и в комментариях, к слиянию разных стилей кодирования. Обычно уже на продакшене обнаруживаются скрытые «детонаторы».

Чаще всего используется в: JavaScript, C++, Java.

    $SIZE = SIZEof($A_R__R)-1;
    for ($i = $SIZE; $i>=0; $i--) {
        for ($j = 0; $j<=($i-1); $j++)
            if ($A_R__R[$j]>$A_R__R[$j+1]) {
                //используем хитрый манёвр
                $A_R__R[$j+1]  = $A_R__R[$j];  + $A_R__R[$j+1];
                $A_R__R[$j]    = $A_R__R[$j+1] - $A_R__R[$j];
                $A_R__R[$j+1]  = $A_R__R[$j+1] - $A_R__R[$j];

            }
    }


Готика


Черты готики:
Для готики характерно специфическое построение кода в виде всевозможного вертикального выравнивания, богато названные переменные с необычными деталями. Так же часто код настолько привязан к конкретной аппаратной конфигурации, что выглядит внушительно и монолитно.

Чаще всего используется в: JavaScript, PHP, Python, Perl.

    $size   = sizeof($arr)-   1                         ;
    for ($INDEX_I = $size;    $INDEX_I>=0               ;       $INDEX_I--){
    for ($INDEX_J = 0;        $INDEX_J<=($INDEX_I-1)    ;       $INDEX_J++)
        if(                   $arr[$INDEX_J]            >       $arr[$INDEX_J+1]){
        $k  =                 $arr[$INDEX_J]            ;
        $arr[$INDEX_J] =      $arr[$INDEX_J+1]          ;
        $arr[$INDEX_J+1] =    $k                        ;
                                                        }
                                                        }


Минимализм


Общие черты:
Минимализму свойственны пространственная свобода, зонирование пространства, переменные преимущественно однобуквенные, в одном регистре, часто повторно используемые, отсутствие пробелов, простые циклы и условия, реализация только основного функционала, никаких пояснений и комментариев.

Чаще всего используется в: Perl, Ruby, Python, Haskell, Scala, Erlang, F#.

    for($i=sizeof($M)-1;$i>=0;$i--){

    for($j=0;$j<=($i-1);$j++) if($M[$j]>$M[$j+1])
        {
        list($M[$j],$M[$j+1])=[$M[$j+1],$M[$j]];
        }

    }


Экспрессионизм


Банальность, уродливость и противоречия современных языков программирования вызывали у экспрессионистов чувства раздражения, отвращения, тревоги и фрустрации, которые они передавали при помощи хардкода, спагетти-кода, быстрых и грубых хаков. Предпочтение отдается особо уродливому коду с тем, чтобы усилить воздействие на зрителя, не оставить его равнодушным.

Чаще всего используется в: C#, Ruby, Common Lisp, PHP, Shen/Qi II.

<?php
$error = null;
$query = 'SELECT * FROM prices';
$result = mysql_query($query)
    or $error = 'Запрос не удался: ' . mysql_error();
$arr = [];
while ($line =  mysql_fetch_row($result)) {
    $arr[] = $line['price'];
}

$size = sizeof($arr)-1;
for ($i = $size; $i>=0; $i--) {
    for ($j = 0; $j<=($i-1); $j++)
        if ($arr[$j]>$arr[$j+1]) { $k = $arr[$j]; $arr[$j] = $arr[$j+1]; $arr[$j+1] = $k; }
}
echo "<ul>";
foreach ($arr => $v)
    echo "<li>".$v."</li>";
echo "</ul>";
?>
<script>
    var error = "<?php echo $error?>";
    if (error) alert("ERROR: " + error);
</script>



Абстракционизм


Черты абстракционизма:
Практически весь код программы — исключительно декорация вокруг Божественного Объекта. Код, конфигурируемый настолько гибко (и запутано), что хочется, чтобы лучше уж это был hard code.

Чаще всего используется в: Java, PHP.

sort.php
<?php

require_once 'Sorter/Bubble/NumericArray.php';
require_once 'Storage/Array.php';

$bubbleSorter = new Sorter_Bubble_NumericArray();

$storage = new Storage_Array;
$storage->setElements(array(15, 204, 1, 4, 2, 6, 8, 3, 150));

$bubbleSorter->sort($storage);
var_dump($storage->getElements());

Abstract.php
<?php

require_once 'Sorter/Interface.php';

abstract class Sorter_Bubble_Abstract implements Sorter_Interface {
    
    /**
*
* @var Comparator_Interface
*/
    protected $_comparator;
    
    /**
*
* @var Swapper_Interface
*/
    protected $_swapper;
    
    /**
*
* @var Storage_Interface
*/
    protected $_storage;

    
    /**
*
*/
    public function _bubble() {
        for ($i = $this->_storage->getSize() - 1; $i >= 0; $i--) {
            for ($j = 0; $j <= ($i - 1); $j++) {
                if ($this->_comparator->isBigger($this->_storage->getElementByIndex($j + 1), $this->_storage->getElementByIndex($j))) {
                    $this->_swapper->swap($this->_storage, $j + 1, $j);
                }
            }
        }
    }

}


NumericArray.php
<?php

require_once 'Sorter/Bubble/Abstract.php';
require_once 'Storage/Interface.php';
require_once 'Comparator/Numeric.php';
require_once 'Swapper.php';

class Sorter_Bubble_NumericArray extends Sorter_Bubble_Abstract {
    
    public function sort(\Storage_Interface &$storage) {
        $this->_storage = $storage;
        $this->_comparator = new Comparator_Numeric();
        $this->_swapper = new Swapper();
        
        $this->_bubble();
    }
    
}


Ссылка на весь код.

Кубизм


Кубизм характеризуюется использованием подчёркнуто геометризованных условных форм, стремлением «раздробить» реальные объекты на стереометрические примитивы.

Чаще всего используется в: Perl, Shen/Qi II, Python.

    $size=          sizeof($arr)-               1;
    for($i          =$size;$i>=0;       $i--)   {
    for($j          =0;$j<=($i-1);      $j++)

          if($arr[$j]       > $arr[$j+1])
    {
           $k=  $arr[$j];
                $arr[$j]=   $arr[$j+1];
                            $arr[$j+1]=  $k;
    }
    }


Поп-арт


Поп-арт от английского popular art, сокращенно pop art — популярный, общедоступный код.

Черты поп-арта:
Простой и яркий код, вызывающие и провокационные комментарии, поп-арт в коде привлекает неординарных личностей. Чрезмерности в поп-арте практически не бывает — здесь смешиваются различные подходы и стили кодирования. Обычно вырастает из исторического вклада.

Чаще всего используется в: С++, Java, PHP, C#, 1C.

    $CocaCola = sizeof($Elvis)-1;  // определяем максимальный индекс массива <<---- ОТЛИЧНЫЙ ПРИЁМ

    for ($i = $CocaCola; $i>=0; $i--) {
        for ($j = 0; $j<=($i-1); $j++)
            if ($Elvis[$j]>$Elvis[$j+1]) {
                // Меняем местами переменные методом еще дополнительной переменной, потому что ТАК КРУЧЕ
                $Presley = $Elvis[$j];
                $Elvis[$j] = $Elvis[$j+1]; $Elvis[$j+1] = $Presley;
            }
    }



А какой стиль и в каком языке программирования вам чаще всего встречается?

Используемые ресурсы

Метки:
Поделиться публикацией
Комментарии 58
  • +9
    Плохой, так-как это программировал не я.
    • 0
      Проще говоря, это фатальный недостаток стиля других разработчиков.
    • +2
      Готика и кубизм в столь гротескной форме выглядят устрашающе. Не доводилось встречать подобного оформления. К счастью)

      Было бы интересно увидеть варианты оформления (или даже рефакторинга :-D ) первоначального варианта кода от хабражителей. Не обязательно в серьезной форме.
      • 0
        Вообще я бы добавил к этой статье жанр «реализм» — строгое следование стилистическим гайдлайнам.
        • 0
          Имхо. У разных ЯП весьма разные стандарты оформления. В посте же приведены примеры оформления, плохие в любом случае.
          • 0
            Так в чем и дело! Следование стандартам того языка на котором пишешь.
      • +7
        [philosoraptor]Интересно, значки доллара добавляют ценности коду?[/philosoraptor]
        • –2
          [sarcasm]Это как посмотреть. Если ты отдаешь код заказчику, то ты отдаешь от себя доллары, т.е. платишь, что в общем уменьшает количество наличных в твоем кармане. А вот если ты получаешь от заказчика код, который кишит этим символом, то соответственно наоборот, увеличивает количество долларов которыми ты владеешь. [/sarcasm]
        • 0
          PHP — классика?
          • +2
            И правда, раз уж мы говорим о программировании, как таковом, то зачем эти dollar-sign возле переменных, да еще рядом со словами «С++, JAVA». Там такого нету в помине. Давайте уж использовать какой-нибудь lingua franca вроде Си, чтобы не приходилось переводить с PHP.
            • +1
              Знак доллара в именовании переменных используется как-минимум в php, perl, javascript. Да и в посте к именам переменных придираются только в барокко (и то по причине, не связанной с $).
              На мой взгляд, какой бы из распространенных ЯП не взял бы ТС, нашлись бы те, кому выбор бы не понравился.
              • +7
                Ну про Javascript вы лукавите. Там его можно использовать, но не обязательно нужно использовать.
                • 0
                  Я и не писал, что его нужно использовать. Примеры кода с $ не должны так уж взрывать мозг.
                  Да и в той же Java так же можно (и используется во вложенных классах, если память не изменяет) обзывать с использованием $.
                  • –2
                    Его обычно используют для обозначения jQuery-объекта.
                • –1
                  Согласен, PHP явно не тот язык, на котором следовало писать примеры…
              • +2
                Из вышеперечисленных именно минимализм встречался мне чаще других. И это отвратительно.
                • +1
                  старый добрый Perl :)
                • 0
                  Обнаружил в себе ультраминималиста… ))

                  sort($arr);
                  • +7
                    возможно стоило бы для примеров взять какой-нибудь более классический язык типа С или та же Java?
                    код на PHP, при всех достоинствах и недостатках языка, визуально уродлив.
                    • +1
                      И это все из-за "$"?
                      Да уж…
                      • –1
                        Нет, не только.
                        • +1
                          А в остальном, по-сути, тот же C или Java О_о
                    • +1
                      Абстракционизм

                      А вот это точно C#
                      • 0
                        Java туда же =)
                      • –9
                        Тут вроде бы уже перевели больше, чем 1 глава?
                        пс. я правда еще не смотрел
                        swift-info.ru
                        • +2
                          вы потерялись?
                          • 0
                            да :(
                            было открыло 2 вкладки, не в ту написал.
                            А как удалить — хз.
                        • 0
                          ...
                          {
                              $a = $arr[$j];
                              $a1 = $arr[$j+1];
                          
                              if ($a<=$a1) 
                                  continue;
                              
                              $arr[$j] = $a1; 
                              $arr[$j+1] = $a; 
                          }
                          
                          • –3
                            Лучший стиль:
                            arr = arr
                                .OrderBy(x=>x)
                                .ToArray();
                            
                            • –5
                              Индуизм:
                              Пишем задание, прикладываем деньги, получаем решение от злых духов. Магия, да и только.
                              • –4
                                Говнокод забыли
                                • +16
                                  мы же творческие люди. Говнокода не существует, есть ранние работы
                                  • +2
                                    Такого направления, как «говнокод» в искусстве не бывает. Есть примитивизм.
                                  • 0
                                    Да-да-да. Говнокода не существует, есть «творческий подход». Это когда сначала натворил, а потом думаешь: «И с помощью какого нечистого духа все это работает?» :D
                                • +19
                                  Футуризм:
                                  // todo: write a code
                                  
                                  • 0
                                    Или что нибудь маргинальное:
                                    // TODO: Refactor later
                                  • +6
                                    Точка с запятой в первой строчке (после комментария) области видимости оператора if, перед плюсом, и является тем самым хитрым манёвром?
                                    • 0
                                      Глаз — алмаз. Фиксить не буду, дабы люди видели что да как)
                                    • 0
                                      Страдаю абстракционизмом в тяжелой форме, не знаю, хорошо это или плохо.
                                      • +2
                                        Особенно «радует» готишный (конечно не такой выраженный как в примере автора) стиль при определении многомерных массивов в PHP, когда все выравнивают до такой степени что читаемость уже не улучшается, а падает.

                                        $config = array(
                                            'db'             => array(
                                                'connectionString'   => 'mysql:host=localhost;dbname=site',
                                                'emulatePrepare'     => true,
                                                'username'           => 'root',
                                                'password'           => '',
                                                'charset'            => 'utf8',
                                            ),
                                            'clientScript'   => array(
                                                'scriptMap'  => array(
                                                ),
                                            ),
                                            'errorHandler'   => array(
                                                'errorAction'    => 'site/error',
                                            ),
                                            'log'            => array(
                                                'class'      => 'CLogRouter',
                                                'routes'     => array(
                                                    array(
                                                        'class'  => 'CFileLogRoute',
                                                        'levels' => 'error, warning',
                                                    ),
                                                ),
                                            ),
                                        );
                                        
                                        • +1
                                          Тут все портит одинаковое выравнивание на разных уровнях, которое еще и не постоянно, а как автору захотелось.
                                          • 0
                                            Так лучше:
                                            $config = array(
                                                'db'             => array(
                                                    'connectionString'   => 'mysql:host=localhost;dbname=site',
                                                    'emulatePrepare'     => true,
                                                    'username'           => 'root',
                                                    'password'           => '',
                                                    'charset'            => 'utf8',
                                                ),
                                                'clientScript'   => array(
                                                    'scriptMap'          => array(
                                                    ),
                                                ),
                                                'errorHandler'   => array(
                                                    'errorAction'        => 'site/error',
                                                ),
                                                'log'            => array(
                                                    'class'              => 'CLogRouter',
                                                    'routes'             => array(
                                                        array(
                                                            'class'          => 'CFileLogRoute',
                                                            'levels'         => 'error, warning',
                                                        ),
                                                    ),
                                                ),
                                            );
                                            
                                            • 0
                                              Как по мне, так не сильно лучше)
                                              • 0
                                                Как в идеале оформить этот кусок кода?
                                                • +1
                                                  Идеал у каждого свой (личный, корпоративный, ...).
                                                  На свой вкус я бы оформил так
                                                  $config = array(
                                                      'db' => array(
                                                          'connectionString' => 'mysql:host=localhost;dbname=site',
                                                          'emulatePrepare'   => true,
                                                          'username'         => 'root',
                                                          'password'         => '',
                                                          'charset'          => 'utf8',
                                                      ),
                                                      'clientScript' => array(
                                                          'scriptMap' => array(
                                                          ),
                                                      ),
                                                      'errorHandler' => array(
                                                          'errorAction' => 'site/error',
                                                      ),
                                                      'log' => array(
                                                          'class'  => 'CLogRouter',
                                                          'routes' => array(
                                                              array(
                                                                  'class'  => 'CFileLogRoute',
                                                                  'levels' => 'error, warning',
                                                              ),
                                                          ),
                                                      ),
                                                  );
                                                  

                                                  Еще встречаю часто такой подход, который тоже в целом неплох (в php смотрится не особо, но в языках, использующих для разделителя ":" или "=", гораздо лучше)
                                                  ...
                                                      'db' => array(
                                                          'connectionString' => 'mysql:host=localhost;dbname=site',
                                                          'emulatePrepare' =>   true,
                                                          'username' =>         'root',
                                                          'password' =>         '',
                                                          'charset' =>          'utf8',
                                                      ),
                                                  ...
                                                  


                                                  • 0
                                                    Разбивать на отдельные массивы, и собирать итоговый из полученных.
                                                    За инициализацию четырёхмерного массива одной командой по рукам бить надо.
                                          • –2
                                            Хмм…

                                            $A_R__R[$j]; + $A_R__R[$j+1]

                                            ";" и был хитрым манёвром?
                                            • 0
                                              комментарии не читай
                                              @
                                              сразу отвечай
                                            • 0
                                              Модернизм:

                                              $sorted = new SplMaxHeap();
                                              foreach($arr as $v) {
                                              $sorted->insert($v);
                                              }

                                              • +1
                                                В коде минимализма нужно фигурные скобки убрать
                                                • 0
                                                  А как же «пост модерн», где присутствуют и фичи понятные не каждому, и выравнивание в линейном стиле?
                                                  $data = $_POST[ 'modern' ];
                                                  
                                                  for( $i = sizeof($data)-1; $i >= 0; $i-- ){
                                                      for( $j = 0; $j <= ($i-1); $j++ ) {
                                                          if( $data[$j] > $data[$j+1] ) {
                                                              $data[$j] ^= $data[$j+1] ^= $data[$j] ^= $data[$j+1];
                                                          }
                                                     }
                                                  }
                                                  
                                                  • –3
                                                    Зефиризм
                                                    int size, i, j;
                                                    var temp;
                                                    let size = sizeof(arr)-1;
                                                        for i in range(size, 0) {
                                                            for j in range(0, i - 1) {
                                                                if arr[j] > arr[j+1] {
                                                                    let temp = arr[j];
                                                                    let arr[j] = arr[j+1];
                                                                    let arr[j+1] = (int)k;
                                                                }
                                                            }
                                                        }
                                                    
                                                    • 0
                                                      Зефиризм — это не направление в искусстве
                                                    • 0
                                                      Все программисты на ассемблере — готы.
                                                      • +3
                                                        Еще Streetfighter-style:
                                                        image
                                                        • 0
                                                          Наглядно и компактно, чо
                                                        • 0
                                                          На работе проект выполнен в стиле экспрессионизма. Лапша-код, тонны копипасты и прочие прелести «экспресс-разработки» =)

                                                          Сам же я работаю в основном в смеси абстракционизма и готики: вынесение алгоритмических структур в библиотеки и классы, тщательное и аккуратное форматирование кода. Иногда форматирование отдаёт кубизмом, особенно в секциях данных. В самих алгоритмах периодически проскакивает барокко в виде «джедайских» приёмчиков. Впрочем присутствует иногда (особенно в последнее время) элемент поп-арта в виде не сильно литературных комментариев к коду.

                                                          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.