this post was submitted on 27 Dec 2023
77 points (97.5% liked)

Programming

17028 readers
208 users here now

Welcome to the main community in programming.dev! Feel free to post anything relating to programming here!

Cross posting is strongly encouraged in the instance. If you feel your post or another person's post makes sense in another community cross post into it.

Hope you enjoy the instance!

Rules

Rules

  • Follow the programming.dev instance rules
  • Keep content related to programming in some way
  • If you're posting long videos try to add in some form of tldr for those who don't want to watch videos

Wormhole

Follow the wormhole through a path of communities !webdev@programming.dev



founded 1 year ago
MODERATORS
all 42 comments
sorted by: hot top controversial new old
[–] v0rld@lemmy.world 44 points 8 months ago (3 children)

Since you specifically mentioned C# : https://learn.microsoft.com/en-us/dotnet/csharp/fundamentals/coding-style/coding-conventions

I'd be surprised if there is a serious language that doesn't come with at least some semi-official style guide. But usually they are not universally followed and everybody just does their own thing.

[–] atheken@programming.dev 11 points 8 months ago (1 children)

Just to add, I’d argue dotnet has one of the best sets of guidance on style. It goes beyond just naming and towards how to structure code for easier consumption and consistency. People love to dump on MSFT, but the dotnet platform is superb.

https://learn.microsoft.com/en-us/dotnet/standard/design-guidelines/

[–] starman@programming.dev 6 points 8 months ago* (last edited 8 months ago) (4 children)

I'd be surprised if there is a serious language that doesn't come with at least some semi-official style guide.

Does JavaScript have one?

Edit: Except google's style guide

[–] lemann@lemmy.dbzer0.com 9 points 8 months ago (2 children)

Edit: Except google's style guide

This legit made me laugh lol, Google's style guides for their longer standing languages are always dismissed, especially their one for C++

[–] christophski@feddit.uk 6 points 8 months ago

Not sure if they still do it, but Google's python code is some of the ugliest python I've seen and uses 2-space indentation.

[–] hascat@programming.dev 3 points 8 months ago (1 children)

What is wrong with Google's C++ guide?

[–] lemann@lemmy.dbzer0.com 5 points 8 months ago

To summarize the explanations i've come across: It's tailored to Google's internal teams maintaining tons of legacy C++ code, doesn't cover exception handling, and generally has outdated advice best suited for the code they developed in that time period. While their style guide is ideal for maintaining consistency with Google's existing codebase, someone working on a modern C++ project should consider using the language's more modern features and STL components

Something I'd want to note though, someone developing in C++ for an embedded platform or even working on hardware drivers would probably have very lean and mean code which doesn't conform to a particular style guide, especially ones advising against use of "unsafe" operations.

[–] Ephera@lemmy.ml 6 points 8 months ago

Google's, Mozilla's and Apple's style guides are pretty much as official as you're gonna get here.

The 'prettier' formatter is also rather popular and as such its stylistic choices, although that is of course moreso a hammer than a guide.

[–] v0rld@lemmy.world 4 points 8 months ago

Is JavaScript a serious language? /s

Joking aside: One of Brendan Eich's books probably contains something resembling a style guide.

[–] sloppy_diffuser@sh.itjust.works 3 points 8 months ago* (last edited 8 months ago)

Eslint rules and prettier. I use the AirBnB ruleset as a base close to my personal preferences and then customize to my liking.

I don't really have to do any manual formatting. I just save to apply the formatting.

edit: javascript

[–] joyjoy@lemm.ee 2 points 8 months ago

Java walks in, whose stdlib uses different styles in the same file.

[–] Nachorella@lemmy.sdf.org 21 points 8 months ago (1 children)

Rust has a style guide and comes with a linter. But I don't think you need to follow it if you don't want.

[–] beefsack@lemmy.world 15 points 8 months ago (1 children)

Rust, like the majority of modern languages, has an official formatter which everyone should be using. Formatters are good enough nowadays that everyone should be using them.

[–] SalsaGal@programming.dev 1 points 8 months ago

What other languages have formatter programs?

[–] aaaa@lemmy.world 16 points 8 months ago (1 children)

I'm fond of Go, which comes with its own auto formatter. It eliminates all arguments over style and format.

[–] TootSweet@lemmy.world 5 points 8 months ago (1 children)

Beat me to it. There's plenty to rave about in Go, and that's definitely one of my favorite things.

Also, it's refreshing to actually use tab characters and not two spaces or four spaces or whatever.

[–] xmunk@sh.itjust.works 7 points 8 months ago (1 children)

I absolutely loathe soft tabs. Hard tabs 4lyfe.

[–] camr_on@lemmy.world 4 points 8 months ago

I will never forgive this offense

[–] ISometimesAdmin@the.coolest.zone 14 points 8 months ago (1 children)

go fmt has been a thing for almost 11 years

[–] DrDeadCrash@programming.dev 11 points 8 months ago (1 children)

If you're using visual studio (2022 is current) the idiomatic styling will be mostly correct by default (Ctrl k,e will reformat).

[–] brian@programming.dev 2 points 8 months ago* (last edited 8 months ago) (1 children)

I've found it to be less strict than I'd prefer. Things like whether parameters are aligned or indented, whether or not the first one is on its own line, what statements are indented in fluent calls that have blocks, etc.

A lot of other formatters (prettier, anything for python, etc) force something consistent in those cases, whereas it seems like the dotnet formatter prefers to leave things as they were.

I'd love for it to be more opinionated and heavy handed if anyone has suggestions

[–] DrDeadCrash@programming.dev 1 points 8 months ago

I've never looked into it very deeply, but it uses a styling spec called EditorConfig. Check it out, https://editorconfig.org/

[–] eluvatar@programming.dev 10 points 8 months ago

There's dotnet format which will format your code. You can configure it with editorconfig

[–] kogasa@programming.dev 8 points 8 months ago

For practical advice, I recommend starting a project with dotnet new editorconfig which covers many of the .NET coding conventions. If you want more strict standards you can use StyleCop, but you will need to configure it a bit to be consistent with the .NET conventions.

[–] dipshit@lemmy.world 6 points 8 months ago (1 children)

lots of languages have linters to enforce style. Examples are jslint/eslint phplint, etc..

[–] joyjoy@lemm.ee 1 points 8 months ago (1 children)
[–] dipshit@lemmy.world -1 points 8 months ago

ESLint will hurt your feelings.

Anyway, I didn’t setup the tooling, and it can be configured to enforce code styles, as it does with each commit. It also enforces rules, but can enforce code style as well.

[–] lysdexic@programming.dev 6 points 8 months ago

There are a few coding conventions and style guides for C#:

[–] navigatron@beehaw.org 4 points 8 months ago

JavaScript / TypeScript are famously free-form, but a number of styles (and style-enforcing tools) have emerged.

“Prettier” is the most recent. It actually parses your code into an AST and then re-prints it according to its style.

“ESLint” is the most widespread; it is more of a framework into which rules can be plugged.

I use “XO”, which is essentially a custom eslint ruleset with a few other nice things tacked on.

The best part of eslint/xo is the “—fix” command, which can auto-fix most mistakes.

[–] NuXCOM_90Percent@lemmy.zip 3 points 8 months ago (1 children)

Most languages with "official" formatting guidelines are due to limitations of the compiler/interpreter. Mixing whitespace in Python (or older Fortran) is a great way to error out massively.

For the more modern compiled languages, there is no need. But there still tend to be popular formats from companies like Google

[–] kogasa@programming.dev 1 points 8 months ago (1 children)

You say this, but C# does have official code style conventions. It's not about the compiler at all but about ensuring a relatively homogeneous coding style across the ecosystem, so a .NET dev can work on different projects without needing to refamiliarize.

[–] NuXCOM_90Percent@lemmy.zip 2 points 8 months ago (1 children)

If indentation and newline policies prevent developers from migrating from one project to another then either your developer suck or your language does.

That said, C# is somewhat special in that it is both a language and a corporate flag by Microsoft. Similar to how Google pushes to have their style guides made public so that other projects will adopt them. Which has less to do about making it so that one developer can bounce between projects (because they should be able to anyway) but to instead push Google as the goal everyone aspires to and emulates.

[–] kogasa@programming.dev 1 points 8 months ago (1 children)

There's a lot more than indentation and newline policies. The default editorconfig is a few hundred lines. But there's also no reason not to standardize indentation and newline policies.

[–] NuXCOM_90Percent@lemmy.zip 1 points 8 months ago (1 children)

Standardizing within a project or even a company is important.

Standardizing across an industry or language is not

[–] kogasa@programming.dev 1 points 8 months ago

Feel free to point out a disadvantage. As a .NET dev I appreciate the semblance of consistency. Different codebases differ enough already, it's just easier on the eyes when everyone is using the same basic conventions.

[–] TehPers@beehaw.org 2 points 8 months ago

Someone else already mentioned Rust, but to add to it, rustup installs rustfmt (opinionated formatter) and clippy (linter) by default, but you can choose not to run them or even install them. rustfmt has a few configuration options, but is for the most part strict in how it formats code.

PEP8 is nice since it sets some common rules across Python projects, but I'm not a fan of some of the decisions they made. The biggest one for me was discouraging defining variables/attributes/etc that use the same name as built-ins. That means no variable named input, no attr on your data model named id, etc. Still, since the language doesn't strictly enforce this, you can easily adjust these rules to meet your project's needs.

I believe go requires you to run the bundled formatter to even compile the code, but I could be misremembering.

[–] IonicFrog@lemmy.sdf.org 2 points 8 months ago
[–] burliman@lemmy.today 1 points 8 months ago

C# has the Microsoft coding standards that are most accepted. PHP has the PSR standards. JavaScript has pretty much nothing and is the Wild West.

Those are the only ones I know about.

[–] Ephera@lemmy.ml 1 points 8 months ago

In my experience, they're rarely as strictly enforced as e.g. flake8 does it for Python, but yeah, there is usually some resource suggesting a code style. If all else fails, you can look at some of the code the language authors have written. They'll usually have developed a rather consistent style...