Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

Работа тестировщиком после переезда в Германию

11076   4 5 6 7 8 9 10 11 12 13 14 все
Murr патриот18.12.20 14:58
Murr
NEW 18.12.20 14:58 
в ответ uscheswoi_82 18.12.20 14:34

"+" это арифметический оператор.

-----

Тебе пытаются пояснить, что в пыхе есть возможность написать

$a = 3;
$b = 5;
$c = a + b; // ok c = 8
$a = '3';
$c = a + b; // fail, c = '35'

При этом никаких ошибок не бuдет.

uscheswoi_82 местный житель18.12.20 15:04
uscheswoi_82
NEW 18.12.20 15:04 
в ответ koder 18.12.20 14:29
Эту путаницу допускают нетипизированные языки.

В C# есть "неявный тип" называется "var", если написать так:

String a = "AA";
int b = 3;
var x = a + b;
Console.WriteLine(x);


То результат будет таким:

AA3

Я часто в современном C# коде вижу var.

кто как обзывается, тот так сам называется... маску ношу чтобы не заразить антиваксеров... Дневник тяжелобольного инвалида
uscheswoi_82 местный житель18.12.20 15:13
uscheswoi_82
NEW 18.12.20 15:13 
в ответ Murr 18.12.20 14:58
б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";

кто как обзывается, тот так сам называется... маску ношу чтобы не заразить антиваксеров... Дневник тяжелобольного инвалида
MrSanders коренной житель18.12.20 15:23
NEW 18.12.20 15:23 
в ответ uscheswoi_82 18.12.20 14:34, Последний раз изменено 18.12.20 15:38 (MrSanders)
Ну вот, а в 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" дрючу жабаскриптеров, это просто сказка какая-то :)

uscheswoi_82 местный житель18.12.20 15:47
uscheswoi_82
NEW 18.12.20 15:47 
в ответ MrSanders 18.12.20 15:23

Ну вот:

<?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 строка:


кто как обзывается, тот так сам называется... маску ношу чтобы не заразить антиваксеров... Дневник тяжелобольного инвалида
uscheswoi_82 местный житель18.12.20 15:57
uscheswoi_82
NEW 18.12.20 15:57 
в ответ uscheswoi_82 18.12.20 15:47

Если хотите остановить код, то вот пишите это:

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');

кто как обзывается, тот так сам называется... маску ношу чтобы не заразить антиваксеров... Дневник тяжелобольного инвалида
AlexNek патриот18.12.20 16:01
AlexNek
NEW 18.12.20 16:01 
в ответ uscheswoi_82 18.12.20 15:04
Я часто в современном 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 form x + 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.
MrSanders коренной житель18.12.20 16:17
NEW 18.12.20 16:17 
в ответ uscheswoi_82 18.12.20 15:57
Если хотите остановить код, то вот пишите это:

От спасибо. Что б я без вас делал-то. И теперь ваш пыхыпы будет вываливаться при всех WARNING или NOTICE. Какое шикарное решение! Нет, вы продолжайте на нём писать, вы и пыхыпы созданы друг для друга.


Даю правильное решение: надо проверять значения, когда они из файлика считываются. Хотя бы тем же is_int. Но вы, как настоящий пыхыпыст, даже не подумали о таком.

Да, вот именно поэтому я на собеседованиях пыхыпистов и отсекаю.

uscheswoi_82 местный житель18.12.20 16:29
uscheswoi_82
NEW 18.12.20 16:29 
в ответ MrSanders 18.12.20 16:17, Последний раз изменено 18.12.20 16:31 (uscheswoi_82)
Для вас поясню - я хочу увидеть сумму (а + б) или ошибку, если что-то пошло не так. А уж что я буду делать с ошибкой решать мне, а не недоязыку.

Вы сами хотели увидеть сумму или ошибку, а is_int не даёт ошибку, а лишь проверяет число это, и причём проверяет только integer, и вообще лучше использовать is_numeric https://www.php.net/manual/ru/function.is-numeric.php потому-что а вдруг у вас там не int а допустим long будет? А в C# я использую метод TryParse. Сами дали неправильое задание, а на меня агрессивно нападаете.


Да, вот именно поэтому я на собеседованиях пыхыпистов и отсекаю.

А я к вам на фирму и не собираюсь.Так что отсекайте хоть доотсекайте PHP-шников.

кто как обзывается, тот так сам называется... маску ношу чтобы не заразить антиваксеров... Дневник тяжелобольного инвалида
Murr патриот18.12.20 16:55
Murr
NEW 18.12.20 16:55 
в ответ uscheswoi_82 18.12.20 15:13

В вашем случае сплошные ошибки

-----

Разумеется - Я же на пыхе не пишу - синтаксических ошибок будет море.

Так что - игнорируй синтаксис и постарайся понять идею.


распознаётся как число

-----

А с чего бы ему распознаваться "как число" если во второй раз туда помещена строка? Ведь если строка будет во второй позиции - будет ошибка.


А операция '+' - коммутативная - результат от перемены слагаемых меняться не должен.

те.

$a + $b == $b + $a

а в пыхе это не соблюдается... мало того - результат еще зависит от конкретных типов данных в переменных


uscheswoi_82 местный житель18.12.20 17:06
uscheswoi_82
NEW 18.12.20 17:06 
в ответ MrSanders 18.12.20 16:17
Да, вот именно поэтому я на собеседованиях пыхыпистов и отсекаю.

Я с айти слез потому-что с 2013 на пенсии. А слез с айти потому-что в Германии на айти фирмах как неуровновешеное начальство (которое ничего не знает), так и сами программисты, моббинг я не выдерживаю. Поэтому получил инвалидность, слез с айти, назад туда не полезу. Просто скучно, занимаюсь программированием, это так скажем моё хобби. У нас дома была айти фирма (были Selbständig), и у меня дома очень много трансляторов, часть ещё подарили, итд. Я когда как, у меня спонтанные занятия. Так что я не только PHP занимаюсь, ну и в другие программы играюсь. Ну и все современные трансляторы, интерпретаторы есть на компьютере. Я смотрю видеоуроки, изучаю язык, потом что-то программирую, потом из головы ЯП выкидываю. А пока вы там на собеседование программистов ищите я сплю, т.е. ночью прогаю, а днём сплю, а иногда ночью сплю, а днём прогаю.

кто как обзывается, тот так сам называется... маску ношу чтобы не заразить антиваксеров... Дневник тяжелобольного инвалида
Murr патриот18.12.20 17:07
Murr
NEW 18.12.20 17:07 
в ответ AlexNek 18.12.20 16:01

section 7.8.4

-----

Это об перегруженных - мы пока еще со встроенными воюем...смущ

uscheswoi_82 местный житель18.12.20 17:33
uscheswoi_82
NEW 18.12.20 17:33 
в ответ Murr 18.12.20 16:55, Последний раз изменено 18.12.20 17:36 (uscheswoi_82)
А с чего бы ему распознаваться "как число" если во второй раз туда помещена строка? Ведь если строка будет во второй позиции - будет ошибка.

Потому-что PHP не требует и не поддерживает явного типа при определение переменной. Тип переменной определяется по контексту в котором она используется. Там не только распознаётся число или строка... но работает типа как eval или форматирование.

Если я напишу так:

$cats=4;
echo "$cats cats";

Результат будет:

4 cats

Если так:

$cats=4;
$str = "$cats cats\n\r";
echo $str;

Результат будет:

4 cats

кто как обзывается, тот так сам называется... маску ношу чтобы не заразить антиваксеров... Дневник тяжелобольного инвалида
uscheswoi_82 местный житель18.12.20 18:09
uscheswoi_82
NEW 18.12.20 18:09 
в ответ MrSanders 18.12.20 16:17, Последний раз изменено 18.12.20 18:12 (uscheswoi_82)
И теперь ваш пыхыпы будет вываливаться при всех WARNING или NOTICE. Какое шикарное решение!

Когда я изучал фреймворк Kohana Framework, этот фреймворк при молейшей ошибки не только прекращал работать, но и постоянно записывал log файлы. Там настраивать нужно учиться. Поэтому я с айти ушёл, там само начальство ничего не знает чего от меня хочет. Если спрашиваешь, то говорят иди мол и сам спроси у заказчика. А если не сделаешь во время то ругают.

кто как обзывается, тот так сам называется... маску ношу чтобы не заразить антиваксеров... Дневник тяжелобольного инвалида
schizo коренной житель18.12.20 20:10
schizo
NEW 18.12.20 20:10 
в ответ uscheswoi_82 18.12.20 13:53, Последний раз изменено 18.12.20 20:16 (schizo)

рекомендую к просмотру. каждый раз хохочу

https://www.destroyallsoftware.com/talks/wat

Храни Вас Г-дь!
Murr патриот18.12.20 20:31
Murr
NEW 18.12.20 20:31 
в ответ uscheswoi_82 18.12.20 17:33

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

-----

$a = funcA();
$b = funcB();
$c = $a + $b;
$d = $b + $a;

Какие из выражений будут выполнены корректно?

Определения funcA() & funcB() могут быть даны после ответа.

AlexNek патриот18.12.20 21:28
AlexNek
NEW 18.12.20 21:28 
в ответ Murr 18.12.20 17:07
Это об перегруженных

Не поленился посмотреть, ради тебя спок

7.8 Arithmetic operators

7.8.4 Addition operator

Есть где то еще другое описание, поделись...

AlexNek патриот18.12.20 21:32
AlexNek
NEW 18.12.20 21:32 
в ответ uscheswoi_82 18.12.20 17:33
Тип переменной определяется по контексту в котором она используется.

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

uscheswoi_82 местный житель19.12.20 03:38
uscheswoi_82
NEW 19.12.20 03:38 
в ответ Murr 18.12.20 20:31

Вы проверяете мои арифметические/математические способности или что?

a+b=b+a достаточно? Довольны? Что ещё от меня надо? Теперь будете к ко всем мелочам цепляться? Мне не интересно отвечать на ваши вопросы по школьной математики.

кто как обзывается, тот так сам называется... маску ношу чтобы не заразить антиваксеров... Дневник тяжелобольного инвалида
uscheswoi_82 местный житель19.12.20 04:05
uscheswoi_82
NEW 19.12.20 04:05 
в ответ AlexNek 18.12.20 21:32, Последний раз изменено 19.12.20 04:25 (uscheswoi_82)
Ну так об этом мы и толкуем, что во многих случая это нехорошо.

Ну может кому-то и плохо, а мне лично замечательно up. Возможно тип переменной в 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...


кто как обзывается, тот так сам называется... маску ношу чтобы не заразить антиваксеров... Дневник тяжелобольного инвалида
4 5 6 7 8 9 10 11 12 13 14 все