Валидный VS правильный

Jun 06, 2023 03:02

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

Слово «валидный» происходит от слова «validus» (в переводе на русский «здоровый, сильный, крепкий») латинского языка. В английском языке используется слово «valid» (по-русски «действительный, обоснованный, годный, имеющий силу» и так далее, есть много вариантов перевода в зависимости от контекста).

Нередко можно встретить (даже во многих серьезных толковых словарях) применение слова «правильный» как одного из значений слова «валидный», что и создает некоторую путаницу. В некоторых контекстах слово «валидный» действительно можно заменить словом «правильный», но тогда зачем существует и используется непонятное слово «валидный», если можно использовать понятное и ребенку слово «правильный»?

В информатике и других науках

Меня, конечно, в первую очередь интересует применение слов «валидный» и «правильный» в программировании.

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

Для замены субъективного слова «правильный» в науках (и не только в науках; везде, где требуется точность, объективность) применяют слово «валидный». Когда говорят о «валидности», то подразумевается соответствие конкретному, стандартизированному, известному всем сторонам, своду правил. То есть «валидность» - это объективное понятие, так как любой участник обсуждения определяет валидность не по каким-то своим личным критериям, а по общим, единым, общеизвестным.

Примеры в программировании

Говоря о «валидности» чего-либо, сначала определяют единый свод правил, по которым определяется «валидность».

1) Например, «валидность с точки зрения синтаксических правил языка программирования C++». Возьмем программу, которая называется «сложение двух чисел»:

#include

int main()
{
int x{43}, y{-5};
std::cout << x * y << '\n';

return 0;
}

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

2) Хорошо, добавим к общему своду правил для определения валидности кроме соответствия синтаксическим правилам языка программирования C++ еще одно правило: «программа должна выполнять то, что заявлено в ее названии». Программист переписал предыдущую программу следующим образом:

#include

int main()
{
int x{43}, y{-5};
std::cout << 10 + 84 << '\n';

return 0;
}

Эта программа валидна, так как она соответствует синтаксическим правилам языка программирования C++ и выполняет то, что заявлено в ее названии. Один пользователь может назвать такую программу правильной, а другой - возмутится и скажет, что программа неправильная: хоть она и выполняет сложение двух чисел, но она выполняет сложение не тех чисел, которые заданы в переменных x и y.

3) Кроме пользователей программы, обсуждающих ее «правильность» или «неправильность», есть еще коллеги программиста. Допустим, программист работает в команде программистов. Для совместной работы в команде программисты нередко определяют дополнительно к синтаксическим правилам языка программирования правила по оформлению кода и так называемым «лучшим практикам».

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

Предположим, программист учел замечание недовольного пользователя из пункта 2 и переписал программу следующим образом:

#include

int main()
{
int x{43}, y{-5};
std::cout << x + y << '\n';

return 0;
}

С точки зрения пользователя программа правильная: она складывает значения переменных x и y и делает именно ту работу, которую пользователь от нее ожидал. С точки зрения коллег программиста программа невалидная: она не удовлетворяет заранее оговоренным в команде правилам оформления кода.

Программист переписал программу следующим образом:

#include

int main()
{
int x{43};
int y{-5};
std::cout << x + y << '\n';

return 0;
}

Теперь программа и валидная (не нарушает синтаксических правил языка программирования C++ и соглашений, принятых в команде программиста), и правильная (делает то, что от нее ожидает пользователь).

Заключение

Прилагательное «валидный» более точное, более объективное, чем прилагательное «правильный». Поэтому прилагательное «валидный» часто используется в технических и научных текстах. Проверку валидности исходного кода легко автоматизировать (валидатор), в отличие от проверки правильности работы программы. В бытовом общении «валидный» и «правильный» - это синонимы.

Примечание

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

Обсуждение, Образование, Программирование, Графоману

Previous post Next post
Up