avva: (Default)
[personal profile] avva
(программистам)

void main() {
var name = IO.readln("What is your name? ");
IO.println("Hello, " + name);
}

Никогда не догадаетесь, какой это язык программирования.

Джава. Это Джава. Новая версия JDK 25, вышедшая сегодня.

Но как??! спросите вы.

Значит так. Начинаем с привычного (вместо Scanner можете представить BufferedReader, если предпочитаете, неважно)

public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("What is your name? ");
String name = scanner.nextLine();
System.out.println("Hello, " + name);
}
}

и сознательно вносим в язык возможности упростить, главным образом для программистов-новичков:

- не надо объявлять класс, "голые функции" по умолчанию принадлежат одному анонимному классу
- не надо объявлять public, для программы из одного файла нормально разрешить main() быть функцией и в классе package-visibility
- не надо static, запускающий программу код создаст класс, если у него есть дефолтный конструктор без аргументов (а у этого нового анонимного класса есть)
- разрешаем main без аргументов
- var без String уже раньше был, тип известен из функции readln()
- вводим новый класс IO для супер-простого ввода/вывода, делаем его частью java.lang, чтобы не надо было импортировать.

И вот результат.

Прощай, "public static void main". Ты держался 30 лет, но твое время прошло.

Даже не знаю, что я ощущаю по этому поводу. Я ненавижу многословность Джавы, но это как-то уж слишком упрощает. Возможно, ловушка тут в том, что эти возможности ввели сознательно для упрощения самых начальных программ, и в итоге они дают новичкам неверное впечатление о том, как будут выглядеть их большие программы на Джаве. А они все-таки будут выглядеть как раньше, по большей части.

Но с другой стороны, чего это я брюзжу. Я даже и не пишу на Джаве, и не собираюсь в ближайшем будущем. Люди придумали интересный способ упростить синтаксис простеньких программ на Джаве, при этом оставаясь в рамках языка, без каких-то дикостей типа макро-обработки или супер-специальных случаев. Ну и молодцы.

А вы как думаете?

(подробно: https://openjdk.org/jeps/512)

Date: 2025-09-16 07:01 pm (UTC)

Date: 2025-09-17 05:44 am (UTC)
From: [personal profile] impeller

IO — хорошо. Console в C# всю жизнь есть, и ничего плохого в нем не было.

Остальной сахар — нормально, но есть немножечко странное послевкусие. Очень много разных приемов применено, чтобы устранить boilerplate в одном конкретном сценарии скрипта. А это такой частотный сценарий — на Java именно скрипты по-быстренькому писать? Всегда был далек от Java, но в бытность коммерческим программистом на C# я предпочитал скрипты писать на питоне.

Есть ощущение, что со скриптами может быть по-прежнему неудобно, ведь Java была громоздкой не только в районе Main.main().

December 2025

S M T W T F S
  123 4 56
78 9 10 11 1213
1415 1617181920
21 22 23 24 2526 27
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Dec. 26th, 2025 09:30 pm
Powered by Dreamwidth Studios