As I have mentioned some time ago – I’m not a fan of VB.NET. Here is another example why:
Let say we have such function:
Function CalculateAmount(ByVal items As List(Of Item)) As Decimal Dim amount As Decimal = GetSum(items) ''returns 15 Dim tax As Decimal = CalculateTax(amount, items) ''returns 5 Dim serviceCharge As Decimal = CalculateSC(amount, items) ''returns 2 Return amount + tax + serviceCharge ''returns 27 End Function
at first look everything looks fine. But, why there 27 as result, and not 22?
Oh, that’s obvious. Someone declared CalculateTax as:
Function CalculateTax(ByRef amount As Decimal, ByVal items As List(Of Item)) As Decimal Dim tax As Decimal ''some magic amount += tax Return tax End Function
In above example it might be easy to find issue. But in more complex code, where developers don’t always care about it…
C# made it easier, you can either use ref or out, and you have to add this modifier when function is called. So much easier to read.