× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.



John,

I read the blog you're pointing to prior to replying. It did nothing to change my opinion of GOTO. Please understand that the debate about GOTO has been raging for at least 40 years, and we're really unlikely to solve the question here.

Here's a link that discusses both sides of the question:
http://www.stevemcconnell.com/ccgoto.htm

But, I can only give my opinion. And my opinion is that RPG is better off without GOTO in /free format.

It's important to understand that the vast majority of a programmer's time is NOT spent writing code. It's spend reading and understanding someone else's code so they know which part of the code needs to be modified, which parts can be ignored, which parts aren't modified, but still need to be re-tested, etc.

Even if you use GOTOs in the best possible way, it will take me longer to read and understand your program flow because any point in the program can jump to any other point in the program. You say that's a non-issue because you'll use the goto "correctly" -- but if I'm reading your program, how will I *know* that without taking the time to read everything? However, if there are no GOTOs allowed in the language, I don't have to worry about it.

IBM has provided op-codes like LEAVE, ITER, LEAVESR, RETURN, MONITOR/ENDMON to make it easy to do the "good" style of GOTO without using the actual GOTO statement. With those statements you can do the "good" part of GOTO without resorting to GOTO opcode that causes so many problems.

I dunno... I think we'll just have to agree to disagree.


john e wrote:

I think the problem is with the people, not the tools.
Developers writing bad code using goto still write bad code without the goto.

goto... IMHO, it's never actually BETTER with the goto. Not having it forces people to structure their code around the way the program is SUPPOSED to flow, and leads to better code in the long run.

In "normal" circumstances, yes, but in the case of error handling using goto can really make the code much more clean.

See the articles below for other opinions about this.
There really seems to be a consensus that using "goto" in a classic language like C or RPG (no exception handling) in situations where in case of an error the "supposed" flow of the code is to escape to "clean-up" code is much cleaner than using multiple nested ifs etc.

I know it's still available in "fixed" format, but in practice this actually means it's gone. You really don't want to code
/end-free
goto out;
/free

And i really don't know what practical problem this solves. You don't get clean code just be removing the "goto". Besides not many new RPG code is being written. The bulk of RPG is maintanance code which probably uses "goto". Now this code can't be easily converted to /free without the code being littered with /end-free .. /free. The removal of "goto" brings more problems than it solves, IMO.

The problem of abuse of goto is not solved with the removal, because most "abusers" are probably programmers which 90% of their time do maintenance now. And it's now more difficult to persuade them to convert to /free because of the ugly code littered with /free .. /end-free.

RPG is NOT "modern" such that goto is not necessary.


Date: Mon, 27 Apr 2009 02:19:11 -0700
From: rpg400-l@xxxxxxxxxxxxxxxx
To: rpg400-l@xxxxxxxxxxxx
Subject: Re: Why was GOTO removed from /free?

My personal opinion is that GOTO is a bad thing to have in a modern language. I agree with the plethora of papers and articles that have said this.

I do see your point to a degree. It's possible to use GOTO in a way that isn't too bad... the problem is that it always starts out that innocently, but then gets overused and leads to a mess. Usually, at best, the code with the goto is "just as clean as" code without the goto... IMHO, it's never actually BETTER with the goto. Not having it forces people to structure their code around the way the program is SUPPOSED to flow, and leads to better code in the long run.

Just my opinion.

Regarding it being "removed" from /free -- it wasn't removed, because it was never in /free. The fixed format GOTO is still there, and can still be used as always.

I have been writing GOTO-free RPG code now for 15 years (I started in RPG/400) and at first it was really hard to get the hang of, and I felt as you do that it was cumbersome and that I was avoiding it for no good reason. But after doing it for awhile I found the gotoless code nicer. Now, after so long, I would never even consider going back.

Also, RPG *does* support exceptions, although I wish IBM would make them simpler to use -- but I do use those as well.


john e wrote:

Without giving something back...?

For clean error handling "goto" is often the best choice in a classic language (yes RPG is still classic, like C).

What problem has been solved now by just removing goto from RPG as we don't have exception handling in RPG as we have in C++ or Java?


http://eli.thegreenplace.net/2009/04/27/using-goto-for-error-handling-in-c/

_________________________________________________________________
De grappigste filmpjes vind je op MSN Video!
http://video.msn.com/video.aspx?mkt=nl-nl
--
This is the RPG programming on the IBM i / System i (RPG400-L) mailing list
To post a message email: RPG400-L@xxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
visit: http://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxx
Before posting, please take a moment to review the archives
at http://archive.midrange.com/rpg400-l.


_________________________________________________________________
Nieuws, entertainment en de laatste roddels. Je vind het op MSN.nl!
http://nl.msn.com/


As an Amazon Associate we earn from qualifying purchases.

This thread ...

Follow-Ups:
Replies:

Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].

Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.