18

Gradle، تست و ساختار پروژه؛ حرفه‌ای بازی کن

پروژه جدی بدون build system و test مثل رستوران بدون آشپزخونه‌ست؛ ظاهر داره، باطن نه.

درس 18 از 20

Gradle Kotlin DSL

خیلی از پروژه‌های کاتلین با Gradle ساخته می‌شن. فایل `build.gradle.kts` با خود کاتلین نوشته می‌شه و dependencyها، پلاگین‌ها و تنظیمات build رو مدیریت می‌کنه.

مثال را با چند مقدار دیگر هم امتحان کن؛ چون برنامه‌نویسی با نگاه کردن یاد گرفته نمی‌شود، با خراب کردن و درست کردن جا می‌افتد.

build.gradle.kts نمونه
plugins {
    kotlin("jvm") version "2.0.0"
}

repositories {
    mavenCentral()
}

dependencies {
    testImplementation(kotlin("test"))
}
خروجی یا نتیجه اجرا
خروجی کنسولی ندارد؛ Gradle با این فایل پلاگین Kotlin، مخزن Maven Central و dependency تست را می‌شناسد.
نکته کاربردی: این بخش اسکلت ذهنی درس را می‌سازد. وقتی بدانی این قطعه دقیقاً چه مسئله‌ای را حل می‌کند، بعداً موقع پروژه فقط syntax حفظی تحویل نمی‌دهی؛ تصمیم درست می‌گیری. اگر خروجی با چیزی که انتظار داشتی فرق کرد، اول مقدار متغیرها و مسیر اجرا را چک کن؛ ۹۰٪ باگ‌های اول راه همین‌جا قایم شده‌اند.

ساختار پروژه

معمولاً کد اصلی توی `src/main/kotlin` و تست‌ها توی `src/test/kotlin` قرار می‌گیرن. همین نظم ساده باعث می‌شه بعداً پروژه‌ات تبدیل به جنگل آمازون نشه.

مثال را با چند مقدار دیگر هم امتحان کن؛ چون برنامه‌نویسی با نگاه کردن یاد گرفته نمی‌شود، با خراب کردن و درست کردن جا می‌افتد.

نکته کاربردی: اینجا باید به رفتار کد نگاه کنی، نه فقط ظاهرش. مقدارها را عوض کن و دوباره اجرا بگیر تا دستت بفهمد برنامه چطور واکنش نشان می‌دهد. این توضیح قرار است دید پروژه‌ای بدهد، نه اینکه فقط تعریف کتابی حفظ کنی.

Unit test

تست یعنی قبل از اینکه کاربر باگ رو با فریاد گزارش کنه، خودت محترمانه پیداش کنی. برای منطق مهم، تست بنویس؛ مخصوصاً محاسبات، validation و serviceها.

مثال را با چند مقدار دیگر هم امتحان کن؛ چون برنامه‌نویسی با نگاه کردن یاد گرفته نمی‌شود، با خراب کردن و درست کردن جا می‌افتد.

تست ساده
import kotlin.test.Test
import kotlin.test.assertEquals

class CalculatorTest {
    @Test
    fun sumWorks() {
        assertEquals(5, 2 + 3)
    }
}
خروجی یا نتیجه اجرا
اگر تست پاس شود، گزارش تست سبز می‌شود و یعنی 2 + 3 واقعاً 5 است؛ دنیا هنوز سر جایش است.
نکته کاربردی: این الگو در پروژه واقعی زیاد تکرار می‌شود. از همین حالا تمیز و خوانا بنویس تا بعداً موقع دیباگ، خودت به خودت فحش ندهی. اگر خروجی با چیزی که انتظار داشتی فرق کرد، اول مقدار متغیرها و مسیر اجرا را چک کن؛ ۹۰٪ باگ‌های اول راه همین‌جا قایم شده‌اند.

Dependencyها

هر کتابخونه‌ای رو بی‌دلیل اضافه نکن. هر dependency یعنی وزن، ریسک امنیتی و دردسر آپدیت. نیاز واقعی داشتی اضافه کن، نه از روی هیجان.

مثال را با چند مقدار دیگر هم امتحان کن؛ چون برنامه‌نویسی با نگاه کردن یاد گرفته نمی‌شود، با خراب کردن و درست کردن جا می‌افتد.

نکته کاربردی: نکته حرفه‌ای این است که Kotlin معمولاً راه کوتاه‌تر دارد، ولی کوتاه‌تر همیشه بهتر نیست. اول خوانایی، بعد زرنگ‌بازی. این توضیح قرار است دید پروژه‌ای بدهد، نه اینکه فقط تعریف کتابی حفظ کنی.

نتیجه این درس 🎯

Gradle، ساختار پروژه و تست همان چیزهایی‌اند که کد تمرینی را تبدیل به پروژه قابل تحویل می‌کنند. بدون تست، اعتماد به کد بیشتر شبیه توکل کور است.

تمرین! 🧠

یک تست بنویس که تابع ضرب ۳ در ۴ را برابر ۱۲ بررسی کند.

جواب تمرین
import kotlin.test.Test
import kotlin.test.assertEquals

fun multiply(a: Int, b: Int) = a * b

class MathTest {
    @Test
    fun multiplyWorks() {
        assertEquals(12, multiply(3, 4))
    }
}
خروجی جواب
گزارش تست باید پاس شود؛ یعنی multiply(3, 4) برابر 12 است.