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

Простые приложения на Julia

Разработчику Архитектору

Простые приложения на Julia

Julia ориентирована на численные расчёты — быстрые массивы, REPL, пакеты через Pkg. Для "простых приложений" типичны обработка CSV, статистика, визуализация.


Как запускать примеры из главы

  1. Скрипт: julia имя.jl
  2. Пакеты: в REPL ] add CSV DataFrames (один раз).
  3. Проверка: julia --version (1.9+).

Генератор паролей

Как запустить

  • Файл: password.jl
  • Команда: julia password.jl
using Random

function generate_password(n::Int=16)
chars = ['a':'z'; 'A':'Z'; '0':'9'; '!', '@', '#', '$', '%']
String(rand(chars) for _ in 1:n)
end

println(generate_password())

Что здесь важно:

  • Random берёт источник случайности из стандартной библиотеки.
  • n::Int=16 задаёт длину по умолчанию и ожидаемый тип аргумента.
  • Генератор for _ in 1:n создаёт строку без лишних промежуточных структур.

Как улучшить учебный пример:

function generate_password(n::Int=16; with_symbols::Bool=true)
base = ['a':'z'; 'A':'Z'; '0':'9']
chars = with_symbols ? [base; '!', '@', '#', '$', '%'] : base
return String(rand(chars) for _ in 1:n)
end

Сводка по CSV

using CSV, DataFrames, Statistics

df = CSV.read("data.csv", DataFrame)
println(describe(df))
println("mean price = ", mean(df.price))

Полезные проверки, чтобы пример был ближе к реальной задаче:

@assert :price in names(df) "В CSV нет колонки price"
clean = dropmissing(df, :price)
println("rows = ", nrow(clean))
println("median price = ", median(clean.price))

Частая ошибка новичка: считать среднее по колонке, где есть missing.


Простой HTTP (HTTP.jl)

using HTTP, JSON3

route = function(req)
if req.target == "/"
return HTTP.Response(200, ["Content-Type" => "application/json"],
JSON3.write(Dict("ok" => true)))
end
HTTP.Response(404, "not found")
end

# HTTP.serve(route, "127.0.0.1", 8000)

Чтобы запустить локально:

  1. Раскомментируйте строку HTTP.serve(...).
  2. Запустите julia server.jl.
  3. Откройте http://127.0.0.1:8000/.

Для первого API этого достаточно. Теорию по протоколу смотрите в HTTP как основа веб-интеграций.


Запись JSON-трекера

using JSON3

mutable struct Task
id::Int
title::String
done::Bool
end

tasks = [Task(1, "Изучить Julia", false)]
open("tasks.json", "w") do io
JSON3.write(io, tasks)
end

Что добавить в практической версии:

  • чтение уже существующего файла задач;
  • обновление done по id;
  • валидацию входных данных перед записью. См. Проверка и валидация.

Характерный пример — векторизация

x = 1:1_000_000
y = @. sin(x) + cos(2x) # broadcast без явного цикла
println(sum(y))

Оператор @. применяет функцию поэлементно — основа производительности Julia.


Мини-приложение "анализ продаж"

Ниже пример цельного скрипта, где соединяются CSV, агрегация и запись результата:

using CSV, DataFrames, Statistics, JSON3

df = CSV.read("sales.csv", DataFrame)
@assert all(["region", "amount"] .∈ Ref(names(df)))

clean = dropmissing(df, [:region, :amount])
grouped = combine(groupby(clean, :region), :amount => mean => :avg_amount)

open("report.json", "w") do io
JSON3.write(io, grouped)
end

println(grouped)

Это уже типичный рабочий "малый" pipeline, который часто встречается в аналитике.


Частые ошибки в простых приложениях

СимптомВероятная причинаЧто сделать
Package ... not foundПакет не установлен в текущем окружении] add ... и проверить Pkg.status()
MethodError в арифметикеСмешаны несовместимые типыПроверить typeof(...) и привести типы
Неожиданно медленноМного глобальных переменных и аллокацийУнести логику в функции, проверить @time
Ошибка чтения CSVНеверный путь/разделитель/кодировкаПроверить путь и параметры CSV.read

Как масштабировать эти примеры дальше

От "простых приложений" обычно двигаются по двум траекториям:

  1. Аналитика и MLDataFrames, Plots, Flux, MLJ.
  2. Инженерные расчётыDifferentialEquations, Optim, распределённые вычисления.

Связанные статьи этого раздела: Основы, Архитектура, Функции и макросы, Первая программа.


См. также: R — простые приложения

Основа по протоколу

Базовый разбор HTTP и HTTPS находится в отдельной статье — HTTP как основа веб-интеграций.