I really like #kotlin's (and others') approach to nullability, where nothing is nullable by default and you mark something as nullable by adding '?' to the type. And the '?.' syntax is nice too. 'foo: Foo? = ...; foo?.doThing()' is nicer than 'foo: Optional<Foo> = ...; foo.map(|it| it.doThing())', and both are miles better than "everything is always implicitly nullable unless annotated with '@NotNull' #plt
#PHPStan and #PsalmPHP are lightyears better than #KTLint for #Kotlin, at least in the quality of their output. It actually reports something useful, unlike KTLint.
Dear flipping god, how do people work with tools this bad?
@Crell@maxalmonte14 I agree. And I think several languages has shown that the last few years. From the ones I am familiar with, Scala was a surprisingly successful FP/OOP hybrid experiment. Then Kotlin took "the best parts to the masses". But even Java and C# has moved a lot towards FP. And JavaScript is flexible and weird enough to fit both camps.
@henrikjernevad@maxalmonte14 Most of the guidelines for "good" OOP are borrowed straight from FP, with or without some twisting. Honestly a structurally typed language (Go or Rust) could, with the proper features, easily straddle both sides perfectly.
Hab ein bisschen weiter an der Kugelbahn gebastelt und etwas Schnickschnack eingebaut. Es gibt Schalter, die beim Überrollen Barrieren öffnen und einige Bahnelemente sind jetzt festgeschraubt, so dass sie sich nicht mehr verschieben lassen.
Ich überlege mir jetzt noch etwas mehr Schnickschnack 😀
Leider ruckelt es etwas im Android Emulator, aber auf dem Handy selber läuft alles total flüssig.
I can't deal with languages with optional semicolons! I like languages without semicolons, but when they're optional, especially if they feel "C-like", I always end up adding semicolons to some lines even when I try to write in a semicolon-less style. I'm writing some #kotlin now and I decided to just use semicolons consistently because the alternative is seemingly to use them inconsistently.
Strangely, this isn't an issue I have in #golang. I do have it in #rust however.
@ekuber That's correct, and I would've added a caveat if I wasn't limited to 512 characters, but here we are
For a whole lot of blocks in rust (such as if statements and loops not used as expressions), it doesn't make a difference whether the block technically evaluates to something, so the last semicolon there is in practice optional, so I sometimes forget it
@adam_turcsan Apparently, it's common (at least in some circles) to have to define database entities as classes... and then also manually write SQL to create the corresponding table/types.
Meanwhile, Doctrine has had auto-migration generation for 15 years?
Apparently there's an IDE plugin to generate migration scripts. Testing it now.
@Crell In my head, Hibernate is the tool that Doctrine got to be in php, so I don't think that it's not a solvable thing... although I personally have no experience with that. However Composer >> most of the package managers :D
I'm very happy that I figured out how to place the icons in columns (responsive) and the names under the thumbnails. I find aligning things in Swing even harder than in CSS.
In case you want to try an alternative JSON (de)serialization library for #Kotlin, Kondor https://github.com/uberto/kondor-json by @ramtop is great. No annotation magic, just functions explicitly defining the mapping. No external dependencies. As fast as Jackson.