Sujet : Re: basic BASIC question
De : arne (at) *nospam* vajhoej.dk (Arne Vajhøj)
Groupes : comp.os.vmsDate : 07. Feb 2025, 04:15:18
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <vo3ts7$379us$1@dont-email.me>
References : 1 2 3 4 5 6 7
User-Agent : Mozilla Thunderbird
On 2/6/2025 4:20 PM, Lawrence D'Oliveiro wrote:
On Thu, 6 Feb 2025 11:04:12 -0500, Arne Vajhøj wrote:
If JavaScript was unique in the web frontend world for lack of type
safety, then the lack of type safety could be due to its history.
Other popular languages like PHP and Python also has a relaxed
approach to types.
Worth being clear what we’re talking about. None of these languages is
type-unsafe in the way that C, for example, allows free typecasting
between unrelated types, and in particular between pointers to unrelated
types. They are all dynamic languages, and every value that a variable can
hold does have an explicit type, and conversions between types follow
well-founded semantic rules.
However, JavaScript and PHP have a laissez-faire attitude to equivalences
with strings, and will happily autoconvert between strings and non-string
types in various situations, often leading to surprising results. This is
why both those languages have the “===” comparison operator as a stricter
form of “==” which says “turn off these string-nonstring autoconversions”.
Python never had this particular bit of brain damage. But it does still
have that common weakness with booleans. Which is a more manageable issue.
There are different conventions.
$ type cmp.php
<?php
function test($a, $b) {
if($a == $b) {
echo "true ";
} else {
echo "false ";
}
if($a === $b) {
echo "true\r\n";
} else {
echo "false\r\n";
}
}
test(0, 0);
test(0, 0.0);
test(0, '0');
test(0, 'X');
test(0, False);
test(0, null);
?>
$ php cmp.php
true true
true false
true false
false false
true false
true false
$ type cmp.py
def test(a, b):
if a == b:
print('true')
else:
print('false')
test(0, 0)
test(0, 0.0)
test(0, '0')
test(0, 'X')
test(0, False)
test(0, None)
$ python cmp.py
true
true
false
false
true
false
$ type Cmp.groovy
def test(a, b) {
if(a == b) {
println("true")
} else {
println("false")
}
}
test(0, 0)
test(0, 0.0)
test(0, "0")
test(0, "X")
test(0, false)
test(0, null)
$ groovy Cmp.groovy
true
true
false
false
false
false
$ type Cmp.java
public class Cmp {
private static void test(Object a, Object b) {
if(a.equals(b)) {
System.out.println("true");
} else {
System.out.println("false");
}
}
public static void main(String[] args) {
test(0, 0);
test(0, 0.0);
test(0, "0");
test(0, "X");
test(0, false);
test(0, null);
}
}
$ javac Cmp.java
$ java Cmp
true
false
false
false
false
false
Arne