1

Скажем, например, что в Java версии 9 кто-то хотел добавить поддержку символов ≤ и ≥ в качестве операндов, которые будут работать точно так же, как и < = и > = операнды соответственно. Было бы возможно, так как ≤ и ≥ не являются символами ASCII/не являются частью стандартной кодировки, не разрушая переносимость? Было бы возможно? Поддерживают ли какие-либо основные языки программирования что-то вроде этого?Hypothetical - поддержка символов, отличных от ASCII, в тексте без строки

+1

Вы не можете использовать unicode в исходном коде Java? – Patashu

ответ

2

Java не позволяет перегрузке оператора, и поскольку это довольно фундаментальный принцип языка, я не думаю, что вы когда-либо сможете использовать ≤ или ≥ для < = или> =.

Однако Scala (другой язык JVM) поддерживает как перегрузку оператора , так и с использованием символов Юникода в качестве идентификаторов. Вот РЕПЛ сессия примера, где я определяю и операторов для числовых типов:

scala> implicit class ExtendedNumeric[T](n: T)(implicit numeric: Numeric[T]) { 
    | import numeric._ 
    | def `≥`(other: T) = n >= other 
    | def `≤`(other: T) = n <= other 
    | } 
defined class ExtendedNumeric 

scala> 1 ≤ 2 
res0: Boolean = true 

scala> 5 ≤ -5 
res1: Boolean = false 

scala> 8.0 ≥ 0.0001 
res2: Boolean = true 
+0

Я не имел в виду перегрузку оператора в том смысле, что программист определяет новый оператор), я имел в виду, что они фактически добавят его в компилятор в Java 8, так как они добавляют поддержку лямбда-выражений. Это возможно? Если это так, значит, какой-либо язык уже имеет «неотъемлемую» поддержку для ≤ и ≥ - в том смысле, что вам не нужно их определять, прежде чем использовать их, как в вашем примере? – user1126849

+0

Редактирование: Я только что узнал, что, по-видимому, ALGOL поддерживает ≤ и ≥, а также ÷ и несколько других специальных символов. Если такой старый язык поддерживает их, почему не самые современные? – user1126849

+0

@ user1126849 - [APL] (http://en.wikipedia.org/wiki/APL_syntax_and_symbols), еще один очень старый язык (1964), также поддерживает ≤ и ≥ в качестве операторов. По-моему, причина, по которой большинство современных языков программирования не поддерживает их, состоит в том, что на стандартной клавиатуре сложно вводить символы, отличные от ASCII. (Легко набирать ≤ & ≥ на OSX, но не так просто в Linux или Windows по умолчанию.) – DaoWen

1

Java уже поддерживает не-ASCII символы. Например, следующая программа компилируется нормально:

public class Test { 

    public static final float π = 3.1415927f; 

    public static void main(String[] args) { 
     System.out.println(π); 
    } 

} 

(Конечно, вы должны будете использовать кодировку исходного файла, содержащего n)

Однако, поскольку ≤ и ≥ не может быть использована в идентификаторах, представляя их как операторы, не будет нарушать совместимость в обратном направлении.

Поддержка многочисленных языков, определяющих ваши собственные операторы. В конце концов, единственное, что отличает оператор от вызова функции, - это нотация infix, то есть имя оператора появляется между, а не перед его операндами. Для (неполного) списка таких языков см. Статью wikipedia по адресу operator overloading.

+0

Подождите, я думал, что имена переменных должны начинаться с буквы, знака доллара или подчеркивания? – user1126849

+1

π - это буква в греческом алфавите. – meriton

+0

Да, но изначально я думал, что для этой цели используются только буквы a-z и A-Z. Разрешены ли все греческие письма? – user1126849

Смежные вопросы