Въведение в спецификата на Assert и неговите разновидности
Ексклузивни ИТ новини, рецензии и интервюта
Въведение в спецификата на Assert и неговите разновидности
Assert е специална конструкция, която ви позволява да тествате предположения за стойностите на произволни данни навсякъде в програмата. Тази конструкция може автоматично да сигнализира при откриване на невалидни данни, което обикновено води до необичайно прекратяване на програмата, показващо местоположението на невалидните данни.
Странен, на пръв поглед дизайн - той може да провали програмата в най-неподходящия момент. Какъв е смисълът в него? Нека заедно да помислим какво ще се случи, ако по време на изпълнението на програмата, в даден момент от време, някои програмни данни станат неверни и ние не „попълним“ програмата веднага, а продължим работата си, сякаш нищо не се е случило.

Програмата може да работи дълго време след това без видими грешки. И може по всяко време в бъдеще да се "провали" по причина, известна само на нея. Или изведнъж ви изпомпва пълен твърд диск със съдържание гей порно сайтове.
Твърденията са достъпни на много езици за програмиране, включително java, c #, c и python.
Какви видове твърдения са?
Твърденията ви позволяват да улавяте грешки в програмите по време на компилиране или по време на изпълнение. Проверките по време на компилация не са толкова важни - в повечето случаи те могат да бъдат заменени с подобни проверки по време на изпълнението на програмата. С други думи, твърденията за компилация не са нищо повече от синтактична захар.
Следователно в следващото под твърдения ще имаме предвид само проверки по време на изпълнението на програмата.
Твърденията могат да бъдат разделени на следните класове.
#one. Проверка на входящи аргументи в началото на функция
Ако бъде открита невалидна стойност на който и да е аргумент, това означава, че някъде близо до мястото, където се извиква тази функция, може да има бъгове.
Важно е да се разбере, че входящите аргументи на функцията могат да бъдат неявни.

Например, когато се извиква метод на клас, указателят към обект от този клас (известен още като този и самостоятелно) се предава имплицитно на функцията. Функцията може също да има достъп до данни, декларирани в глобалния обхват, или до данни от обхвата на лексикално затваряне. Също така е желателно да се проверят тези аргументи, като се използват твърдения при въвеждане на функция.
# 2. Проверка на данните, върху които е работила функцията, преди да излезе от тази функция
Ако на този етап бъдат открити неверни данни, тогава кодът на тази функция може да съдържа грешки.
Резултатът от функцията може да бъде неявен. Например, функция може да модифицира данните, на които се препраща (пряко или косвено) от аргументите на функцията. Функцията може също да модифицира данни от глобалния обхват или от обхвата на лексикалното затваряне.

Препоръчително е да проверите верността на тези данни, преди да излезете от функцията.