<rmcreative>

RSS

Стиль кода Yii2

10 мая 2013

Много спрашивают про стиль кода Yii2. Почему он такой и почему не 1 в 1 PSR-2.

Несовместимостей с PSR у нас три:

  1. У нас 5.3, мы не поддерживаем <?= в ядре потому как он может быть выключен. PSR-1 его разрешает.
  2. У нас табы, в отличие от PSR-2. У них есть объективный плюс. Их можно отображать как угодно в любимой IDE. Четыре пробела как два не отобразишь. На небольших экранах это особо актуально.
  3. У нас есть несколько уточнений, которые в PSR-2 не оговариваются.

Комментарии RSS

  1. №7926
    Никита
    Никита 10 мая 2013 г., 17:50:09

    Ну пробелы хоть вставили в нужным местах, это ненравилось больше всего, а сейчас вполне ок, я доволен.

  2. №7927
    Костя
    Костя 10 мая 2013 г., 17:59:03

    А почему не стоит просто следовать стандарту? Я не вижу плохих черт идти по течению. Вы просто привыкли к своему и все, нет тут объективных плюсов, только субъективность.

  3. №7928
    Sam
    Sam 10 мая 2013 г., 18:01:03

    Костя, пункты 1 и 2 не объективны? Ладно, допускаю, что не у всех есть маленькие экраны, но уж пункт 1 точно объективен.

  4. №7929
    Костя
    Костя 10 мая 2013 г., 18:04:47

    Sam С 1 согласен. Фреймворк не должен прогибать настройки сервера под себя. 2 пункт притянут за уши. Но хотелось бы услышать, что конкретно в 3 пункт входит?

  5. №7930
    ElisDN
    ElisDN 10 мая 2013 г., 18:12:00

    Кстати да, с пробелами между операторами стало легче.

  6. №7931
    Александр
    Александр 10 мая 2013 г., 18:16:03

    Все отлично, кроме как всегда ложки дегтя, но это лично для меня, именование неймспейсов.

  7. №7932
    Sam
    Sam 10 мая 2013 г., 18:38:13

    Костя, пока что вот это:

    1. Куча всего про документацию и phpdoc.
    2. Уточнения по именованию.
    3. Форматирование SQL в строках и массивов.
  8. №7933
    Алексей
    Алексей 11 мая 2013 г., 1:43:19

    Стиль норм, мне нравится. Sam, подскажи как с SPL?

  9. №7934
    Амаль
    Амаль 11 мая 2013 г., 2:00:24

    Очень рад, что в Yii все таки не пошли на поводу у пробельной истерии и юзают табы, как нормальные люди.

  10. №7935
    Rinat
    Rinat 11 мая 2013 г., 3:59:47
    1. PSR-1 разрешает, но не заставляет, здесь нет несовместимости
    2. Субъективно
    3. В PSR-2 есть уточнения, которые в Yii2 не оговариваются: blank line after namespace, line length etc
    4. \Yii.php не следует psr-0 и psr-1 side effects, но это отдельная история
  11. №7936
    Пётр
    Пётр 11 мая 2013 г., 10:05:46

    С табами вы конечно прикольнулись. Пойду искать может в NetBeans можно как то настроить различимо от пробелов показ этих магических зверьков. Интересно в своем то коде будет корректным способом использование 4-х пробелов?

  12. №7939
    Skiller
    Skiller 11 мая 2013 г., 12:13:19

    Пётр, в нетбинсе можно настроить отображение табов, там есть опция сколько должно быть пробелов в одном табе, и нужно ли по умолчанию превращать табы в пробелы.

  13. №7940
    Max Lapko
    Max Lapko 11 мая 2013 г., 12:55:48
    1. Заметил что пока что не весь код в одном стиле (пропущен пробел после if) github.com/yiisoft/yii2/blob/master/yii/renderers/SmartyViewRenderer.php#L66

    2. Так же не понятно зачем использовать magic методы в core github.com/yiisoft/yii2/blob/master/yii/base/Controller.php#L321 лучше использовать сетторы как в yii 1

  14. №7941
    resurtm
    resurtm 11 мая 2013 г., 12:57:06

    Пётр, использование полностью своего стиля кода было корректным и в 1.1. SamDark об этом вроде всегда и писал. =)

  15. №7942
    resurtm
    resurtm 11 мая 2013 г., 13:45:17

    Max Lapko, спасибо! Поправил. Можешь кстати сразу PR создавать на Гитхабе с такими находками.

  16. №7943
    Sam
    Sam 11 мая 2013 г., 14:41:46

    Алексей, а что SPL?

    Rinat,

    1. Мы не разрешаем.
    2. Ещё не дописали.
    3. Имеется ввиду yiic.php?
  17. №7947
    Алексей
    Алексей 12 мая 2013 г., 1:03:18

    Есть ли в Yii2 где-то использование классов SPL? Ходили слухи, что хотите использовать SplObjectStorage. Я навскидку не нашел, но может есть в задумках.

  18. №7948
    Sam
    Sam 12 мая 2013 г., 1:17:25

    Алексей, да, конечно: Iterator, IteratorAggregate, Countable, ArrayAccess. Ну и автозагрузка классов.

  19. №7952
    Пётр
    Пётр 13 мая 2013 г., 7:56:41

    Skiller, про это то я в курсе. Я имел ввиду чтобы визуально я мог отличить где таб, а где пробел, не щелкая по коду. Вообще привычка делать все отступы табами потребует немалой вытренировки, а то на автомате поставишь пробелы и все, все перемешано теперь и у других код выглядит весь кривой.

  20. №7953
    idle
    idle 13 мая 2013 г., 8:05:16

    @Амаль

    Очень рад, что в Yii все таки не пошли на поводу у пробельной истерии и юзают табы, как нормальные люди.

    Пробелы — это, скорее, наследние, чем истерия.

    Касательно «нормальных людей»: достаточно не смешивать пробелы с табуляцией.

    Конечно, с табуляцей не удасться представить код колонками переменной длины, но это, опять-таки, вопрос вкуса.

    $var = what_if($we_do,
                   'require',
                   anice($semantic,
                         $column,
                         $layout)
                   );
  21. №7957
    metalguardian
    metalguardian 13 мая 2013 г., 11:39:51

    Пётр, в большинстве DE можно выставить отображение табов/пробелов.

  22. №7959
    Костя
    Костя 13 мая 2013 г., 12:44:15

    metalguardian, и не в ide тоже. Во всяком случае редакторы типа sublime, notepad++, coda и прочие поддерживают такую настройку.

  23. №7964
    Сергий
    Сергий 14 мая 2013 г., 12:42:38

    Опять началась война табов и пробелов. Вообще с табами проще, им можно задать любою длину в IDE. А вот с пробелами так не прокатит, поэтому я за табы!

  24. №7965
    keltanas
    keltanas 14 мая 2013 г., 16:26:00

    Sam

    пункты 1 и 2 не объективны? Ладно, допускаю, что не у всех есть маленькие экраны, но уж пункт 1 точно объективен.

    1. Когда допишите Yii2, то уж точно на всех серверах будет PHP5.4 стоять. Не, это не сарказм. Это я надеюсь на благонажедность хостеров ;) Да и поддержка 5.3 скоро закончится. Какой смысл оставаться позади, когда можно двигаться вперед? Там и короткие массивы, и разыменования, и замыкания по людски доделаны...

    2. ИМХО, доводы притянуты за уши. Мне даже на ноуте удобнее работать с пробелами. Так что это субъективный плюс.

  25. №7967
    hcbogdan
    hcbogdan 14 мая 2013 г., 21:51:00

    Все же многого нехватает для полноценного использования:

    • ORM менеджера ( doctrine был бы очень кстати)
    • управление пакетами/расширениями/модулями из composer
    • хорошего дебагера "из коробки" ( в этом смысле symfony2 близок к идеалу )
  26. №7969
    Sam
    Sam 15 мая 2013 г., 13:13:26

    keltanas, в 5.4 нет ни одной полезной для фреймворка возможности, которую стоило бы использовать. Поднимать требования лишь из за стиля кода как-то странно.

    hcbogdan, никто не запрещает использовать Doctrine. Composer будет. Дебаг-панелька будет.

  27. №7972
    keltanas
    keltanas 15 мая 2013 г., 13:47:52

    Sam попробую не согласиться. Ты всегда писал, что для Yii важно иметь лаконичный синтаксис. И 5.4 - как раз ступень к этому. И $this в замыканиях - это большой плюс (если вы их используете, кончено), ибо в стиле 5.3 приходится делать костыль:

    $_ = $this; function() use ($_) {}

    и все используемые в замыкании методы делать публичными, что не очень хорошо. Конечно, релиз 5.4 не такой сладкий, как 5.3 или 5.5, но пара вкусностей есть))

  28. №7973
    keltanas
    keltanas 15 мая 2013 г., 14:02:28

    Впрочем, допускаю, что изменения и 5.4, и 5.5 могут быть не существенными, хотя и позволяют писать код быстрее.

  29. №7974
    Sam
    Sam 15 мая 2013 г., 15:18:15

    keltanas, так никто не мешает пользователю поставить 5.4 и использовать новый синтаксис массивов. С замыканиями та же история. Это не значит, что всё это необходимо в ядре.

  30. №7977
    MaximAL
    MaximAL 17 мая 2013 г., 15:22:45

    Sam прав. Сахарные улучшения синтаксиса сами по себе не могут являться поводом повышения требований фреймворка к версии языка.

  31. №7978
    keltanas
    keltanas 17 мая 2013 г., 15:33:39

    Sam, MaximAL согласен.

  32. №7979
    Евгений
    Евгений 17 мая 2013 г., 20:29:59

    Александр, а что вы используете для проверки всего этого. Я привык к Codesniffer, может у вас есть уже готовый стандарт Yii2 для него?

  33. №7981
    Sam
    Sam 18 мая 2013 г., 23:39:41

    Пока ничего. Конфиг для Codesniffer сделаем.

  1. Почта опубликована не будет.

  2. Можно использовать синтаксис Markdown или HTML.

  3. Введите ответ в поле. Щёлкните, чтобы получить другую задачу.