Работа тестировщиком после переезда в Германию
Эту путаницу допускают нетипизированные языки.
В C# есть "неявный тип" называется "var", если написать так:
String a = "AA";
int b = 3;
var x = a + b;
Console.WriteLine(x);
То результат будет таким:
AA3
Я часто в современном C# коде вижу var.
бuдет
В вашем случае сплошные ошибки, нужно не так, если нет $ перед переменной, то это считается константа в PHP:
$c = a + b; // ok c = 8
$c = a + b; // fail, c = '35'
а вот так:
$c = $a + $b; // ok c = 8
$c = $a + $b; // fail, c = '35'
$a = '3' распознаётся как число, и происходит сложение, т.е. в вашем примере будет $c="8". А вот если вы напишите так: $a = 5; $b = 'x'; и $c = $a + $b; то произойдёт ошибка, будет $c = "5";
Ну вот, а в PHP конкатенация это ".", а не "+", "+" это арифметический оператор. Всё логично продумано, и защищено от путаницы. Иногда когда перехожу на другие языки, поинерции ставлю "." вместо "+".
Вы там недавно спрашивали кто дурак... Наверное тот, кто сам себе услышал слово "конкатенация" и радостно бросился опровергать.
Причём другие участники всё поняли правильно. Я бы на вашем месте задумался бы.
Поясняю: никакой конкатенации быть не должно. $a + $b должно было сложить два числа. Но вот внезапно в $b заносилось не числовое, а текстовое значение. Причём ошибка была чуть ли не в том, что вместо 8,-5,aaa,bbb в CSV стояло 8,- 5,aaa,bbb. И в $b стало равно "- 5". И всё. Вместо 3 получаем на выходе 8.
А теперь давайте, заставьте вот этот код на яве работать как пыхыпы:
String[] splittedCsvLine = <получили откуда-то разбитую на значения строчку CSV>; int a = Intger.parseInt(splittedCsvLine[0]); int b = Intger.parseInt(splittedCsvLine[1]); return a + b;
Для вас поясню - я хочу увидеть сумму (а + б) или ошибку, если что-то пошло не так. А уж что я буду делать с ошибкой решать мне, а не недоязыку.
P.S. Это не единственный случай, когда я офигевал от пыхыпы, но почему-то крепче всего запомнившийся. Такой подлянки я не ожидал. Приведения обоих к типу "строка" и конкатенации? Ладно, можно, легко заметить. Когда вместо цифирки 3 увидишь "8- 5" легко догадаться что пошло не так. Получить ошибку? С удовольствием. Но вот так молча насрать на второй аргумент операции... Такое могЁт только пыхыпы.
P.P.S. Даже жабаскрипт лучше. Хотя тоже как язык редкостная дрянь. Но тут нам на помощь спешит TypeScript. Как я за использование "any" дрючу жабаскриптеров, это просто сказка какая-то :)
Ну вот:
<?php
$csv = '8,-5,aaa,bbb';
$results = explode(',', $csv);
$a = $results[0]; // 8
$b = $results[1]; // -5
echo $a+$b; // 3
echo '<br>';
$a = $results[2]; // aaa
$b = $results[3]; // bbb
echo $a+$b; // Ошибка!!!
?>
Результат, ошибка на 10 строке
Где ошибка, 10 строка:
Если хотите остановить код, то вот пишите это:
function errHandle($errNo, $errStr, $errFile, $errLine) {
$msg = "$errStr in $errFile on line $errLine";
if ($errNo == E_NOTICE || $errNo == E_WARNING) {
throw new ErrorException($msg, $errNo);
} else {
echo $msg;
}
}
set_error_handler('errHandle');
Я часто в современном C# коде вижу var.
"Студентов" больше развелось только и всего.
8.5.1 C# spec "When the local-variable-type is specified as var and no type named var is in scope, the declaration is an implicitly typed local variable declaration, whose type is inferred from the type of the associated initializer expression. "
Испоганить можно прогу на любом языке.
This is specified in section 7.8.4 of the C# 4 spec:
For an operation of the formx + y
, binary operator overload resolution (§7.3.4) is applied to select a specific operator implementation. The operands are converted to the parameter types of the selected operator, and the type of the result is the return type of the operator.
The predefined addition operators are listed below. For numeric and enumeration types, the predefined addition operators compute the sum of the two operands. When one or both operands are of type string, the predefined addition operators concatenate the string representation of the operands.
Если хотите остановить код, то вот пишите это:
От спасибо. Что б я без вас делал-то. И теперь ваш пыхыпы будет вываливаться при всех WARNING или NOTICE. Какое шикарное решение! Нет, вы продолжайте на нём писать, вы и пыхыпы созданы друг для друга.
Даю правильное решение: надо проверять значения, когда они из файлика считываются. Хотя бы тем же is_int. Но вы, как настоящий пыхыпыст, даже не подумали о таком.
Да, вот именно поэтому я на собеседованиях пыхыпистов и отсекаю.
Для вас поясню - я хочу увидеть сумму (а + б) или ошибку, если что-то пошло не так. А уж что я буду делать с ошибкой решать мне, а не недоязыку.
Вы сами хотели увидеть сумму или ошибку, а is_int не даёт ошибку, а лишь проверяет число это, и причём проверяет только integer, и вообще лучше использовать is_numeric https://www.php.net/manual/ru/function.is-numeric.php потому-что а вдруг у вас там не int а допустим long будет? А в C# я использую метод TryParse. Сами дали неправильое задание, а на меня агрессивно нападаете.
Да, вот именно поэтому я на собеседованиях пыхыпистов и отсекаю.
А я к вам на фирму и не собираюсь.Так что отсекайте хоть доотсекайте PHP-шников.
В вашем случае сплошные ошибки
-----
Разумеется - Я же на пыхе не пишу - синтаксических ошибок будет море.
Так что - игнорируй синтаксис и постарайся понять идею.
распознаётся как число
-----
А с чего бы ему распознаваться "как число" если во второй раз туда помещена строка? Ведь если строка будет во второй позиции - будет ошибка.
А операция '+' - коммутативная - результат от перемены слагаемых меняться не должен.
те.
$a + $b == $b + $a
а в пыхе это не соблюдается... мало того - результат еще зависит от конкретных типов данных в переменных
Да, вот именно поэтому я на собеседованиях пыхыпистов и отсекаю.
Я с айти слез потому-что с 2013 на пенсии. А слез с айти потому-что в Германии на айти фирмах как неуровновешеное начальство (которое ничего не знает), так и сами программисты, моббинг я не выдерживаю. Поэтому получил инвалидность, слез с айти, назад туда не полезу. Просто скучно, занимаюсь программированием, это так скажем моё хобби. У нас дома была айти фирма (были Selbständig), и у меня дома очень много трансляторов, часть ещё подарили, итд. Я когда как, у меня спонтанные занятия. Так что я не только PHP занимаюсь, ну и в другие программы играюсь. Ну и все современные трансляторы, интерпретаторы есть на компьютере. Я смотрю видеоуроки, изучаю язык, потом что-то программирую, потом из головы ЯП выкидываю. А пока вы там на собеседование программистов ищите я сплю, т.е. ночью прогаю, а днём сплю, а иногда ночью сплю, а днём прогаю.
А с чего бы ему распознаваться "как число" если во второй раз туда помещена строка? Ведь если строка будет во второй позиции - будет ошибка.
Потому-что PHP не требует и не поддерживает явного типа при определение переменной. Тип переменной определяется по контексту в котором она используется. Там не только распознаётся число или строка... но работает типа как eval или форматирование.
Если я напишу так:
$cats=4;
echo "$cats cats";
Результат будет:
4 cats
Если так:
$cats=4;
$str = "$cats cats\n\r";
echo $str;
Результат будет:
4 cats
И теперь ваш пыхыпы будет вываливаться при всех WARNING или NOTICE. Какое шикарное решение!
Когда я изучал фреймворк Kohana Framework, этот фреймворк при молейшей ошибки не только прекращал работать, но и постоянно записывал log файлы. Там настраивать нужно учиться. Поэтому я с айти ушёл, там само начальство ничего не знает чего от меня хочет. Если спрашиваешь, то говорят иди мол и сам спроси у заказчика. А если не сделаешь во время то ругают.
рекомендую к просмотру. каждый раз хохочу
https://www.destroyallsoftware.com/talks/wat
Вы проверяете мои арифметические/математические способности или что?
a+b=b+a достаточно? Довольны? Что ещё от меня надо? Теперь будете к ко всем мелочам цепляться? Мне не интересно отвечать на ваши вопросы по школьной математики.
Ну так об этом мы и толкуем, что во многих случая это нехорошо.
Ну может кому-то и плохо, а мне лично замечательно . Возможно тип переменной в PHP определяется по регулярному выражению. Но если кому-то не нравится, то у PHP как и у Си, и у пр. ЯП можно в круглых скобках указать самому тип. Хотя странный результат...
$a = '5';
$b = 3;
echo sprintf("%d %c %s", (int)$a, (int)$a, (string)$a);
echo ' ';
echo (string)$a+$b; // (string)$a Всё равно PHP складывает не смотря на то что переменная a является уже строкой.
Результат:
5 5
8
P.S.:Пока кодер который программирует на Java или на C# пыхтит над классами и объектами (меня эта возня в/с ООП весь кайф ломает), PHPшник уже напишит сложный модуль который выполняет сложный SQL запрос, и который возвращает в формате JSON. А Java и C# программисты дорогие как рабочая сила для айти фирмы, а PHPшника можно из под воротни, т.е. везде найти. Если AWS предоставляет PHP, а DynamoDB замечательно работает с PHP, а так-же замечательно PHP работает с MongoDB, то нафиг мне дался ваш C# или Java? Lol, даже к хане через PDO можно подключиться https://blogs.sap.com/2016/10/31/connecting-sap-hana-via-p...