Live data from Hacker News

Why I Prefer Functional Programming

morgenthum.dev

131–140 of 163 posts

Re: Why I Prefer Functional Programming

#131

Earlier quoted context omitted.

You almost never use `new` in modern C++, and you would never use it as you suggest because it wouldn't compile, you would simply say: MyType x; C++ is nothing at all like Java.

Sorry, you'd need to use the MyType* x to use the `new` keyword; it's been awhile. It doesn't really deter from my point though; in order to heap-allocate something you have to use a pointer, and you end up doing something not that dissimilar from Java . > C++ is nothing at all like Java. Is that supposed to be a joke? Java was marketed specifically towards C++ engineers...

Javascript was marketed towards Java programmers, and those languages are pretty different from each other too.

Re: Why I Prefer Functional Programming

#132
Functional programming is all nice until you need to debug someone else's code. (Maybe it just because i have done a lot more of it with imperative style, but I am pretty sure that's the case for the majority of programmers).

Re: Why I Prefer Functional Programming

#133

I think this most effectively demonstrates why I like a lot of OOP: it can be verbose. This is example function is relatively illegible: alignCenter :: [String] -> [String] alignCenter xs = map (\x -> replicate (div (n - length x) 2) ' ' ++ x) xs where n = maximum (map length xs) One of the most verbose languages I've used, Objective C, has made this a best practice. Despite the brackets (which scare people off), it…

This opinion is flameworthy and stereotypes heavily: what seems to happen in FP is that the overall community is substantially math-IQ smarter than the imperative languages. Alas, that ALSO means the overall community loses social-IQ in the process. This leads to: 1) higher barrier to entry for the general programmers, in language semantics, documentation, examples... 2) a tendency to overabstract, underdocument, and…

3) write code that is obvious to the person who wrote it (at least for a few months), but being CODE is tougher for people to unpack.

Exactly this.

Re: Why I Prefer Functional Programming

#134
post #54
post #34

Earlier quoted context omitted.

A list comprehension in python would be more comprehensible than either AND less verbose.

Arguably, list comprehension in Python is already functional programming :).

Once you start nesting them then they become a nightmare to read. So you might as well mix some imperative style intermediate variables.

Re: Why I Prefer Functional Programming

#135
post #17

I think this most effectively demonstrates why I like a lot of OOP: it can be verbose. This is example function is relatively illegible: alignCenter :: [String] -> [String] alignCenter xs = map (\x -> replicate (div (n - length x) 2) ' ' ++ x) xs where n = maximum (map length xs) One of the most verbose languages I've used, Objective C, has made this a best practice. Despite the brackets (which scare people off), it…

To me this looks like perl golfing, but for some reason perl golfing is bad but writing extremely terse functional programs is not. Personally I like to combine both approaches. In swift I would write something like this: let l = ["abc", "ab", "abcdef", "abcdefgh"] width = l.reduce(0, { max($0, $1.count) }) let centered = l.map({ (line: String) -> String in var padding = (width - line.count) / 2 return String(repeati…

> for some reason perl golfing is bad but writing extremely terse functional programs is not

Because the Haskell has types checking that you're not doing anything completely stupid.

Re: Why I Prefer Functional Programming

#136

I think this most effectively demonstrates why I like a lot of OOP: it can be verbose. This is example function is relatively illegible: alignCenter :: [String] -> [String] alignCenter xs = map (\x -> replicate (div (n - length x) 2) ' ' ++ x) xs where n = maximum (map length xs) One of the most verbose languages I've used, Objective C, has made this a best practice. Despite the brackets (which scare people off), it…

This opinion is flameworthy and stereotypes heavily: what seems to happen in FP is that the overall community is substantially math-IQ smarter than the imperative languages. Alas, that ALSO means the overall community loses social-IQ in the process. This leads to: 1) higher barrier to entry for the general programmers, in language semantics, documentation, examples... 2) a tendency to overabstract, underdocument, and…

> 3) write code that is obvious to the person who wrote it (at least for a few months), but being CODE is tougher for people to unpack.

One could have a decent debate about much of what you say. This is the only one where I utterly object. The Haskell code I write is far easier to come back to months later than the Python code I write.

Re: Why I Prefer Functional Programming

#137
> Obviously, composition over inheritance strives a bit against one of the original key concepts of OOP - which is inheritance.

I don't understand why people keep pushing this idea of OOP as requiring classes and inheritance, when it very much does not.

Also, it's really easy to say that FP is better than OOP, or the other way around, when people keep comparing their favourite with a straw-manned version of the other.

Re: Why I Prefer Functional Programming

#138
post #126

Earlier quoted context omitted.

This looks like the Java if the Java was written by someone who knows Java: List alignText(List texts) { int maxLength = texts.stream().mapToInt(String::length).max().orElse(0); return texts.stream().map(text -> { var spaceCount = (maxLength - text.length()) / 2; return " ".repeat(spaceCount) + text; }).collect(Collectors.toList()); }

/nit Move the lambda to private method and replace it with method reference and it’ll be just perfect

Good feedback. +1

Re: Why I Prefer Functional Programming

#139

I prefer functional programming because referentially transparent functions are easier to reason about and test. Brevity of control flow hasn't brought me much benefit.

Couldn't agree more! ... I just had to laugh to myself at how this, THIS is why functional programming is so... rarely adopted. Like, "referentially transparent functions"?! What happened to `website.run.now!`?!

website.run.now is referentially transparent in Haskell

(or rather, to mention the one I use, Happstack.Lite.serve: https://hackage.haskell.org/package/happstack-lite-7.3.6/doc...)

Re: Why I Prefer Functional Programming

#140
post #9

I started programming (like a lot of people) after I bought one of those "Learn C++ FAST!" books (I don't remember the actual title). A large chunk of this book was about the object-oriented part of C++, and comparing it to the equivalent version in C, and acted that since the only two paradigms that exist are OOP and imperative, you should always use OOP. (NOTE: I'm paraphrasing, that was the tl;dr as I remember it…

> I do really hate the type systems of Java and C++ because I think they're restrictive Can you give an example of how the C++ type system restricts you? Is it just lack of some inbuilt mechanisms/syntactic sugars or is there something that you can't actually model with it? > I think that forces strong and unnecessary coupling How do you model/maintain invariants of a set of data in FP? That's the part that I don't u…

> How do you model/maintain invariants of a set of data in FP? That's the part that I don't understand yet.

If you tell me how you do it in not-FP then I'll tell you how to do it in FP!

Post reply on HN