Error 1067: Implicit Coercion
Help! I just got that dreaded 1067 error... ohh actually it's not that bad, it's telling me something: 1067: Implicit coercion of a value of type int to an unrelated type String. But what on earth does THAT mean? (We saw a headline in today's paper: "Little Girl Coerced into Car." This must be one scary bug!)
When the compiler detects something wrong with the code, it generates an error. There are different types of errors: Runtime errors and Compile time Errors. (We covered Runtime vs. Compiler errors here.) The error we're discussing here is a compile time error, so we'll learn why this error happens and how to debug it. We learned from the previous classes that the data type assigned to the variable must be same as the data type used for the declaration of variable. When the user forgets this rule, there is a pretty good probability that this error is going to show up.
For example, consider a variable that is declared initially using the data type String. Now, this variable is just like a container which can hold ONLY data of type String. So if we assign string data to this variable later in the program, it will compile normally without any errors. But if we assign a different type of data to this variable, number for example, then this will cause an error and is referred as Implicit Coercion Error.
This happens because when data is assigned to this variable, the application expects it to be a string written within double quotes such as
str="Flash";
But when a number of type integer is assigned to this variable, the compiler detects the mismatch of data types and generates an error. (02 tip: many developers have a charming term for when any error occurs: "it just puked." Hey, WE didn't invent it!) One should be very careful while assigning and declaring variables. Even after taking all possible precautions, there is still a possibility for this error to happen: after all, we're human beings. It's best to be aware of all types of errors: the syntax error (code typed wrong, function not used correctly, etc.,) the implicit error or any other type of error. When the error is a syntax error, there is no point in checking every single variable for mismatch of data type, wasting time. We can directly check for any error in syntax of the code and fix it. But when we see that the error is an implicit error, one has to realize that it is caused mostly due to a mismatch of variables and as such debug it accordingly.