- cross-posted to:
- programmerhumor@lemmy.ml
- cross-posted to:
- programmerhumor@lemmy.ml
cross-posted from: https://lemmy.ml/post/39334581
funcitonIdk why but that’s how I type it half the time.
Not sure I’d call what bash has functions. They’re closer to subroutines in Basic than functions in other languages, as in you can’t return a value from them (they can only return their exit code, and you can capture their stdout and stderr). But even then, they are full subshells. It’s one of the reasons I don’t really like Bash, you’re forced into globally or at least broadly-scoped variables. Oh, and I have no clue right now how to find where in your pipe you got a non-null exit code.
It’s not a big problem for simple scripting, but it makes things cumbersome once you try to do more.
Functions are definitely not subshells in Bash, seeing as anything modifying the environment, like
pyenvand such, is implemented as functions instead of scripts — specifically because functions are run in the same shell instance.Unless ‘subshell’ means something in the vein of ‘like a new shell, but not really’.
I really like bash when dealing with even somewhat advanced scripting. Like the 300 LOC scraper I have written over the past two days which horribly parses HTML files using grep | sed.
It’s genuinely so much more fun to do this with Bash than, say, Python. I have once written a scraper using Beautifulsoup and I have no desire to do so ever again.
Honestly, only Haskell manages to beat Bash in how satisfying it feels when you manage to get something working well.
Anyone tried lisp? Looks something like this. ((()))()())))
Remarkable how if the parenthesis is shifted from
lambda()to(lambda), people lose the ability to comprehend things.
() => {}
Related: Every
Fnkey on a keyboard is a missed opportunity! That’s not fun at all!
okay, now i gotta figure out how to start a keyboard rave when i press fn
That’s a cool looking keyboard!
Kotlin seams fun
It is. Also *seems
A pointer?
To a dictionary
def ():is pretty niceEdit: also as someone doing a bunch of CI work right now, Bash can GTFO (unless the alternative is whatever Windows is doing)
Nushell is pretty nice. It’s the good parts of “what Microsoft is doing”, i.e. real structured data in a shell-like language and real error handling.
also better to type with one hand
You QWERTY people…
/jk
Colemak is great though
function: ... goto function;Or perhaps
call functionif you’ve got a call stack going.Nevermind that is C or something right? Otherwise it would be
jmp function?Yeah that’s C.
I added the
gototo put emphasis on the function being a label instead of a real function.
Meanwhile Haskell:
=
\x -> …
The examples on the meme don’t bind any variables. If those are lambdas, the Haskell version is just the
part.
C++ has
[]{}.(You can also add more brackets if you wish to do nothing longer:
[]<>[[]]()[[]]{}())What, are we code golfing?
Sure. Use :() :;: to score every hole-in-one all at once.
Kotlin also lets you do
fun x() = y()I have no idea why you’d need that especially since return y() is pretty easy, but… I want it!
(Actually, I guess a super simple way of overloading a method, like fun x() = x(defaultValue) could be neat)
This can also be a side product for code blocks being expressions instead of statements.
In rust for example they are, so it’s not rare to see functions like:
fn add_one(x: i32) -> i32 { x+1 }This lets you do amazing things like:
let x = if y < 0.0 { 0.0 } else { y }which is the same as
x = y < 0.0 ? 0.0 : yBut is much better for more complex logic. So you can forget about chaining 3-4 ternary operations in a single line.
Lisp programmers seeing these ‘amazing things’:

But yeah, every time I’m trying to do a ternary in Lua, I miss being able to just throw in an
if.
default values is one of my pet-peeves after using Python regularly. I wish more languages would let you just do something like
def do_thing(arg=default_value)without hoops like builder pattern, function overloading, or whatnot(Kotlin does support that, with the same
fun do_thing(arg: Int = 2)syntax.)I mean, the go-to approach in Lisp, for example, is to have null as the default value (which doubles for false in there). And check for that in the function.
That sounds awfully similar to JavaScript, which uses undefined as default values.
In Lisp, at least the Emacs Lisp with which I have experience, it’s customary to put in
nil(Lisp’s null) for any omitted arguments in the middle that you can’t be arsed to specify — aside from just leaving off arguments at the end. In JS, typing inundefinedin every such case would probably be an annoyance, so I’m guessing coders need to check for bothundefinedandnullin these circumstances.Overall, it’s remarkable how Lisp teaches one to be much more relaxed about programming practices than is typical for mainstream languages. Design patterns? Data structures? Shit, just pass in a list or an assoc array, and maybe a function here and there. Also everything is an expression, enjoy your ternary
(if)at any point anywhere.
()=>{}Javascript straddling the middle as usual.
The equivalent in JavaScript / TypeScript would actually be
function () {}, this is the syntax for named functions.C# is the same as bash though.
It’s object-oriented; you can assign this to a named variable.
In that case the full thing would be
const fun = () => {}Yeah for whatever reason, FE devs want to make everything a const. It’s like a religious belief or something, it’s really kinda weird.
const fun = () => { const something = “whatever” const array = []; array.push(someting)
for (const thing of array) { if (thing === ‘whatever’) blah(thing) } }
Semicolons? Optional. Which quotes you should use? Whatever you feel like! But you must declare things as a const wherever possible! Even if it’s an array that you’re going to be changing, declare it as a const because you should know that you can push things into a const array, and since it’s possible to declare it as a const, you must declare it as a const.
Why is this? Nobody knows, but it’s important to FE devs that you use const.
The reason is very simple, performance. If a value doesn’t need to be changed, don’t declare it as mutable. This isn’t just a front-end thing btw.
Pushing something onto an array isn’t changing the array? It’s not changing the reference to the array, but from a style standpoint it doesn’t make sense.
And if you’re declaring a const within the scope of a function, it’s still allocating memory when it enters the scope and disposing it when it leaves the scope, same as a variable. There’s no performance benefit to do this.
Something like const CONSTANT_VALUE = “This never changes” has a performance benefit and is actually how other languages use constants. The value will always be the same, the compiler understands this and can optimize accordingly. If you’re declaring an iterator or the result of calling a webservice to be const it’ll be a different value every time it runs that code, so it’s not something a compiler can optimize. In style terms, it’s a value that’s different every time you get to that line of code, so why would you want to call it constant?
You’re comment indicates the FE dev obsession with always using const stems from a misunderstanding of how computers work. But of course many religious beliefs originate from a misunderstanding of the world. Whatever man, I just make it a const to make the linter happy, because it’s dumb FE bullshit LOL.
C++ [](){} looks nice.








