Everyone I've ever talked to about it agrees that defining things to be a negative is just a bad idea. Consider:
if (gronk) do_this(); else do_that(); versus if (not_gronk) do_that(); else do_this(); It is one of the standard refactoring tricks to replace the second one with the first. The word "has" is in the positive, whereas "but" is a negative, but it assigns a positive, even more confusing. The word "now" would be much nicer to indicate a change if you made it orthogonal to the "has". So, use it as follows. To assign a compile time property: $a is now red; To test a compile time property: if ($a is red) {...} To assign a runtime property: $a now has green; Who cares if the order is reversed. Make it work both ways. To test a runtime property: if ($a has green) {...} Me wrote: > I agree 'but' seems a tad odd, and I like the elegance of your > suggestion at first sight. However... > > > First, but is just strange. I have a thing and I want to tell you it > is > > red, so I say 'but'. Huh? > > banana but red; > "foo" but false; > > According to Larry, run time properties will most often be used > to contradict a built-in or compile time property. If he is right > about the dominant case being a contradiction, 'but' works > better for me than anything else I can think of, including 'now' > (explained below).