Why make it complicated?
-
It's also valid rust syntax.
But if it were rust, this meme would not make sense, since you would just type
let a
and type inference would do its thing. Which is much more ergonomic.let a = String::from(“Hello, world!”).into()
I’ll see myself out.
-
JavaScript (Typescript for the type part) and python, the most popular scripting languages, use the same order as PHP.
It's usually compiled languages that do the other one.
TypeScript doesn't need the "function" keyword for a method in an object or on a class though.
const foo = { bar(): string { ... } }
which I assume is doable because the syntax is unambiguous.
In PHP's case, the method syntax should also be unambiguous.
-
That looks like rust ngl
I was thinking the same thing. who would write typescript if they could just do Rust?
-
It enforces scalar types (string, int, etc) at runtime if you enable strict mode. There's also static analysis tools like PHPStan and Psalm that will flag issues at build time.
so, no. good catch OP!
-
And then assign an int to a string just to mess with the interpreter.
I wish the interpreter cared about assignment
-
Not to short-circuit the joke, but in this case, it's because the valid JavaScript version is...
let a
...and one of TypeScript's main design goals is to be a superset of JavaScript, that only adds syntax, and doesn't re-write it.
Beyond that, it's probably a case of some new language just using what the designer is familiar with.
Who says this is JS? Might be Rust.
-
Made with KolourPaint and screenshots from Kate (with the GitHub theme).
String a: new String()
-
I don't understand how not using a keyword to define a function causes the meaning to change depending on imports. I've never run into an issue like that before. Can you give an example?
Some declarations terminate on the name, other declarations go one requiring more tokens. In C, the only thing that differentiates them is the type.
Parenthesis in particular are completely ambiguous. But asterisks and square brackets also create problems.
-
Who says this is JS? Might be Rust.
Then the second part of my statement applies.
-
TypeScript doesn't need the "function" keyword for a method in an object or on a class though.
const foo = { bar(): string { ... } }
which I assume is doable because the syntax is unambiguous.
PHP's object orientation is similar to languages like Java and C#, which is what I was comparing to.
Your example didn't mention the use of the function keyword. Instead, it seemed to be questioning the placement of the return type - placing it after the argument list seems pretty common in newer languages.
-
And Kotlin.
AND MY AXE!
-
python:
a: str = 1
That's just a comment
-
Made with KolourPaint and screenshots from Kate (with the GitHub theme).
let a: &'static str
-
Some declarations terminate on the name, other declarations go one requiring more tokens. In C, the only thing that differentiates them is the type.
Parenthesis in particular are completely ambiguous. But asterisks and square brackets also create problems.
I have never heard of this problem for C. Can you elaborate or point to some articles?
-
You're encoding more information in the typescript one. You're saying it's a string that will get updated.
C# has const string a = "Hello, World";
var in js is legacy, and default should be let, but changing that would break everything
-
If there's only two options you only need one keyword
wrote on last edited by [email protected]True, but var and let are not same in js, so there is three.
if(true) {
var a = "dumdum"
}
console.log(a)
Is valid and functioning javascript. With let it is not.
-
So I think it's still probably unclear to people why "mix of keywords and identifiers" is bad: it means any new keyword could break backwards compatibility because someone could have already named a type the same thing as that new keyword.
This syntax puts type identifiers in the very prominent position of "generic fresh statement after semicolon or newline"
..though I've spent like 10 minutes thinking about this and now it's again not making sense to me. Isn't the very common plain "already_existing_variable = 5" also causing the same problem? We'd have to go back to cobol style "SET foo = 5" for everything to actually make it not an issue
At least in C#, you can define variables with keyword names like this:
var @struct = "abc"
I think in Kotlin you can do the same, and even include spaces with backticks like val
abstract class
= "abc"I'm not sure if other languages allow that, regardless it should be rarely used.
-
It's commonly used in math to declare variables so I assume programming languages borrowed it from there.
More specifically, they're borrowing the more mathematical meaning of variables, where if you say x equals 5, you can't later say x is 6, and where a statement like "x = x + 1" is nonsense. Using "let" means you're setting the value once and that's what it's going to remain as long as it exists, while "var" variables can be changed later. Functional languages, which are usually made by very math-y people, will often protest the way programmers use operators by saying that
=
is strictly for equality and variable assignment is:=
instead of==
and=
in most C-style languages. -
let a: &'static str
wrote on last edited by [email protected]Rust is verbose, but C++ might still take the cake with its standard library templates. Especially when using fully-qualified type names...
auto a = ::std::make_shared<::std::basic_string<char, ::std::char_traits<char>, MyAllocator<char>>>();
A reference-counted shared pointer to a string of unspecified character encoding and using a non-default memory allocator.
-
At least in C#, you can define variables with keyword names like this:
var @struct = "abc"
I think in Kotlin you can do the same, and even include spaces with backticks like val
abstract class
= "abc"I'm not sure if other languages allow that, regardless it should be rarely used.
Swift also uses backticks and Rust has a dumb one in the form of
r#thekeyword
. Still much better than introducing aasync
as a new keyword in a minor version of a language and breaking a bunch of libraries.