Counter arguments to WhyNumberingShouldStartAtZero ----------------- '''Dual-use Result''' In string and array "find" functions which return a position number, 1-based can return zero (0) if the item was not found in the array or string. This won't work for zero based because zero is a real position. Some zero-based languages return something equivalent to nil or null, but I've found such awkward (ThreeValuedLogic) and non-intuitive. Null/nil flags are hard to debug and non-WYSIWYG. Zero-based can also return say "-1", but that's awkward. ''How is -1 "awkward" as an 'item not found' indicator but 0 isn't?'' It just strikes me as unnatural. Another reason is that if the language uses/interprets zero for FALSE, then it can more easily be part of a conditional: if (! find("foo", myThing)) { print("Not found."); } Versus: if (find("foo", myThing) == -1) { print("Not found."); } ''Better is...'' if (find("foo", myThing) == NOT_FOUND) { print("Not found."); } ''...which works with NOT_FOUND defined as -1.'' Still longer, and more dependencies. ''More readable; one dependency.'' {PhpLanguage has the === and !== operators that test type in addition to value, so FALSE == 0 but FALSE !== 0} A risky visual and conceptual hack in my opinion. (I'm partial to systems and conventions that don't rely on a "hidden" "type tag", at least for dynamic languages. I prefer "WYSIWYG typing" or "tag free". [Insert topic link when found].) ''So-called "dynamic" languages are frequently rife with abominations. Few popular languages are as muddled as PhpLanguage.'' Agreed. I consider flag-free to be a LiberatingConstraint to simplify dynamic typing model. I'll live with the few drawbacks. ''What's a "flag-free"?'' Sorry, I meant "tag-free". I used to use "flag", but others here preferred "tag" and I concurred. Rest of discussion moved to TypeTagDiscussion. ''Of course, if you have a language with sum types, then you return "nat option" and don't have this confusion...'' ------------------------ '''Closer to End-User''' The end-user will almost always want any displayed counting or itemizing starting at "1". If the internals match this, then less conversion is required between the internals and the end-user side, reducing the code size and conceptual translation steps to inspect, verify, and debug. ---- When you numbering, you go 1-2-3, not 0-1-2! To use the second you are in effect saying you are not here, you are the first, then you are the second! * what is the zero row and the zero column? * there is a difference between numbering and a number system. Zero is merely that position marking the boundary between positive and negative numbers. * you can say I have "no" apples, but that is not a count, it is an absence of a count! -- AnonymousDonor ---- CategoryMath ---- SeptemberTwelve