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