Thursday, June 01, 2006
Library Annoyances - Dot Net
I'm getting really annoyed with some of the design of libraries, and in particular Dot-Net.
If we take the simple task of converting a string into an integer. Clearly we can expected strings to be passed in that cannot be converted into an integer. Dot-Net takes the approach of generating an exception. OK, acceptable practice so far. However, there isn't a method anywhere that enables testing of strings to see if they can be converted to an integer.
You have to write this function yourself.
To have to write this every time such that you can write code in this way
Is really really annoying.
Having an IsInteger function also means that writing unit tests becomes a lot easier.
It also means that you can attempt to put in place preconditions and post conditions in routines.
What is happening is that programmers haven't be brought up with Design By Contract where this sort of function is normal, because it will be used as a pre or post condition. This is one reason why the function should also be side effect free. If you know Eiffel then you will program this way automatically.
Similarly, they haven't thought about the need for functions in unit tests. Here you don't want to be messing around with exceptions unless you are testing an exception framework. You want clean code.
There is the implied connection between unit testing and DBC. Both are needed. Unit testing to exercise the code. DBC to test the code, when ever it is run, not just in a unit test.
If we take the simple task of converting a string into an integer. Clearly we can expected strings to be passed in that cannot be converted into an integer. Dot-Net takes the approach of generating an exception. OK, acceptable practice so far. However, there isn't a method anywhere that enables testing of strings to see if they can be converted to an integer.
Public Function IsInteger(text as String) as Boolean
You have to write this function yourself.
Public Function IsInteger(text as String) as Boolean
Dim i As Integer
Try
i = CDbl(text) ' or use the convert Class
Return True
Catch
Return False
End Try
End Function
To have to write this every time such that you can write code in this way
If IsInteger(text) then
...
Else
... ' Handle error
End If
Is really really annoying.
Having an IsInteger function also means that writing unit tests becomes a lot easier.
It also means that you can attempt to put in place preconditions and post conditions in routines.
What is happening is that programmers haven't be brought up with Design By Contract where this sort of function is normal, because it will be used as a pre or post condition. This is one reason why the function should also be side effect free. If you know Eiffel then you will program this way automatically.
Similarly, they haven't thought about the need for functions in unit tests. Here you don't want to be messing around with exceptions unless you are testing an exception framework. You want clean code.
There is the implied connection between unit testing and DBC. Both are needed. Unit testing to exercise the code. DBC to test the code, when ever it is run, not just in a unit test.
Comments:
<< Home
Int32, and most other integral type classes in the .NET framework implement a method called TryParse which does exactly what you complain is missing from the .NET framework.
Post a Comment
<< Home
Subscribe to Posts [Atom]