5 ms·
Really? I can't think of why I would want to use a goto in Python, and if I did it would definitely make it not "Pythonic". Python is 30 years old, is there an
by ladberg 5y ago
Really? I can't think of why I would want to use a goto in Python, and if I did it would definitely make it not "Pythonic".
Python is 30 years old, is there any popular language created in the last 30 years that has goto?
(And also I emphatically agree on the end user executable thing)
- stOneskull 5y agoi can only think of where you want to break out of all nests rather than just the current one.. i still wouldn't use it though.
- echelon 5y ago> Python is 30 years old, is there any popular language created in the last 30 years that has goto? Julia (9 years old) https://sodocumentation.net/julia-lang/topic/5564/-goto-and--label https://sodocumentation.net/julia-lang/topic/5564/-goto-and-... Golang (11 years old) https://golang.org/ref/spec#Goto_statements https://golang.org/ref/spec#Goto_statements Lua (28 years old) http://lua-users.org/wiki/GotoStatement http://lua-users.org/wiki/GotoStatement
- ladberg 5y agoWow I'm actually pretty blown away! I use Go on a daily basis and have never seen it used anywhere or had any clue it was in the language. If you had asked me a few minutes ago if Go had goto I would have said "definitely not and they would never add it because it goes against the Go ethos".
- umanwizard 5y agoWhy does it go against the Go ethos? (Asking out of curiosity. I’ve never used the language.)
- ladberg 5y agoI feel like they usually prioritize simplicity and readability instead of tricks, syntactic sugar, and one-liners. For example there's no ternary operator. Instead you'll have to write out a few lines of if/else. There's no function overloading or operator overloading, no built in min/max, and currently no generics (though they're being added). They definitely try to keep the number of keywords down to a minimum compared to languages like Swift where you could write the same business logic in fewer lines using stuff like try, guard, !, and ?.
- withinboredom 5y agoAn if-statement is essentially sugar for conditional jump which is sugar for compare then jump. Goto is a jump. It’s all sugar.
- selcuka 5y agoThe name of the language should have given it away.
- robertlagrant 5y agoHopefully Go 2 won't have Goto
- mumblemumble 5y agoAlso C# (21 years): https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/goto https://docs.microsoft.com/en-us/dotnet/csharp/language-refe... PHP perhaps gets honorable mention for not originally having a goto statement, but adding one something like 10 years later. Zig moved in the opposite direction. It had one at first, and then removed it: https://github.com/ziglang/zig/issues/630 https://github.com/ziglang/zig/issues/630
- AndyKelley 5y agoFor Zig, note that there's not really a use case for goto that you can't do with other language features. To jump backwards, there's labeled continue. To jump forwards, there's labeled break. The use case that computed goto tries to solve is addressed with labeled continue on a switch [1] [1]: https://github.com/ziglang/zig/issues/8220 https://github.com/ziglang/zig/issues/8220
- nerdponx 5y agoMaybe labeled break and continue is what Python needs, not goto.
- rightbyte 5y agoAll that trouble to avoid proper gotos. Essentially introducing castrated gotos.
- Dylan16807 5y agoIsn't that basically every control flow mechanism?
- rightbyte 5y agoYe sure. I meant that it feels like jumping through hoops to introduce a lot of different mechanisms just to remove goto:s. E.g. "labeled breaks" and using silly loop constructs.
- deleted 5y ago[deleted]
- gobookdev 5y agoGo has goto
- tzs 5y agoI recently needed to do some "what if" tax scenarios. I wrote functions for each relevant IRS form that pretty much just followed the form. For example, for Schedule D I had one line for each form line. For example lines 15 through 20 ended up like this: D15 = 40000 D16 = min(D1, D15) D17 = min(D14, D16) D18 = max(D1-D10, 0) D19 = min(d1, 163300) D20 = min(D15, D19) The variable numbers match the form's line numbers, and the code is a straightforward implementation of the instructions for the line. The instructions include things like "If line X is greater than line Y, go to line Z". I think the code would have been clearer if I could have used goto to match the instructions instead of having to convert to if blocks. For the forms I was interested in at least the if blocks were all fairly simple and the lines in the code were all in the same order as the lines on the form, but I'm not sure that would be true for all of the IRS forms.
- travisgriggs 5y agoMakes total sense to me. The code’s logic would be able to better match the logic flow of the tax statement logic flow which often say things like “if no whatever, skip to #farther.down.the.page.” Sometimes it’s best to let art^h^h^hcode imitate life.
- eru 5y agoFunctions calls would have been clear enough. They are essentially just gotos with arguments when they are in tail position. And for the tax stuff, you wouldn't even need to worry too much about having properly optimized tail calls, as the business logic here is unlikely to blow up your stack.
- ghayes 5y agoFor what it's worth, I actually think your code is clean as is, as it clearly shows the relationships of the computation, and it's easy to understand the flow of data. I'd just suggest naming the variables as best as possible, e.g. d16_NetIncomeRaw = min(...).
- BiteCode_dev 5y agoThat's what functions are for. And bonus, you can put them in several files, and import them when your program grows. Which means you can then call them in the shell to play with them. It will make the whole experience much easier.