I learned to code in OO languages. I've always been interested in design patterns, clean code, etc., etc. – you know the type.
Now at work I'm using a BASIC dialect. Given modern programming values, should we try to carry over these same principles to new procedural code?
I'm pondering the following issues, and I wondering if I'm on the right lines.
Variable Names
Variables are not strongly typed (nightmare!), they're given short names and written in ALL CAPS (why?!) – basically I find them hard to read and they could be anything. Once upon a time, I'm sure XCNT = 1
would have offered performance gains over int_EXISTINGCUSTOMERCOUNT = 1
, but we're past that now – surely? I choose the verbose name here.
GOSUB
I want to break down long blocks of code down into multiple smaller blocks. Internally, GOSUB
is used (over a FUNCTION
) if the helper is not re-usable by other programs / functions. Given its ability to add / modify variables without the safety of scoping (as we know it in the OO world) GOSUB
scares me.
This is typical:
GOSUB GET_BEST_CUSTOMER
IF RC = 0 THEN CRT CNAME
But I would write:
rc_GETBESTCUSTOMER = 1 ; !Default exception
str_CUSTOMERNAME = ""
GOSUB GET_BEST_CUSTOMER ; !set rc_GETBESTCUSTOMER, populate str_CUSTOMERNAME
IF(rc_GETBESTCUSTOMER = 0) THEN
CRT str_CUSTOMERNAME
END
With the caveat that GET_BEST_CUSTOMER
would only modify rc_GETBESTCUSTOMER
and str_CUSTOMERNAME
in 'global' scope.
There's more, but it's all along the same lines. Given the editor of choice (Notepad++), I'd say my coding style makes the code easier to read and understand – therefore easier to maintain. But I'm sure some BASIC die-hard would readily tell me I'm doing it all wrong.
Best Answer
GOSUB
GOSUB was a more disciplined version of GOTO. This is a particularly horrible example of the sort of misuse of GOTO that was once popular. GOSUB is an enormous step up from that, and it looks like your codebase is using labels instead of line numbers for the GOSUB targets, so it really could be a lot worse.
I don't know what dialect of BASIC you're using, and I hadn't ever used FUNCTION in the little bit of BASIC programming I did a long time ago, but if FUNCTION in your dialect of BASIC is anything like a modern language function call, I'd prefer it over GOSUB for new code. In your example code, the proposed replacement was 3 times longer than the 2 line original, so I can't really agree that it's more readable, but I'm guessing that a rewrite of the original using FUNCTION would end up having about the same length and clarity as the original.
Naming
I don't see the point in attaching the type to the front of the variable name. Your long names are an improvement over
XCNT
, butEXISTING_CUSTOMER_COUNT
is more readable (IMO) than running them together and sticking a type prefix on it. You may be running them together due to being used to camelCase, but you can't do camel case in all caps.