[Info-vax] basic BASIC question
Arne Vajhøj
arne at vajhoej.dk
Thu Feb 6 22:15:18 EST 2025
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
More information about the Info-vax
mailing list