Nee. Het geeft aan dat er een functie/mapping bestaat van getal -> boolean. Stel dat je een (complexe) class hebt (C++ voorbeeld) die je ook als boolean kunt gebruiken, dan maakt dat een boolean toch ook geen (subset van) die class?Paul Nieuwkamp schreef op zondag 15 mei 2005 @ 14:28:
Als je een getal als boolean kunt gebruiken geeft dat toch aan dat een boolean een (subset van) een getal is,
Als je aanneemt dat de taal zorgvuldig is ontworpen dan hebben de ontwerpers die optie er expliciet in gezet. Ofwel om backwards compatibility of bijvoorbeeld toch omdat ze het geen ranzige constructie vinden.ie er zit iets in die boolean waardoor je het met een getal kunt vergelijken?
Ofwel dat, of je bent iets totaal aan het verkrachten. Ja je kunt een kam ook gebruiken als hamer, maar dat is dus een ranzige oplossing. Als je een spijker in de muur wilt slaan moet je daarvoor een hamer gebruiken en geen kam, en als je wilt weten of een pointer nil is moet je daarop testen en geen boolean gebruiken -> ranzig gebruik van de mogelijkheden.
Gelijk staan 'werkt' twee kanten op. In dit geval klopt dat misschien, maar in het algemeen niet. nil als false gebruiken vind ik ok, false als nil gebruiken niet. Neem bijvoorbeeld true. 1 -> true, 2 -> true, 3 -> true, maar true -> ?Nu loop je te mierenneuken over mijn aanname van het implementatiedetail pointer = getal. Stel: pointer = getal. Hoe wilde je het dan doen? Schijnbaar is in jouw programmeertaal ergens afgesproken dat nil gelijkstaat aan false, want anders zou je niet (succesvol) een boolean operator kunnen gebruiken op iets van het type pointer.
Zou kunnen ja. In C++ heb je daar ~ voor (! is een logische operatie, ~ bitwise).Wat denk je zelf? if (nil = false) then echo "Ze zijn gelijk", dat is immers waar je schijnbaar met !P op aan het testen bent.
[...]
Met !P ofwel de inverse van P zou je zomaar kunnen bedoelen: De pointer naar het adres waarvan alle bitjes precies andersom staan dan in P..
Dat vind ik helemaal niet 'net zo' goed. Vergelijken met nil doe ik in elk programma. Vergelijken met een bepaald adres niet. Bovendien is het omdraaien van bitjes weer een implementatie detail.Dat iemand bij het ontwikkelen van de programmeertaal heeft besloten dat dat je een pointer kunt evalueren als boolean door op dat moment die pointer te vergelijken met nil is helemaal niet vanzelfsprekend, je zou net zo goed kunnen vergelijken met 1 van de andere 4 miljard mogelijke waarden.
'Vroeger' (in Turbo Pascal) was een (far) pointer trouwens een combinatie van twee getallen.
P <> nil heeft toch ook maar twee mogelijkheden?Door !P te gebruiken beschouw je op dat moment P als boolean, waardoor hij van 4 miljard mogelijkheden er opeens nog maar 2 heeft, en is het aan de programmeur om maar in de specificaties van de programmeertaal om op te zoeken welke 3,999,999,998 mogelijkheden weg zijn gevallen.
Een pointer is geen boolean en dus vind ik !P ranzig.
Ik beschouw !P inderdaad als boolean dan ja, maar P niet.
[ Voor 4% gewijzigd door Olaf van der Spek op 15-05-2005 16:00 ]