Kort kod och syftningsfel

with No Comments

Det finns ibland flera sätt att göra till synes samma sak i C#, t.ex. när det gäller operatörsöverlagring. De olika teknikerna bär på olika syften, och det är ofta bättre att vara tydlig med sina syften än att försöka skriva så kort kod som möjligt.

I en situation där man vill kontrollera om ett objekt är korrekt konfigurerat, skulle man kunna tänka sig att man beskriver kriterierna i en överlagring av true. Om man överlagrat true, måste man även överlagra false, men false kan enkelt beskrivas som inte true.

Den som konsumerar objekt av ovanstående typ, kan med största enkelhet utföra tester på objektet.

Att överlagra true och false räcker dock inte för att man ska få använda logiska operatörer på objektet, som t.ex. ||, && eller !. För att uttrycket (x || y) ska vara giltigt måste både true, false och | vara överlagrat. Testen som visas nedan…

…kräver alltså att även | är överlagrat, enligt:

Om man låter sitt objekt kunna omvandlas till en bool, behövs varken överlagring av true, false eller de logiska operatörerna. Samma test är giltig om klassen istället är definierad på följande vis:

Detta bär med sig sidoeffekten att du t.ex. kan skicka ditt objekt by value till en parameter där en bool förväntas, vilket innebär att man kan tappa bort själva objektet och få det ersatt med värdet true eller värdet false, utan att det är uppenbart när man gör en överslagsläsning av koden. Överlagringar som beskriver typomvandlingar ska användas när omvandlingar är lämpliga, och implikativa omvandlingar ska inte användas när data går förlorad.

Follow Anders Hesselbom:

Latest posts from

Leave a Reply