Перейти к основному содержимому

Примеры кода

Примеры кода

Эта глава посвящена демонстрации типичных, часто встречающихся задач программирования на четырёх популярных языках: Python, JavaScript, Java и C#. Цель — показать, как одна и та же логическая операция может быть реализована в разных экосистемах, с учётом их синтаксических особенностей, идиом и стилей.

Вывод текста на экран

Одна из самых первых задач при изучении любого языка — научиться выводить информацию. Это позволяет проверять работу программы и отлаживать логику.

Python

print("Привет, мир!")

Функция print() принимает строку или любое другое значение и выводит его в стандартный поток вывода (обычно консоль). Она автоматически добавляет символ новой строки в конец.

JavaScript

console.log("Привет, мир!");

В среде Node.js или браузера используется метод console.log(). Он выводит значение в консоль разработчика. Для вывода в HTML-документ применяются другие методы, например document.write() или манипуляции с DOM.

Java

public class Main {
public static void main(String[] args) {
System.out.println("Привет, мир!");
}
}

В Java требуется определение класса и метода main, который является точкой входа. System.out.println() выводит строку и завершает её символом новой строки.

C#

using Система;

class Program
{
static void Main()
{
Console.WriteLine("Привет, мир!");
}
}

Аналогично Java, программа начинается с метода Main. Класс Console предоставляет метод WriteLine() для вывода с переходом на новую строку.


Объявление переменных и простые вычисления

Хранение и обработка данных — основа программирования.

Python

a = 10
b = 3
summa = a + b
product = a * b
quotient = a / b # результат — число с плавающей точкой: 3.333...
integer_div = a // b # целочисленное деление: 3
remainder = a % b # остаток от деления: 1

print(f"Сумма: {summa}, Произведение: {product}")
print(f"Целочисленное деление: {integer_div}, Остаток: {remainder}")

Python динамически типизирован: тип переменной определяется автоматически. Оператор f"" позволяет вставлять значения переменных прямо в строку.

JavaScript

let a = 10;
let b = 3;
const sum = a + b;
const product = a * b;
const quotient = a / b; // 3.333...
const integerDiv = Math.floor(a / b); // 3
const remainder = a % b; // 1

console.log(`Сумма: ${sum}, Произведение: ${product}`);
console.log(`Целочисленное деление: ${integerDiv}, Остаток: ${remainder}`);

let объявляет изменяемую переменную, const — неизменяемую. JavaScript также динамически типизирован. Для целочисленного деления используется Math.floor().

Java

int a = 10;
int b = 3;
int sum = a + b;
int product = a * b;
double quotient = (double) a / b; // приведение к double: 3.333...
int integerDiv = a / b; // 3 (целочисленное деление по умолчанию)
int remainder = a % b; // 1

System.out.println("Сумма: " + sum + ", Произведение: " + product);
System.out.println("Целочисленное деление: " + integerDiv + ", Остаток: " + remainder);

Java статически типизирована: тип указывается явно. При делении целых чисел результат тоже целый. Чтобы получить дробное число, нужно привести один из операндов к типу double.

C#

int a = 10;
int b = 3;
int sum = a + b;
int product = a * b;
double quotient = (double)a / b; // 3.333...
int integerDiv = a / b; // 3
int remainder = a % b; // 1

Console.WriteLine($"Сумма: {sum}, Произведение: {product}");
Console.WriteLine($"Целочисленное деление: {integerDiv}, Остаток: {remainder}");

C# также статически типизирован. Интерполяция строк через $"" аналогична Python и JavaScript.


Условные конструкции

Проверка условий позволяет программе принимать решения.

Python

age = 18
if age >= 18:
print("Совершеннолетний")
elif age >= 14:
print("Подросток")
else:
print("Ребёнок")

Ключевые слова: if, elif, else. Отступы определяют блоки кода.

JavaScript

let age = 18;
if (age >= 18) {
console.log("Совершеннолетний");
} else if (age >= 14) {
console.log("Подросток");
} else {
console.log("Ребёнок");
}

Скобки {} ограничивают блоки. Условия заключаются в круглые скобки.

Java

int age = 18;
if (age >= 18) {
System.out.println("Совершеннолетний");
} else if (age >= 14) {
System.out.println("Подросток");
} else {
System.out.println("Ребёнок");
}

Снтаксис идентичен JavaScript.

C#

int age = 18;
if (age >= 18)
{
Console.WriteLine("Совершеннолетний");
}
else if (age >= 14)
{
Console.WriteLine("Подросток");
}
else
{
Console.WriteLine("Ребёнок");
}

То же самое, но с принятой в C# стилистикой фигурных скобок на новых строках.


Циклы

Повторение действий — частая задача.

Python (цикл for)

for i in range(5):
print(f"Итерация {i}")

range(5) генерирует последовательность от 0 до 4.

JavaScript

for (let i = 0; i < 5; i++) {
console.log(`Итерация ${i}`);
}

Классический цикл for с инициализацией, условием и шагом.

Java

for (int i = 0; i < 5; i++) {
System.out.println("Итерация " + i);
}

Аналогично JavaScript.

C#

for (int i = 0; i < 5; i++)
{
Console.WriteLine($"Итерация {i}");
}

То же самое с интерполяцией.


Работа со списками / массивами

Хранение коллекций данных.

Python

fruits = ["яблоко", "банан", "апельсин"]
fruits.append("манго") # добавление
print(fruits[0]) # доступ по индексу
for fruit in fruits: # перебор
print(fruit)

Списки в Python динамические и гибкие.

JavaScript

let fruits = ["яблоко", "банан", "апельсин"];
fruits.push("манго"); // добавление
console.log(fruits[0]); // доступ
fruits.forEach(fruit => console.log(fruit)); // перебор

Массивы в JS также динамические.

Java

import java.util.ArrayList;

ArrayList<String> fruits = new ArrayList<>();
fruits.add("яблоко");
fruits.add("банан");
fruits.add("апельсин");
fruits.add("манго");

System.out.println(fruits.get(0)); // доступ

for (String fruit : fruits) {
System.out.println(fruit);
}

Используется ArrayList для динамического массива. Тип элементов указывается через дженерики (<String>).

C#

using Система.Collections.Generic;

List<string> fruits = new List<string>();
fruits.Add("яблоко");
fruits.Add("банан");
fruits.Add("апельсин");
fruits.Add("манго");

Console.WriteLine(fruits[0]); // доступ

foreach (string fruit in fruits)
{
Console.WriteLine(fruit);
}

List<T> — стандартный динамический список в .NET.


Функции / методы

Инкапсуляция логики в повторно используемые блоки.

Python

def greet(name):
return f"Привет, {name}!"

message = greet("Алиса")
print(message)

Функция объявляется через def, возвращает значение через return.

JavaScript

function greet(name) {
return `Привет, ${name}!`;
}

const message = greet("Алиса");
console.log(message);

Можно также использовать стрелочные функции: const greet = (name) => ....

Java

public static String greet(String name) {
return "Привет, " + name + "!";
}

// вызов
String message = greet("Алиса");
System.out.println(message);

Метод должен быть частью класса. Здесь он статический для простоты вызова.

C#

static string Greet(string name)
{
return $"Привет, {name}!";
}

// вызов
string message = Greet("Алиса");
Console.WriteLine(message);

Метод также статический и объявлен внутри класса.


Чтение ввода от пользователя

Взаимодействие с пользователем.

Python

name = input("Введите ваше имя: ")
print(f"Здравствуйте, {name}!")

input() читает строку из стандартного ввода.

JavaScript (Node.js)

const readline = require('readline');

const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});

rl.question('Введите ваше имя: ', (name) => {
console.log(`Здравствуйте, ${name}!`);
rl.close();
});

Используется модуль readline для асинхронного чтения.

Java

import java.util.Scanner;

Scanner scanner = new Scanner(System.in);
System.out.print("Введите ваше имя: ");
String name = scanner.nextLine();
System.out.println("Здравствуйте, " + name + "!");
scanner.close();

Scanner считывает ввод из System.in.

C#

Console.Write("Введите ваше имя: ");
string name = Console.ReadLine();
Console.WriteLine($"Здравствуйте, {name}!");

Console.ReadLine() читает строку до нажатия Enter.


Работа со строками

Обработка текстовых данных — одна из самых частых задач в программировании. Ниже показаны базовые операции: конкатенация, извлечение подстроки, замена, разбиение и проверка содержимого.

Python

text = "Привет, мир!"
upper_text = text.upper() # "ПРИВЕТ, МИР!"
substring = text[0:7] # "Привет,"
replaced = text.replace("мир", "Вселенная") # "Привет, Вселенная!"
words = text.split(", ") # ["Привет", "мир!"]
has_hello = "Привет" in text # True

print(f"Верхний регистр: {upper_text}")
print(f"Подстрока: {substring}")
print(f"Замена: {replaced}")
print(f"Слова: {words}")
print(f"Содержит 'Привет': {has_hello}")

Python предоставляет богатый набор методов для работы со строками. Все строки неизменяемы.

JavaScript

let text = "Привет, мир!";
let upperText = text.toUpperCase(); // "ПРИВЕТ, МИР!"
let substring = text.substring(0, 7); // "Привет,"
let replaced = text.replace("мир", "Вселенная"); // "Привет, Вселенная!"
let words = text.split(", "); // ["Привет", "мир!"]
let hasHello = text.includes("Привет"); // true

console.log(`Верхний регистр: ${upperText}`);
console.log(`Подстрока: ${substring}`);
console.log(`Замена: ${replaced}`);
console.log(`Слова: ${words}`);
console.log(`Содержит 'Привет': ${hasHello}`);

Строки в JavaScript также неизменяемы. Метод replace() заменяет только первое вхождение, если не используется регулярное выражение с флагом g.

Java

String text = "Привет, мир!";
String upperText = text.toUpperCase(); // "ПРИВЕТ, МИР!"
String substring = text.substring(0, 7); // "Привет,"
String replaced = text.replace("мир", "Вселенная"); // "Привет, Вселенная!"
String[] words = text.split(", "); // {"Привет", "мир!"}
boolean hasHello = text.contains("Привет"); // true

System.out.println("Верхний регистр: " + upperText);
System.out.println("Подстрока: " + substring);
System.out.println("Замена: " + replaced);
System.out.println("Слова: " + java.util.Arrays.toString(words));
System.out.println("Содержит 'Привет': " + hasHello);

В Java строки неизменяемы. Класс String предоставляет множество методов для манипуляций.

C#

string text = "Привет, мир!";
string upperText = text.ToUpper(); // "ПРИВЕТ, МИР!"
string substring = text.Substring(0, 7); // "Привет,"
string replaced = text.Replace("мир", "Вселенная"); // "Привет, Вселенная!"
string[] words = text.Split(new string[] { ", " }, StringSplitOptions.None); // ["Привет", "мир!"]
bool hasHello = text.Contains("Привет"); // true

Console.WriteLine($"Верхний регистр: {upperText}");
Console.WriteLine($"Подстрока: {substring}");
Console.WriteLine($"Замена: {replaced}");
Console.WriteLine($"Слова: [{string.Join(", ", words)}]");
Console.WriteLine($"Содержит 'Привет': {hasHello}");

C# также использует неизменяемые строки. Метод Split() требует явного указания разделителя как массива.


Работа с файлами

Чтение и запись данных в файл — стандартная задача при работе с внешними источниками.

Python

# Запись
with open("example.txt", "w", encoding="utf-8") as f:
f.write("Привет из Python!")

# Чтение
with open("example.txt", "r", encoding="utf-8") as f:
content = f.read()
print(content)

Конструкция with гарантирует закрытие файла даже при возникновении ошибки.

JavaScript (Node.js)

const fs = require('fs');

// Запись
fs.writeFileSync("example.txt", "Привет из Node.js!", "utf8");

// Чтение
const content = fs.readFileSync("example.txt", "utf8");
console.log(content);

Можно использовать асинхронные версии (writeFile, readFile) для неблокирующего ввода-вывода.

Java

import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.charset.StandardCharsets;

// Запись
Files.write(Paths.get("example.txt"), "Привет из Java!".getBytes(StandardCharsets.UTF_8));

// Чтение
String content = Files.readString(Paths.get("example.txt"), StandardCharsets.UTF_8);
System.out.println(content);

Начиная с Java 11, доступен удобный метод readString. Для более сложных задач используются BufferedReader и FileWriter.

C#

using Система.IO;

// Запись
File.WriteAllText("example.txt", "Привет из C#!", Система.Text.Encoding.UTF8);

// Чтение
string content = File.ReadAllText("example.txt", Система.Text.Encoding.UTF8);
Console.WriteLine(content);

Класс File предоставляет статические методы для простых операций с файлами.


Обработка исключений

Обработка ошибок позволяет программе корректно реагировать на непредвиденные ситуации.

Python

try:
result = 10 / 0
except ZeroDivisionError as e:
print(f"Ошибка деления на ноль: {e}")
finally:
print("Блок finally всегда выполняется")

JavaScript

try {
let result = 10 / 0;
// В JS деление на ноль даёт Infinity, но для демонстрации:
throw new Error("Искусственная ошибка");
} catch (e) {
console.log(`Ошибка: ${e.message}`);
} finally {
console.log("Блок finally всегда выполняется");
}

Java

try {
int result = 10 / 0; // вызовет ArithmeticException
} catch (ArithmeticException e) {
System.out.println("Ошибка: " + e.getMessage());
} finally {
System.out.println("Блок finally всегда выполняется");
}

C#

try
{
int result = 10 / 0; // вызовет DivideByZeroException
}
catch (DivideByZeroException e)
{
Console.WriteLine($"Ошибка: {e.Message}");
}
finally
{
Console.WriteLine("Блок finally всегда выполняется");
}

Во всех четырёх языках используется похожая структура try-catch-finally.


Создание класса и объекта

Объектно-ориентированное программирование — ключевая парадигма во многих языках.

Python

class Person:
def __init__(self, name, age):
self.name = name
self.age = age

def introduce(self):
return f"Меня зовут {self.name}, мне {self.age} лет."

alice = Person("Алиса", 30)
print(alice.introduce())

JavaScript

class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}

introduce() {
return `Меня зовут ${this.name}, мне ${this.age} лет.`;
}
}

const alice = new Person("Алиса", 30);
console.log(alice.introduce());

Java

class Person {
private String name;
private int age;

public Person(String name, int age) {
this.name = name;
this.age = age;
}

public String introduce() {
return "Меня зовут " + name + ", мне " + age + " лет.";
}
}

Person alice = new Person("Алиса", 30);
System.out.println(alice.introduce());

C#

class Person
{
public string Name { get; set; }
public int Age { get; set; }

public Person(string name, int age)
{
Name = name;
Age = age;
}

public string Introduce()
{
return $"Меня зовут {Name}, мне {Age} лет.";
}
}

Person alice = new Person("Алиса", 30);
Console.WriteLine(alice.Introduce());

Все примеры демонстрируют инкапсуляцию данных и поведения в одном объекте.


Работа с датой и временем

Обработка временных меток — частая задача в логировании, планировании и анализе данных.

Python

from datetime import datetime, timedelta

now = datetime.now()
print(f"Сейчас: {now}")

# Добавить 7 дней
next_week = now + timedelta(days=7)
print(f"Через неделю: {next_week.strftime('%Y-%m-%d %H:%M')}")

# Разбор строки
date_str = "2025-12-31"
parsed = datetime.strptime(date_str, "%Y-%m-%d")
print(f"Разобранная дата: {parsed}")

JavaScript

const now = new Date();
console.log(`Сейчас: ${now}`);

// Добавить 7 дней
const nextWeek = new Date(now);
nextWeek.setDate(now.getDate() + 7);
console.log(`Через неделю: ${nextWeek.toLocaleDateString()}`);

// Разбор строки
const dateStr = "2025-12-31";
const parsed = new Date(dateStr);
console.log(`Разобранная дата: ${parsed}`);

Java

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;

LocalDateTime now = LocalDateTime.now();
System.out.println("Сейчас: " + now);

// Добавить 7 дней
LocalDateTime nextWeek = now.plus(7, ChronoUnit.DAYS);
System.out.println("Через неделю: " + nextWeek.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm")));

// Разбор строки
String dateStr = "2025-12-31";
LocalDateTime parsed = LocalDateTime.parse(dateStr + "T00:00");
System.out.println("Разобранная дата: " + parsed);

C#

using Система;

DateTime now = DateTime.Now;
Console.WriteLine($"Сейчас: {now}");

// Добавить 7 дней
DateTime nextWeek = now.AddDays(7);
Console.WriteLine($"Через неделю: {nextWeek:yyyy-MM-dd HH:mm}");

// Разбор строки
string dateStr = "2025-12-31";
DateTime parsed = DateTime.Parse(dateStr);
Console.WriteLine($"Разобранная дата: {parsed}");

HTTP-запрос (получение данных с API)

Взаимодействие с внешними сервисами — ключевая часть современных приложений.

Python

import requests

response = requests.get("https://jsonplaceholder.typicode.com/posts/1")
if response.status_code == 200:
Данные = response.json()
print(f"Заголовок: {Данные['title']}")
else:
print("Ошибка запроса")

JavaScript (Node.js)

const axios = require('axios');

axios.get('https://jsonplaceholder.typicode.com/posts/1')
.then(response => {
console.log(`Заголовок: ${response.Данные.title}`);
})
.catch(error => {
console.error('Ошибка запроса');
});

Java

import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://jsonplaceholder.typicode.com/posts/1"))
.build();

client.sendAsync(request, HttpResponse.BodyHandlers.ofString())
.thenApply(HttpResponse::body)
.thenAccept(body -> {
// Для простоты не парсим JSON
System.out.println("Ответ получен (длина): " + body.length());
})
.join();

C#

using System.Net.Http;
using Система.Text.Json;

using var client = new HttpClient();
var response = await client.GetAsync("https://jsonplaceholder.typicode.com/posts/1");

if (response.IsSuccessStatusCode)
{
string json = await response.Content.ReadAsStringAsync();
var post = JsonSerializer.Deserialize<Dictionary<string, object>>(json);
Console.WriteLine($"Заголовок: {post["title"]}");
}
else
{
Console.WriteLine("Ошибка запроса");
}

Параллельное выполнение (простейший пример)

Выполнение нескольких задач одновременно повышает производительность.

Python

import threading
import time

def task(name):
time.sleep(1)
print(f"Задача {name} завершена")

thread1 = threading.Thread(target=task, args=("A",))
thread2 = threading.Thread(target=task, args=("B",))

thread1.start()
thread2.start()

thread1.join()
thread2.join()

print("Все задачи завершены")

JavaScript

function task(name) {
return new Promise(resolve => {
setTimeout(() => {
console.log(`Задача ${name} завершена`);
resolve();
}, 1000);
});
}

Promise.all([task("A"), task("B")])
.then(() => console.log("Все задачи завершены"));

Java

Thread thread1 = new Thread(() -> {
try {
Thread.sleep(1000);
System.out.println("Задача A завершена");
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
});

Thread thread2 = new Thread(() -> {
try {
Thread.sleep(1000);
System.out.println("Задача B завершена");
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
});

thread1.start();
thread2.start();

try {
thread1.join();
thread2.join();
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}

System.out.println("Все задачи завершены");

C#

using Система.Threading.Задачи;

async Task RunTask(string name)
{
await Task.Delay(1000);
Console.WriteLine($"Задача {name} завершена");
}

await Task.WhenAll(RunTask("A"), RunTask("B"));
Console.WriteLine("Все задачи завершены");

См. также

Другие статьи этого же раздела в боковом меню (как на странице «О разделе»).