fixed rule

amber (she/her)@lemmy.blahaj.zone to 196@lemmy.blahaj.zone – 628 points –
102

Allman is very practical for JSON

Allman is the way.

Always Allman. Those others give you cancer

Finally, someone understands that Allman is not that great, and that Kernighan & Ritchie is the way to go. Also, Haskell, my guy, you good? Lisp, are you ok? Do I need to call your parents?

I've written Haskell quite a bit, and I don't fully understand why this is called Haskell style. Haskell code looks nothing like this, the syntax is completely different. For Haskell's syntax I think it works fine, because I never noticed something weird. But this code in "Haskell style" looks absolutely insane

It's sometimes called comma-leading style where you move all the special characters to the front of the line and it is exceedingly common in Haskell, possibly due to how Haskell treats significant whitespace. You've surely seen list definitions that look like this:

someList =
  [ 1
  , 2
  , 3
  ] 

or a data definition like this:

data Color
  = Red
  | Green
  | Blue
  | RGB Int Int Int
  deriving (Show, Eq)

or a list of module exports like this:

module Foo
  { bar
  , baz
  , quux
  } 

Or in a long function type declaration where the arrows are moved to the start of the line, or a record definition, etc. etc.

Meh, it's what you get when you write a language in a different language's "style".

You should see how a Lisper writes in their native language

They are super extra not okay

All of those are heretical. The one True Language is Brainfuck, where the coding syntax for Hello World is

++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.

Allman looks fine to me. But I'm a C# dev so maybe I'm just used to it.

Allman changes the way I code. I avoid using imperative constructs so much more because they waste so much more space on my screen.

idk, Allman is very readable. Easy to scan vertically to find the matching open brace. Not quite as vertically-space efficient as the best way, but it's not offensive.

In my first ever programming class textbook was using Allman. Probably for this reason, it is easy for a beginner to match braces. It is a lot loss common industry to my knowledge.

this is only true if you don’t indent properly

I literally don't understand. I've read your comment several times and I don't know what you're talking about. Sorry!

Did you think I was saying that made Allman better than the best way? Because it's easy to scan vertically the best way, too. It's just also easy with Allman, so it's not offensive.

I don't think they were disagreeing with you, I think they were just trying to say:

You shouldn't need braces to be vertically aligned if your code is uniformly indented. Then you can easily see what code is paired together just by their indentation level.

Of course this is not always true if you've got a bunch of crazy nested indentation pushing things off to the right.

Allman works best if you like folding code blocks.

Why?

If you use if (blah) { then when you fold your code you still see the { but not the closing } (I suppose some IDEs might be smart enough to do something about this, but when not it looks like your code has an overbite).

And then you've got a mental disorder if you indent your opening and closing brace more than the statement spawning them.

Yeah, I just don't see why IDEs couldn't make them all fold in the same way. It's trivial. I don't see it as a valid complaint.

No line breaks. Just one long line of code.

All line breaks. Just one tower of code.

class
HelloWorld
{
public
static
void
main(String[]
args)
{
System.out.println("Hello,
World!");
}
}

as always, c++ lets us do better in breathtakingly elegant fashion:

#\
i\
n\
c\
l\
u\
d\
e\
 \ 
<\
i\
o\
s\
t\
r\
e\
a\
m\
>

finishing out hello world is left as an exercise to the reader, but the advantages and superior performance of this format should be obvious

why not

...

System
.out
.println(
"Hello,

...

?

I’ve seen some people who code like this

Tell me you're a Java developer without telling me you're a Java developer.

Noone writes Haskell like that. People generate Haskell like that because layout syntax is a fickle beast to generate and outputting braces means you can make mistakes in layout without breaking things, the way the braces and semicolons are output emphasise how they actually don't matter, they're also easy to delete in a text editor.

Also it matches up with other Haskellisms, e.g. lists:

let foo = [ bar
          , baz
          , quux
          ]

See how it's immediately apparent that you didn't miss a single comma? It's also trivial to match up opening and closing brackets like that, even in deeply nested situations.

Not doing that is actually my main pet peeve with Rust's standard formatting.

Allman is the only other one that has some sanity.

That's not Lisp...

(while (== x y)
  (func1)
  (func2)
)

(((((Not(enough)))((parentheses)))))

No syntax, only parentheses

Hear me out: brainfuck, but with parentheses only.

>    )))
<    (((
+    ())
-    (()
.    ()(
,    )()
[    )((
]    ))(

Hello world example:

()))(((()(())))(())(())))))()))))(()
(()(()(()(()(((((())(((((()(()((((()
(()(()))()))(()()()))))))))())()()))
)))()(()(())())()))((()()))))(((((((
((((((()(())())())()((()(()(()(()(()
(()()((((((((()()())))))))))))())()(

Ancient aliens meme with the caption "LIPS!!"

Python transpiler:

#!/usr/bin/env python
"""Lipsfuck to brainfuck transpiler"""

from sys import stdin

OPS = {")))": '>', "(((": '<',
       "())": '+', "(()": '-',
       "()(": '.', ")()": ',',
       ")((": '[', "))(": ']'}


def main():
    """Obvious main procedure"""
    _d = ''.join(stdin.readlines()).rstrip('\n')
    for _op in [_d[x:x+3] for x in
                range(0, int(len(_d)), 3)]:
        print(OPS[_op], end='')
    print()


if __name__ == "__main__":
    main()

What kind of monster writes lisp with the closing bracket on its own line.

Allman or even horstmann I could still deal with, the rest would be difficult.

Though none are as bad as whoever came up with right aligning all the brackets to make any code look like python until you spot the deranged line of brackets on the right…

I cannot for the life of me find it now but the dude put it on GitHub

I found this from ~9 years ago on imgur, “A Python programmer attempting Java”

Haha ya that is probably it, looks great, just don’t read all the way to the right 😆

People code like that????

People indent braces more than the line before and less than the line after?

Words cannot express my displeasure

I quite like GNU

GNU style is logical, because braces are syntactically a single statement:

while (x == y)
  func1();  // can be replaced by { ... }

However, I prefer to entirely avoid unbraced single statements after while/if:

while (x == y) {
  func1();  // easy to add func2(); later
}

Although this is ok when it fits:

while (x == y) func1();  // brevity!

Looking at them all, I don't hate whitesmiths. Keeps all the associated block on one line which makes it a bit easier to parse

I use Allman for control statements and K&R for declarations

If you have ADHD, your coding style is a combination of all of these, and sometimes none of the above.

For real, this is why I enable format on save.

Some of those made me physically ill.

Like. You do WHAT with your whitespace?!

To be fair, some of these look very different in non-C-like languages (e.g. Lisp/Haskell).

Go is a very opinionated language which is why I was so lucky for their opinion on this (and other things) to agree with mine.

Allmans what I learnt then went to K&R on my own because it made more sense to me. I think GNU is fine I guess, not the others though. Not that what I say matters I've forgotten how to code and can barely do Hello World these days.

Why would a development environment show you code in a different style from what you like? It's a simple conversion.

Why would your IDE show you code in a language other than you prefer? It's just a conversion.

Even my web browser shows any text in languages I can read, but for some reason it doesn't let me edit a document through the translation.

If prefer two spaces per indention instead of tabs, but otherwise I agree with the choice of style.

Tabs has no place in code, just recently I started a project with four space indentation, that quickly got changed to two.

Change your tab width, but tabs are literally made for indentation.

The reason I loathe tabs is that over time a codebase with tabs becomes mixed tabs and spaces and unless your editor shows tabs you can't see them.

In the end you have to choose either spaces or tabs, and enforce it with some lint tool.

That last line is the solution though, choose a linter, enforce all style arguments, so they are just the way the code is. No arguments.

Every single project I work on is setup with prettier. With Java there is a maven plugin that runs it on compile. And with ts projects it is part of the built pipeline.

I wish I could use prettier for Abap, reminds me how much I like having an opinionated formatter. I don’t like wasting time formatting code manually.

Abap has one formatter that is not very opinionated, and lets way more to much wierd spacing through, especially for a language that is as verbose as abap.

On a serious note tho, I never understood the benefits of GNU's spaces after functions. I don't really mind most of the rest but I just don't get the benefits of 'funcname (arg)' vs. 'funcname(arg)'. Is there a specific reason for this? Personally, I find this to reduce readability because I have to think for a split second whether I'm looking at a variable or a function call.

Of cause this is also due to my habits, but I'm curious as to what the reasoning is.

Honestly I think it's just "spaces before open parens" and at least it's consistent. K&R, which I use, wants spaces before the parens in conditionals and loops but not in method sigs or method calls and the linter at work gets me almost every time I type the word "if".

Fair enough if the GNU dudes valued consistent spacing more than taking function calls as one "logical block". Not my cup of tea but that's what configurable auto formatting is for.

That's why Python has a superior syntax. There is usually one obvious way to do it, and that's the right way.

I want a language that takes this and has a specification for the editor to prettify it

while x==y
     func1
     func2

All of these are bearable except for Haskell style. Wtf is that😭

I might argue that rhe syntax of God's language is the one true syntax.

I am tired and unmotivated so I probably won't though.