Как стать автором
Обновить

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

Хотел написать, что корабли — это вовсе не какие-то особые операторы, а потом посмотрел внимательно на всё остальное…
Вот только про b'string' не понял.
Аналогично, сначала поражался, зачем нужно было в php добавлять такие странные операторы.
после этого:
$object-->property
начал подозревать подставу, а после этого:
[$a <= $b]
всё стало на свои места и то только потому что видел такое один раз в продакшн коде, а некоторые из остальных бывает задают на собеседовании, когда не до чего докопаться.
Вот только про b'string' не понял.
это единственный честный случай, этот оператор влияет только на PHP6, на остальные версии не влияет, потому что в них все строки — бинарные.
PS: автору надо бы добавить тег юмор, а то после тяжёлого рабочего дня можно прочесть статью и не понять, что это вовсе не специальные операторы, тем более что текст читается достаточно сложно.
А как вы бы перевели на русский? Пожалуйста, можете мне объяснить, я скорректирую перевод, так будет лучше для всех. Заранее спасибо.
Мы надеемся, что эти менее известные операторы научили вас кое-чему в PHP.

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


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

Всю эту мысль запихнуть в одно предложение — это ещё надо умудриться)
Можно как-то так:
Он работает ожидаемо: добавляет то, что справа, в массив слева.
Спасибо, заменю на ваш фрагмент.
Очень крутой стеб. ))) Не сразу понял в чем подвох.
Жаль только качество перевода оставляет желать лучшего. Исправьте хотя бы явные орфографические ошибки.
Извините, очень мало опыта в переводе, был бы очень признателен, если указали на ошибки, или лучше снять публикацию, чтобы больше не позориться?
Ну, например, вы понимаете смысл следующих строк?
Просто добавьте b перед любой строкой, но это ничего сделает, словно строка обычным образом.
Он работает так, вы ожидаете, то есть добавляя элемент с правой части в левую частью массива.
И просто прочтите остальной текст — сами все увидите.

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

> Просто добавьте b перед любой строкой, но это ничего сделает, словно строка обычным образом.

Это я сейчас изменил, дополнил но стало хуже. Может я слишком «дословно» хочу всё переводить и получается так? Вот вы как перевели это предложение: «Simply add a b before any string, and it will do nothing»?

> Он работает так, вы ожидаете, то есть добавляя элемент с правой части в левую частью массива.

Это я понимаю, так опять-таки автор написал, добавляется новый элемент -> в правую часть, т.е. в конец.
Вот вы как перевели это предложение: «Simply add a b before any string, and it will do nothing»?

"Просто добавьте b перед любой строкой, и ничего не произойдёт".
Смысл тот же самый, а смотрится уже не так коряво.


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

Этот перевод просто неверный, в оригинале написано про массив слева, а не про левую часть массива. Перевести всё вместе можно как "Он работает так, как вы и ожидаете — добавляет элемент справа в массив слева".

Спасибо, действительно нужно ещё многому учиться.
Насчёт снятия решать всё же вам, у каждого разные критерии. Но на мой взгляд перевод очень плох, я бы публиковать такое не стал. Всякие опечатки — это ладно, дело наживное. Но вот, скажем, в этом пассаже я концовку вообще не понял:
Просто добавьте b перед любой строкой, но это ничего сделает, словно строка обычным образом.
Пришлось лезть в оригинал. Возможно, это случайный косяк, ибо в оригинале нет ничего, соответствующего концовке, но сама идея дословного перевода — в корне порочна. Русские фразы строятся совсем по-другому, в итоге ваша попытка максимально донести мысль приводит в точности к обратному, что мысль понять невозможно или сложно. Или всё понятно, но фраза выглядит коряво, неестественно.
Конкретных мест много, но пара штук для иллюстрации:
В самом деле, это намного более элегантно, чем $array[] = 'element';.
В английском слово «more» присутствует исключительно потому, что таковы правила образования сравнительной степени многосложных слов. Но в русском-то такого правила нет, человек просто скажет «намного элегантнее».
Константы хороши и эффективны, пока вы не захотите больше свободы к их синтаксису.
Вместо «вы захотите» обычно говорят «вам захочется». А «свобода к их синтаксису» вообще звучит непонятно. Хотя бы «больше свободы в их синтаксисе», а можно в данном случае отойти от следования оригиналу и сказать что-то вроде «пока вас не перестанут устраивать ограничения их синтаксиса».

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

Главное, как я считаю, делать перевод таким, какой нравится самому себе. На будущее, лучше дать статье полежать хотя бы сутки, при этом совершенно не думать о ней (а думать о белой обезьяне). Потом свежим взглядом перечитать, воспринимая как что-то чужое, как работу конкурента, которого надо ткнуть носом во все ляпы и недочёты. А потом вспомнить, чья это работа на самом деле, и решить, а устраивает ли она в таком виде, как сейчас. Правда тут ещё нужно не скатиться в противоположность и не начать полировать до бесконечности…
Спасибо за подробное объяснение, просто очень хотелось что-то перевести в один день, вот и результат, но снимать эту статью я не буду, первый блин комом, но и хочется сравнить спустя некоторого времени, изменились качественно мои переводы или нет. Эта статья будет лакмусовой бумажкой для других переводов, потому что мне это интересно, и хочется продолжать это делать, но уже не на этой площадке, лучше тогда на медиуме, там мало кто тебя прочтёт, но в любом случае это хорошо. Так что ещё раз, спасибо, получилась не статья про операторы, а сборник ликбезов, простите отдельно за это, намотаю себе на ус.
Понял свою основную ошибку — переводить слишком дословно, мало уделяя внимания получившемуся результату, как он звучит по-русски, это проблема, но, думаю, решается опытом и непрерывным обучением, а опыта в написании вообще, у меня крайне мало по сравнению с остальными людьми.
Буквально вчера читал оригинал статьи. Вопрос к автору, почему Вы не указали ссылку на оригинал? Многие, как и я, предпочитают читать в оригинале
Он все указал
image
НЛО прилетело и опубликовало эту надпись здесь
Моя невнимательность…

Магия форматирования))

Такое, как звезда смерти, использовать лучше в первых строках приветствия интерпретатора, и то шутки ради — мол такой код тоже валиден. Моментов (операторов), вводящих в заблуждение, имхо лучше вообще не использовать, тем более в продакшене. Я сегодня не мог понять, почему не все переменные массива
$arr = [
  'key1' => 'value1',
  'key2' > 'value2',
  'key3' => 'key3',
];

curl передает. IDE не подсвечивает ошибки, да ее и нет — просто второй элемент будет логический — истина или ложь.

А тут еще больший зоопарк предлагается использовать.
Первого апреля статья была бы в тему, ну или хотя бы в пятницу.
НЛО прилетело и опубликовало эту надпись здесь
Вычитку делаю, тут скорее дело в невнимательности и в недостатке опыта в целом, но спасибо за фидбек.

А я вот, честно сказать, не понял, почему эта статья сначала попала в дайджест, а потом и в перевод. Ничего такого сверх остроумного я не углядел… Может, просто не выспался?:)

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

Извините, по ошибке ответил не на Ваше сообщение, а в корне обсуждения.

Оператор []=

Это не оператор, это автор неуч.
Все эти записи эквивалентны:
$a[] = 5;
$a[]=5;
$a []= 5;
$a         []             =                5;
$a         [                   ]             =                5;
$a
[      
]
=
5
;

И делают одно и то же — добавляют элемент в конец массива.

php как и многие другие языки очень не прихотливы к количеству и наличию пробелов в некоторых местах
Это не оператор,

А как это тогда называется, если это не оператор? Это бинарный оператор, у которого два операнда — массивы, или я ошибаюсь?


php как и многие другие языки очень не прихотливы к количеству и наличию пробелов в некоторых местах

Разумеется, это очевидно, как следующий тест, если рассматривать каждое добавление отдельно друг от друга.


$array = [];

$array []= 'element'; //  время выполнения - 219 мс

$array[] = 'element'; //  время выполнения - 250 мс

$array[]='element'; //  время выполнения - 187 мс
> у которого два операнда — массивы

Ошибся, конечно, правый операнд не обязательно должен быть массивом.
НЛО прилетело и опубликовало эту надпись здесь
Опкеш не синтаксическое дерево кешит, а опкод. А он (опкод) не зависит от опкеша, а генерится самим пыхом. Ну и да, внутри пыха эти инструкции ничем не отличаются и, думаю, это крайне очевидно.… ну разве что лексер парсит разное количество токенов.

Заголовок спойлера
Картинки кликабельны








P.S.
думаю, это крайне очевидно


Ну т.е. в отличии от других вариантов композиции операторов, представленных в статье.

Жаль, только не все варианты приведены в пример, на вскиду, оператор интервала: `1...3` или смайлика: `('hello'; ;)`
Я не о том как это называется или с какой скоростью выполняется.
Я пытался донести что этому оператору не место в данном списке, он доступен с момента появления массивов.
Автор статьи просто переставил пробелы и назвал это чем-то странным. Переставляя пробелы можно кучу месть переделать в что-то странное, что я и показал примером.

PS ну да, очень громко и не так выразился, простите.
НЛО прилетело и опубликовало эту надпись здесь

Значит остальные "операторы" вас не удивили? Эта статья — шутка

Можно методику тестирования? 200 мс (четверть секунды!) на добавление элемента — это какой-то трэш и крайне далеко от правды. Или это время вместе с запуском интерпретатора?

Нет-нет, Вы неверно меня поняли! Я вовсе не против переводов. И Ваш перевод совсем не вызывает отторжения. Есть огрехи, Вы готовы их исправлять — это замечательно. Продолжайте. Я именно про ценность оригинальной статьи. Она не показалась мне достойной включения в дайджест и перевода.

В документации, конечно, есть про оператор []=, но не расписано, но вся суть в том, что пробелы влияют на время выполнения операции, как я показал в комментарии выше https://habr.com/post/412603/?reply_to=18709857#comment_18710621
Конечно, кто-то скажет, что это экономия на списках, для этого может это не так очевидно, но ясно одно — важность пробелов трудно переоценить.

Выполните в цикле 10000 раз и сравните. 1 запуск ничего не покажет.
Никак это не влияет на время выполнения, опкоды одинаковые получаются
Заголовок спойлера
$array = [];
$array []= '1';
$array[] = '2';
$array[]='3';

3     0  E >   ASSIGN                                                   !0, <array>
   5     1        ASSIGN_DIM                                               !0
         2        OP_DATA                                                  '1'
   7     3        ASSIGN_DIM                                               !0
         4        OP_DATA                                                  '2'
   9     5        ASSIGN_DIM                                               !0
         6        OP_DATA                                                  '3'
         7      > RETURN                                                   1

Интересно! Можно было бы добавить ссылки на документацию с этими операторами.
Добавлю еще, вот такой код вполне валиден и работает:
<?php
$a = 1;
https://habr.com/post/412603/
echo $a;

С подсветкой кода легко понять что к чему.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории