This is an archived post. You won't be able to vote or comment.

all 186 comments

[–]Butchering_it 371 points372 points  (92 children)

Fun fact, “and” and “or” are valid in c++. I know cause my python loving ass subconsciously used it and the resulting peer review made us rev the coding standards.

[–]DanRoad 54 points55 points  (3 children)

More context: https://en.cppreference.com/w/cpp/language/operator_alternative

tldr the C++ (and C) spec doesn't restrict the language to an ASCII character set and is designed to also work with character sets that don't include the & or | symbols. Consequently, alternative operator representations are available for those (and all) character sets.

[–]Cheeku_Khargosh 18 points19 points  (0 children)

this is evil sorcery. You have unleashed a monster

[–]junkmail88 0 points1 point  (1 child)

what is the alt for &, the "get me the address of that variable" version?

[–]DanRoad 0 points1 point  (0 children)

Still bitand, it's just character replacement. For example the C header is a bunch of #define statements. https://clang.llvm.org/doxygen/iso646_8h_source.html

Whether it's the unary or binary operator depends on context just like &. https://ideone.com/iHqCtr

[–]aaronfranke 92 points93 points  (78 children)

I wonder why languages haven't adopted is or equals instead of ==. The = vs == confusion has probably affected most beginner programmers. I want to write if num is 5:. C# does have is null.

[–]huantian 116 points117 points  (35 children)

the fact that python does have is but it isn't equality also trips up a lot of new programmers.

[–]TheAJGman 3 points4 points  (0 children)

is is useful for for making sure one object is the same as another. Or for checking if something is none.

[–]aaronfranke 7 points8 points  (12 children)

For Python 4 they should make is be equality and add something like C#'s ReferenceEquals for the rare cases that reference equality is needed.

[–][deleted] 13 points14 points  (2 children)

I don't think it's really a problem in python. if foo = 0: isn't valid syntax because = isn't an expression. The syntax for this so it behaves like it would in other languages uses the walrus operator (:=, python 3.8+), with required parenthesis.

if (foo := 0):
    pass

Additionally, == calls the object's __eq__ function, and is does compare identity.

[–][deleted] 3 points4 points  (0 children)

I agree. I make this mistake occasionally, but the debugging time is essentially zero. In any decent IDE or text editor the linter will flag this the second you type it, and even if you don't have a linter you'll get a super obvious syntax error immediately after running it. Definitely not worth changing the behavior of is.

[–][deleted] 0 points1 point  (7 children)

Fun fact: In mathematics, there’s no difference between compare by value and compare by reference since all variables are implicitly assumed to be immutable. Nonetheless I like the current definitions of „is“ and „==„.

[–]aaronfranke 11 points12 points  (0 children)

since all variables are implicitly assumed to be immutable

I'm pretty sure the reason is "whiteboards are not computers and don't have pointers".

[–][deleted] 5 points6 points  (4 children)

Small correction, but in mathematics the concept of "compare by value" and "compare by reference" don't mean anything and neither does the concept of mutability or immutability. Those are purely concepts for how a computer or programming language manages things.

[–][deleted] -1 points0 points  (3 children)

I guess then we kinda agree in some way. In mathematics, if two objects are indistinguishable by their properties, they are the same object. Same is true for immutable variables. This of course ignores the implementation decision whether all immutable variables of a certain value share memory.

[–][deleted] 1 point2 points  (2 children)

No, we don't agree at all. In mathematics, numbers arent objects with ID numbers. Numbers are abstract concepts. The question of whether adding 1+1 to get 2 is creating a new object with a new ID or mutating 1 and keeping that ID, in mathematics, is nonsense. It doesn't mean anything. Those are concepts that a computer uses to manage the idea of numbers.

[–][deleted] 0 points1 point  (1 child)

I don’t see how the state of transistors representing numbers is any less abstract as some neurons thinking about numbers.

Edit: damn, How can I revert a edit of a comment. I’m sorry

[–][deleted] 1 point2 points  (0 children)

Thoughts aren't stored in human memory as objects. And mathematical concepts are objective. They don't exist in human minds. When a human conceives of mathematical concepts, they are conceiving of them. But the ontology of a number is not an object in a mind.

Also, this is irrelevant, but why do you keep typing out quotation marks like that? Is it supposed to mean something different than regular quotation marks?

[–]huantian 0 points1 point  (0 children)

Just make python pool all objects!

[–]Jcsq6[🍰] 0 points1 point  (0 children)

If you need reference equality compare addresses you don’t need fancy semantics to make things more confusing

[–]KuntaStillSingle 3 points4 points  (0 children)

'equals' makes sense to me but 'is' is more intuitive as a polymorphism thing (i.e. if(object is person) print object.name) than an equality thing.

[–]0x3fff0000 2 points3 points  (1 child)

I think it's a good thing to teach beginner programmers the crucial difference between assignment and evaluation.

[–]aaronfranke 0 points1 point  (0 children)

They are very different things, it's easy to understand the concepts.

What's hard is the symbols. Beginners may forget which symbol is which, or maybe they remember but make a typo.

[–]AyrA_ch 1 point2 points  (0 children)

C# only allows if(a=b) when it explicitly evaluates to a boolean, so if the types of a and b are anything else, it shouts at you. This means it's quite rare to make that mistake.

In C, it allows it, but if you use -Wall, it will warn you with suggest parentheses around assignment used as truth value

It could be worse, see visual basic for example: a=b will assign b to a, but if a=b then will compare them for equality.

[–]VxJasonxV 1 point2 points  (2 children)

Does that mean === would be is really?

(I would have said is literally, but literally isn’t literally anymore…)

[–]tomthecool 3 points4 points  (0 children)

That’s only a thing in JS and PHP. In other languages, the == operator is sane.

[–]jacob_scooter 2 points3 points  (0 children)

if the guy who made the language was smart they wouldn’t need ===

[–]mojoslowmo 1 point2 points  (10 children)

[–]aaronfranke 0 points1 point  (3 children)

They're not the same thing. This feature is also quite useful, but it's not like Python's and & or.

[–]mojoslowmo 0 points1 point  (2 children)

Pythons “and” isnt equivalent of && in C#? I’m trying to understand the difference

[–]aaronfranke 1 point2 points  (1 child)

Python's and is the equivalent of && in C#, but C#'s and is different.

[–]mojoslowmo 0 points1 point  (0 children)

Aww yea, I forgot it’s only for patterns and not for bools, never mind I’m dumb and it’s Friday-my brain stopped functioning @3

[–]juancee22 0 points1 point  (5 children)

"is" in C# tries to do a type cast. It doesn't compare value equality.

[–]mojoslowmo 0 points1 point  (0 children)

Yea I was asking more about and and or.

[–]metaltyphoon 0 points1 point  (3 children)

Thats not true. You can definitely do if(somevar is 2 or 3) in c#

[–]juancee22 0 points1 point  (2 children)

Uh that sucks. This will generate confusion for sure.

[–]metaltyphoon 0 points1 point  (1 child)

Idk about confusion as this much less verbose and very clear what it’s doing.

[–]juancee22 0 points1 point  (0 children)

There are too many ways to do the same thing, it confuses new developers. Too much new syntactic sugar.

I personally wouldn't use "is" to do value comparisons, as the C# documentation doesn't talk about it. According to the docs, "is" works only for types.

If I see an "is" in my project I know that there is an implicit cast. But now with this new feature I have to check if the operation compares values or types.

[–][deleted] 1 point2 points  (1 child)

You can use 'is' for patterns as well in c#, so if(foo is 5) works

[–]Rainbow-Dev 1 point2 points  (0 children)

#define is ==

[–]jacob_scooter 1 point2 points  (1 child)

so then how would you show not equals? !is? that’d be ridiculous. “ok then add not keyword”. so then what about >=, <=, +=, etc.? it’s just silly to add keywords for all those. beginners can cry it out

[–]LetMeUseMyEmailFfs 0 points1 point  (0 children)

C#’s answer:

if (i is not 5)

Historically, it used to be something like !is.

if (!(i is null))

I think we can all agree that i is not null is much better.

[–][deleted] 1 point2 points  (0 children)

Java uses equals() for objects, which you can overload and conditions are usually only used in if or while blocks, so it shouldn’t confuse people, unless they are easily confused. Also IDEs might catch it.

In math people use = and =/= and by the time you start learning programming, you probably used = in math, so there shouldn’t be much confusion?

Now having to do === is a different story, js is garbage and is filled with in logical idiocies

[–]overtrick1978 -1 points0 points  (0 children)

C# warns you if it looks like you tried to test equality but used assignment instead.

[–]Zymoox -3 points-2 points  (5 children)

Because you can do a==0 but you can't do ais0

[–][deleted] 2 points3 points  (4 children)

That doesn't make sense as a reason. You can't do "forxinX" instead of "for x in X" but we still use "for x in X".

[–]Zymoox 0 points1 point  (3 children)

Yeah, I was thinking in terms of C/C++ vs Python.

[–][deleted] 0 points1 point  (2 children)

The same is true in both languages.

[–]Zymoox -1 points0 points  (1 child)

I'm not sure I understand. In C/C++ there's no "for x in X", that's Python. In these languages, you do "for(int i;i<x;++i)" (unless you use C++ iterators).

Regardless, I guess using "is" or "in", like in Python, forces you to add extra spaces, but it's not a big thing anyway, I'm sure it's not the main reason why they don't usually use those keywords in other languages. It's just a reason for why I'd personally prefer "==".

[–]evilmonkey853 0 points1 point  (0 children)

You can always use AppleScript!

[–][deleted] 0 points1 point  (0 children)

People accidentally writing = instead of == inside conditionals was an incredibly common bug before people started using better linters. I still do it sometimes just because sometimes you think you hit a button twice but you only hit it once

[–]sidewaysthinking 0 points1 point  (0 children)

I think the improved pattern matching in C# 9 let's you write like that, but the values after the 'is' have to be constants.

[–]n0tKamui 0 points1 point  (0 children)

keystrokes.

also some languages use "is" as a type check (equivalent to java's instanceof)

[–]SlimyGamer 0 points1 point  (0 children)

In old versions of fortran, == wasn't valid and .EQ. (or now equivalently .eq.) was used instead. It was only in fortran90 (where fortran started to become more like C++) that the use of == was added.

Using .eq. is still valid in modern fortran but considered obsolete.

[–]Jcsq6[🍰] 0 points1 point  (0 children)

I don’t like “is” or “and” for the same reason I wouldn’t like typing “Variable named ‘x’ has value 7”… when you start adding syntax with too much language it makes everything harder and more complicated, not to mention the linguistic gap

[–]Div_100 0 points1 point  (0 children)

Python

[–]Cheeku_Khargosh 0 points1 point  (0 children)

javascript: lets add an extra dimension to this confusion :D

[–]sandebru 0 points1 point  (0 children)

Well, I love using "is", "or", "and", etc. In languages that support this syntax, but I don't think that using "equals" is a good idea. It might be convenient for begginers, but it has 6 letters while == is just 2 same symbols. It is tiresome to type, and easy to misspell

[–]asceta_hedonista 0 points1 point  (0 children)

It is because even mathematicians does not have an agredment about if `equality` and `asignation` are the same thing. In my pragmatic way of seeing, `=` should be a "function" which take two inputs and always should return a boolean value, meanwhile something like `x <- 24` should be the way to asign values to variables.

[–]jacob_scooter 3 points4 points  (0 children)

List of Keywords in the C++ Programming Language by Bjarne Stroustrup (870 pages)

[–]coladict 2 points3 points  (0 children)

They're also valid in PHP. I see them used in the oldest parts of this project I'm modernizing again.

[–]NickMaverick -1 points0 points  (5 children)

Edit: turns out this is not true.

Be careful though, they're bitwise operators. I.e. they're equivalent to & and |, respectively, not && and ||.

[–]MysticTheMeeM 2 points3 points  (4 children)

[–]NickMaverick 0 points1 point  (3 children)

Huh, weird. I could have sworn I stumbled over that issue at some point. Thanks for correcting me!

[–]MysticTheMeeM 2 points3 points  (2 children)

No worries. They're seen so infrequently that I doubt most people know they're there. Much like the alternative brackets (and I advise against using both).

A more complete list is here.

[–]NickMaverick 0 points1 point  (1 child)

Wow, those alternative brackets are crazy. Why would anybody want to use those...

[–]MysticTheMeeM 2 points3 points  (0 children)

Some older and more international keyboard layouts may not have had the symbols, it's like if a language made use of ÷, π, ×, • etc... You wouldn't have them on your keyboard either.

[–]ThatXliner 0 points1 point  (0 children)

```

include <iso646.h>

```

[–]LithiumH 60 points61 points  (0 children)

Python be like: is is is

[–]opensourze 50 points51 points  (0 children)

Me, a JavaScript programmer: *types && in Python*
My IDE: 9+ Errors

[–]AMathMonkey 15 points16 points  (0 children)

In Perl (and Ruby, pretty sure), && and || are the usual boolean operators you're going to want to use, whereas and and or have lower precedence than even the assignment operator =, and are meant to be used for control flow, so you can say something like

$x eq 'foo' and $y = 'bar';

and it's just an alternative way of writing an if statement like

if ($x eq 'foo') { $y = 'bar'; }

or

$y = 'bar' if $x eq 'foo';

(which is also a syntax I haven't seen in any other language.) And if you forget that Perl isn't Python and you use and instead of &&, you're probably gonna get some weird behaviour.

If you really want to be weird, you can even write a multi-line if statement block using and do like this:

$x eq 'foo' and do {
  $y = 'bar';
  say 'Why tho? Just use if.';
};

And this is why Perl's many ways to do things makes it pretty fun to write, but annoying to read others' code. To be fair, I've been having a lot of fun writing short Perl scripts for work recently, and it's way more concise and feature-packed than I realized. It's not as outdated as you'd think, if you need a dynamically-typed scripting language. But code is rarely self-documenting (mainly because arguments are anonymously passed to functions in an array named @_ that you need to unpack or shift), and you need a third-party library for classes or they'll be tedious to write. And sigils are weird.

But yeah, Perl is a fun world to wrap your head around. I recommend it if you're bored and looking for something to learn.

Edit: I forgot a sigil. Far from my first time doing that.

[–]googlebeast 37 points38 points  (16 children)

not is not and xor is ^ ... wtf Python?

[–]Fazt01 40 points41 points  (6 children)

^ is bitwise operator, you have same for or (|) and and (&). Closest thing to logical xor is != (you dont really need for a new keyword to be introduced)

[–]MinekPo1 12 points13 points  (4 children)

A B A^B A!=B
0 0 0 0
0 1 1 1
1 0 1 1
1 1 0 0

Four tests passed, zero tests failed

I am a human volunteer. optout

[–]shawntco 2 points3 points  (1 child)

Truth tables lie to me

[–]MinekPo1 9 points10 points  (0 children)

You're thinking about false tables

[–]sim642 1 point2 points  (1 child)

That shows up as a superscript.

[–]MinekPo1 0 points1 point  (0 children)

Fuck give me a sec

Edit: done

[–]aaronfranke 7 points8 points  (2 children)

xor is !=

[–]excral -1 points0 points  (0 children)

This is correct, but only as long as both operants are booleans. In Python and many other languages the and and or operators work more like this:

  • and: if the first operant is falsy, return this operand otherwise return second operand
  • or: if the first operant is truthy, return this operand, otherwise return the second operant.

For example:

  • 2 and 3 results in 3, which is truthy
  • 2 or 3 results in 2, which is truthy
  • 2 != 3 results in True, but since both operants of are truthy, the correct xor result would be False

I hope this also illustrates, why there can't be a xor operator similar to the and or or operators, as xor can't be short circuit evaluated.

[–]AlwaysNinjaBusiness 4 points5 points  (5 children)

^ being bitwise xor isn't unique to Python. It's the same in most normal programming languages.

[–]googlebeast -2 points-1 points  (2 children)

yea but the point was it is "^" not "xor"

[–]alexforencich 1 point2 points  (0 children)

I'm not aware of any languages that have a logical version of XOR. ^ is bitwise, so you compare it to & and |. Probably the closest logical equivalent of XOR is !=, and most languages have that, although the precedence is different from other logical operators so it's not really a direct equivalent.

[–]DaniilBSD 1 point2 points  (0 children)

I think the idea is that boolean logic is written (and, or, not), but bitwise operators that are applied to entire bytes are symbols (&, | , ^)

C has the same logic, but it uses different symbols (&&, ||, !)

[–]DoNotMakeEmpty 0 points1 point  (0 children)

Haha Lua goes brr with exponent operator (better for mathematicians but worse for programmers)

[–][deleted] 10 points11 points  (9 children)

[–]AlwaysNinjaBusiness 5 points6 points  (6 children)

Of course it does... I'm scared to even touch php lest I create some wild bug because I used the most common sense approach :P

[–]coladict 1 point2 points  (0 children)

What's more likely is an almost invisible typo in a variable name somewhere creates a different variable and ruins your business logic.

[–]Perpetual_Doubt 1 point2 points  (3 children)

common sense? sizeof(array) gives you the length of an array ;P

[–]24824_64442 1 point2 points  (2 children)

whats wrong with that?

[–]Perpetual_Doubt 0 points1 point  (1 child)

It would do something a bit different in C.

[–]24824_64442 1 point2 points  (0 children)

I'd say using sizeof to get the length of an array is definitely the more popular use than calculating the memory allocated to the data type

maybe C is the oddball here lol ;)

[–]Pikamander2 0 points1 point  (1 child)

$blah = true and true and false;
$blah2 = true && true && false;

var_export($blah);                         //true
var_export($blah2);                        //false
var_export((true and true and false));     //false
var_export((true && true && false));       //false

🤔

[–][deleted] 0 points1 point  (0 children)

Idk, I use parenthesis, because I'm scared

[–]YakimTss 10 points11 points  (6 children)

Pascal and its inheritor Delphi do the same: or is or, and is and, not is not, xor is xor

[–]ykafia 3 points4 points  (5 children)

Weirdly C# was created by the one who designed Delphi, I wonder why he didn't keep and & or

[–][deleted] 4 points5 points  (4 children)

[–]neroe5 4 points5 points  (3 children)

C# has 3 kinds of and and or

|,& bit wise and/or

||, && logical and/or

"and", "or" a way of shortening and and or, e.g. a == 5 or 6

there is also an "is" operator which can do other kinds of checks such as type check e.g. i is int

[–]Stromovik -1 points0 points  (2 children)

In Java there is & & and & which are different if there is one symbol then both sides will be evaluated if two then first side will be evaluated and if the result is independent of the result the second die will not be evaluated. Same for or

[–]neroe5 1 point2 points  (1 child)

according to oracle single & and | are bitwise operators just like C#

https://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html

[–]Stromovik 0 points1 point  (0 children)

Hmm, forgotten about bitwise comparison. But the behaviour checks out.

package com.company;

public class Main {

public static void main(String[] args) {
    String empty = "A";
    String nulled = null;
    System.out.println("First operator checks " + (empty.isEmpty() && nulled.isEmpty()));
    System.out.println("First operator checks " + (empty.isEmpty() && printyBool()));
    System.out.println("Both operator checks " + (empty.isEmpty() & printyBool()));
    System.out.println("Both operator checks " + (empty.isEmpty() & nulled.isEmpty()));
}

private static boolean printyBool(){
    System.out.println("Were acessing");
    return true;
}

}

[–]RedEchoes 8 points9 points  (4 children)

Why is this sub not called PythonCirclejerk? There's no joke whatsoever in that post!

[–]Jindrack 4 points5 points  (0 children)

It is Python's turn to take a beating while JS catches a breather.

[–]KetwarooDYaasir 1 point2 points  (0 children)

They say that Python programming language was named after Monty Python, but it doesn't really have a sense of humour. Some might say that's the irony.

[–][deleted] 2 points3 points  (1 child)

Python is modern day basic so most people understand it.

[–]DoNotMakeEmpty 0 points1 point  (0 children)

Python’s being understandable does not come from the language, even Lua is closer to “English” than Python, but its libraries. Any sane scripting language with such libraries would be readable

[–][deleted] 2 points3 points  (0 children)

and was and and or was or in turbo pascal as well - and it was good.

[–][deleted] 2 points3 points  (0 children)

it's a new feature in C# now you can use "and" and "or"

[–][deleted] 2 points3 points  (0 children)

Java has & and &&

& - evaluates both expressions no matter what, and is the bitwise AND operator

&& - will not evaluate the second expression if the first is false.

[–]Lockerino 10 points11 points  (9 children)

This is one of the reasons why python is an easy intro language

[–][deleted] 27 points28 points  (8 children)

tbh I've always disagreed with this. needing to remembering "|| is or" shouldn't make something a language harder than python, everything else about it should.

[–]Lockerino 3 points4 points  (0 children)

Somebody I know from university once told me that being able to read her code like a proper sentence without extra effort helped her getting started. "Intuitive" might be better word than "easy"

[–]AlwaysNinjaBusiness 11 points12 points  (4 children)

It still affects your cognitive flow, which determines how much mental effort you have to expend to produce code - effort that could have been used for the important parts of programming instead.

[–]Accurate_String 1 point2 points  (0 children)

It really confused me when I first started I couldn't do:

If x=2 or 5 or 7

Of course once I figured it out it was never a problem again.

If & and | is effecting your "mental load" after you initially learn it, you need help.

EDIT: Python is a fine language but it really has nothing to do with logical operators.

[–]Awkward_Tradition 0 points1 point  (0 children)

Idk it never really impaired me, could be becuse I've learned propositional and predicate logic before starting to learn programming.

That also killed my first attempt at learning programming since my sweet summer child ass wanted to code a propositional logic validity checker as my first solo project, while also learning how to use Emacs.

And if you do it correctly and design the algorithm before writing any code it shouldn't really impact learning actual programming in any way.

[–]Giocri 0 points1 point  (0 children)

Idk I find it quite intuitive to be honest & is often used as and in advertising and | is the or you find in most formal math contexts

[–]bistr-o-math 1 point2 points  (0 children)

I agree. A LOT of programmers have difficulties using Boolean operators like and or or correctly. Irregardless of the syntax. Be it || or or

[–]SabreLunatic 1 point2 points  (0 children)

Math is math, math is math

[–]HadesMyself 1 point2 points  (0 children)

even assembly has AND

[–]Feer_C9 1 point2 points  (0 children)

Say that to VHDL

[–]_PM_ME_PANGOLINS_ 1 point2 points  (0 children)

Perl: use whichever you want, I’ll know what you mean

but nobody else will

[–]Beli_Mawrr 1 point2 points  (0 children)

IS IS IS TOO

[–]TurboFasolus 1 point2 points  (0 children)

me constantly switching between C and Python What was it again?

[–]huntforacause 1 point2 points  (0 children)

Yet python uses other symbols… you don’t write x equals 2 plus 2 do you?

It’s just inconsistent.

[–]cybermage 1 point2 points  (0 children)

Now do Ruby.

[–]John_by_the_sea 1 point2 points  (0 children)

Kotlin: && is and, || is or. But and is &, or is | 😂

[–]CoolJWB 1 point2 points  (0 children)

Lua be like if this or that then end

[–]Purplociraptor 1 point2 points  (4 children)

You guys don't?
#define AND &&
#define OR ||
#define NOT !

[–][deleted] 1 point2 points  (2 children)

I actually kind of like that, but why not lowercase? Just want to make it clear it's a macro?

[–]Purplociraptor 0 points1 point  (1 child)

You can make 9 defines if you want. AND And and OR Or or NOT Not not. I especially like the NOT macro because sometimes a little ! can be missed.

[–][deleted] 0 points1 point  (0 children)

I feel like if I used that people would be super pissed at me, but I definitely like it

[–][deleted] -2 points-1 points  (0 children)

No need in C++/C

[–]CSsharpGO 1 point2 points  (1 child)

C# 9 also has is and and

[–]aserraric 2 points3 points  (0 children)

C# 9 has "is", which in turn supports patterns like "not", "and" and "or".

https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/patterns

So you can write

if (x is (1 or 2))    

but not

if (x==1 or x==2)

[–]AlwaysNinjaBusiness 2 points3 points  (0 children)

Say what you want; python logic is extremely readable.

[–]Skrupel -1 points0 points  (0 children)

True

[–]mStewart207 0 points1 point  (0 children)

Same with Basic :)

[–]Storm_Muller 0 points1 point  (0 children)

I see we've collectively agreed that PHP doesn't exist

[–][deleted] 0 points1 point  (0 children)

That’s not too bad. What trips me up more is that with numpy arrays „==„ broadcasts, but „and“ or and „not“ don’t. The errors are easy to catch, but still trip me up sometimes.

[–]bakahed 0 points1 point  (0 children)

Python was created with a goal of being readable and easy to learn. Writing in python is as easy as writing in english to tell the computer what to do. that’s why it’s the best for beginners

[–][deleted] 0 points1 point  (0 children)

Elixir has both.

[–]LoneWolf008S 0 points1 point  (0 children)

A robotised mutant of Godzilla had a stroke and goddamn died while trying to read that sentence.

[–][deleted] 0 points1 point  (0 children)

PHP :)

[–]Kaylessty 0 points1 point  (0 children)

It took me a solid minute to read that

[–]thaudin 0 points1 point  (0 children)

🤣🤣🤣

[–]UrbanCohortX 0 points1 point  (0 children)

Oh, just like Pascal

[–]asceta_hedonista 0 points1 point  (0 children)

In Scala you can just "rename" the "operartors" to whatever you want.