Следует ли использовать строго типизированные концепции кодирования при работе с языком свободного типа?

Например, в PHP или других языках свободного типа у меня может быть такой код:

/* PSEUDOCODE based on PHP */
$selection = $this->getSelection($id);

/* Below code will not work in a strict language */
if (is_array($selection))
show_template($selection);//forwards *array* results to the view script
else
print $selection; //prints the *string* notice message

/* Returns either array or string */
/* return param doubles as a business-payload or error message */
function getSelection($id)
{
$result = $db->getResultsById($id);
if ($result) return $result;//array
else return "No results";//string
}

Поскольку я могу делать это на PHP и подобных языках, значит ли это, что я должен?

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

0

Решение

Тот факт, что PHP не является строго типизированным, является одновременно подарком и проклятием. Это отлично подходит для случаев, когда вы хотите иметь возможность обрабатывать несколько типов, но также может привести к некоторому ошибочному коду, если не обрабатывается правильно. Лично я использую «строгую типизацию» в PHP везде, где это возможно, чтобы избежать ошибок (и это выглядит чище и обычно легче для чтения / понимания). Несмотря на это, PHP может и обычно выполняет преобразования автоматически, когда и где бы он ни находился (см. Ниже), именно здесь возникает «проклятие».

function foo(string $string) : int{
//$string will be cast as string if possible, return value is cast as int if possible
return $string;
}

echo foo(1);

Выход:

1

К сожалению, единственный реальный способ применения типа (без использования declare(strict_types=1);) проверкой типа;

function foo($string){
if(is_string($string) && is_numeric($string)){
return (int)$string;
}else{
return null;
}
}

var_dump(foo(1));
echo '<br>';
echo foo('1');

Выход:

NULL
1

альтернативно, вы можете сказать PHP использовать строгие типы;

declare(strict_types=1);

…но затем, конечно, вы теряете некоторые преимущества свободно набираемого языка. В конце дня, это зависит от вас!

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]