## Pascal: parameters by reference

I posted some time ago about Pascal, and the nice (and worst) things that Pascal has in its language. I discovered yet another cool thing. Unlike C, where you can pass parameters to functions by value, or using a pointer (and therefore, as reference), in Pascal you can use a value, you can use a pointer, or declare a parameter as a variable. This is similar to passing by pointer, but with a cleaner syntax.

Note the difference between
 procedure foo(bar: integer); begin bar := 10; end; 
and
 procedure foo(var bar: integer); begin bar := 10; end; 
The first procedure does not change anything in the outside world, while the second changes the value of the variable passed as argument.

As expected, the compiler raises an error if you call this second procedure with a constant integer.

## Pascal: The Good, the Bad and the Ugly

As I posted before, I am teaching Pascal. I could discuss the relevance on teaching this language in this decade, but that is not my concern. I would like just to point The Good, the Bad and the Ugly I find in Pascal.

The Good: Pascal evolved and is a high level language. You have auto-growing strings (ok, with a size limit), you have arrays indexed by characters, integers or enumerated data types. That is good!

The Bad: Pascal syntax continues to be a mess. Begin and End keywords make the code big, the attribution with ‘:=’ makes it easy to type errors, and the low precedence of logic operators make me angry.

The Ugly: I can’t find a clean way to try opening a file without crashing the application. The only method I found (check the bottom of http://www.learn-programming.za.net/programming_pascal_learn10.html needs you to turn on and off compiler flags. That is annoying, stupid and decidedly too low level…