Найти в Дзене
Каморка Программиста

Одна задача, пять языков, ищем разницу в Python, JS, Java, C# и Go

Народ, всем привет. Программисты часто выбирают язык не только по производительности или наличию библиотек, но и просто тот, который знают… шутка! Но и по удобству синтаксиса. Ведь хороший синтаксис упрощает чтение, уменьшает количество ошибок и в принципе ускоряет написание кода. А давайте сегодня на примере посмотрим, как решается одна и та же простая задача на пяти популярных языках программирования: Python, JavaScript, Java, C# и Go. Возьмем что-нибудь простенькое, например, нужно написать программу, которая принимает список чисел, находит среди них чётные, и считает их сумму. С одной стороны просто, с другой вроде задача и интересная. Вначале решим на бумаге: список чисел: [1, 2, 3, 4, 5, 6] выбираем чётные: [2, 4, 6] считаем их сумму: 2 + 4 + 6 = 12 numbers = [1, 2, 3, 4, 5, 6] even_sum = sum(n for n in numbers if n % 2 == 0) print(even_sum) Что мы тут видим? Во-первых, используется генератор выражений, т.к. Python позволяет лаконично фильтровать и сразу агрегировать данные (sum(
Оглавление

Народ, всем привет. Программисты часто выбирают язык не только по производительности или наличию библиотек, но и просто тот, который знают… шутка! Но и по удобству синтаксиса. Ведь хороший синтаксис упрощает чтение, уменьшает количество ошибок и в принципе ускоряет написание кода. А давайте сегодня на примере посмотрим, как решается одна и та же простая задача на пяти популярных языках программирования: Python, JavaScript, Java, C# и Go.

Возьмем что-нибудь простенькое, например, нужно написать программу, которая принимает список чисел, находит среди них чётные, и считает их сумму. С одной стороны просто, с другой вроде задача и интересная. Вначале решим на бумаге:

список чисел: [1, 2, 3, 4, 5, 6]
выбираем чётные: [2, 4, 6]
считаем их сумму: 2 + 4 + 6 = 12
-2

Python

numbers = [1, 2, 3, 4, 5, 6]
even_sum = sum(n for n in numbers if n % 2 == 0)
print(even_sum)

Что мы тут видим? Во-первых, используется генератор выражений, т.к. Python позволяет лаконично фильтровать и сразу агрегировать данные (sum() — встроенная функция, принимающая итерируемый объект). И конечный код выглядит как естественный язык, легко читается, не требует каких-то импортов, все работает из коробки. Из минусов можно выделить только не самый быстрый вариант при очень больших данных.

JavaScript

const numbers = [1, 2, 3, 4, 5, 6];
const evenSum = numbers
.filter(n => n % 2 === 0)
.reduce((acc, n) => acc + n, 0);
console.log(evenSum);

В данном случае используются методы массива .filter() и .reduce(), которые реализуют функциональный стиль. Стрелочные функции делают код компактным, код обладает некой гибкостью, можно менять фильтрацию и логику агрегации. Кстати, подходит как для фронтенда, так и для Node.js. Ну из минусов можно назвать только некая сложность для понимания у некоторых начинающих по логике .reduce(), но это я уже придираюсь.

-3
Хотите знать больше? Читайте нас в нашем Telegram – там еще больше интересного: новинки гаджетов, технологии, AI, фишки программистов, примеры дизайна и маркетинга.

Java

import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] numbers = {1, 2, 3, 4, 5, 6};
int evenSum = Arrays.stream(numbers)
.filter(n -> n % 2 == 0)
.sum();
System.out.println(evenSum);
}
}

Начиная с Java 8, появился Stream API, поддерживающий цепочку функциональных операций. В том числе filter() и sum() работают с IntStream. По факту хорошо оптимизированный код, с типизацией. Но в части читаемости это все таже многослойность, этот обязательный main() и классы. По сравнению с предыдущими примерами, сразу кажется как-то «сложно».

-4

C\#

using System;
using System.Linq;
class Program {
static void Main() {
int[] numbers = {1, 2, 3, 4, 5, 6};
int evenSum = numbers.Where(n => n % 2 == 0).Sum();
Console.WriteLine(evenSum);
}
}

Тут почти аналогично. Используется LINQ, мощный встроенный инструмент для работы с коллекциями, а .Where() и `Sum() позволяют выразить саму идею. Все это влияет на производительность не в лучшую сторону, но с другой стороны читается код просто как книга, все как-то на своих местах и понятно. Опатья де, можно легко подставить другие условия фильтрации или агрегации.

-5

Go

package main
import "fmt"
func main() {
numbers := []int{1, 2, 3, 4, 5, 6}
sum := 0
for _, n := range numbers {
if n%2 == 0 {
sum += n
}
}
fmt.Println(sum)
}

Ну тут у нас просто вообще все «в лоб». Нет встроенных методов фильтрации и редукции, всё делается фактически вручную. И, с одной стороны, у нас простой, прямолинейный код, который хорошо отлаживается. Плюс высокая скорость выполнения. С другой стороны, больше кода, меньше «выразительности».

Что по итогу?

Хотя задача у нас была одна, подходы к её решению сильно различаются, что и определяет часто цель их использования. Python предлагает максимальную лаконичность и простоту, и именно поэтому его часто используют для скриптов и анализа данных. JS более гибкий и мощный, что хорошо в современной веб-разработке. Java остаётся надёжным выбором для больших корпоративных систем, но требует больше кода, как и C# с его LINQ, такой строгий и четкий. Ну а Go это некая простота, ну и прямолинейность в чем-то.

-6

Если Вам нравятся наши статьи, и вы хотите отблагодарить автора (на развитие канала), нам будет очень приятно!