تکرار

شما می‌توانید کدهای این بخش را اینجا ببینیدarrow-up-right

برای انجام کارهای تکراری در گو شما از for استفاده می‌کنید، در گو عبارات کلیدی while، do، و until وجود ندارد. تنها ابزار شما for می‌باشد که چیز خوبیست.

بیایید تابعی بنویسیم که یک حرف را پنج بار تکرار می‌کند.

چیز جدیدی در ایت زمینه وجود ندارد پس تلاش کنید خودتان بنویسید.

ابتدا تست را می‌نویسیم

package iteration

import "testing"

func TestRepeat(t *testing.T) {
	repeated := Repeat("a")
	expected := "aaaaa"

	if repeated != expected {
		t.Errorf("expected %q but got %q", expected, repeated)
	}
}

تلاش می‌کنیم تست را اجرا کنیم

./repeat_test.go:6:14: undefined: Repeat

کمترین میزان کد برای اجرای تست را می‌نویسیم که خطایی که تستمان می‌دهد را ببینیم

مراحل را به ترتیب انجام دهید شما چیز جدیدی لازم نیست بدانید که کاری کنید تست خطا بدهد.

تمام چیزی که لازم هست مقدار کافی کد هست که باعث کامپایل شدن تست بشود اما باعث پاس شدن آن نشود.

خوب نیست که می‌دانید برای مسائل پایه‌ای چگونه تست گو بنویسید؟ این یعنی شما حالا می‌توانیدهرچقدر که می‌خواهید با پروداکشن کار کنید و خیالتان راحت باشد که همه چیز درست است یا نه.

repeat_test.go:10: expected 'aaaaa' but got ''

به اندازه‌ی کافی کد بنویسید که پاس شود

سینتکس for به شدت شبیه زبان سی می‌باشد و چیز زیادی ندارد.

برخلاف زبان‌های دیگر همچون سی، جاوا، و جاوااسکریپت، برای حلقه‌ نیازی به پرانتز نیست و گذاشتن کرلی براکت {} الزامی هست. شاید برایتان سوال باشد که خط پایین یعنی چه

قبلا ما برای ساخت یک متغیر از := استفاده می‌کردیم که ابزاری برای ساختن و مقداردهی به یک متغیر بود و دو کار را با هم انجام می‌دادarrow-up-right. در خط بالا ما تنها متغیر را می‌سازیم و به آن مقدار نمی‌دهیم. از var برای ساخت تابع هم می‌توان استفاده کرد که بعدا می‌بینیم.

تست را اجرا کنید الان باید پاس شود.

روش استفاده از for به شکل مفصل اینجاarrow-up-right توضیح داده شده.

ری‌فکتور

حالا زمان ری‌فکتور و معرفی یک اپراتور جدید است، =+ .

=+ که متغیر اضافه کردن و مقداردهی است. کار آن این است که مقدار سمت راست اپراتور را با مقدار سمت چپ جمع کند و پاسخ را در متغیر سمت چپ بریزد. این با انواع دیگری همچون اعداد صحیح هم کار می‌کند.

بنچمارک

نوشتن بنچمارکarrow-up-right یکی دیگر از ویژگی‌های مهم گو هست و همچون تست نوشتن می‌ماند.

همانطور که می‌بینید بنچمارک‌نویسی مثل تست‌نویسی می‌ماند.

عبارت testing.B به شما این امکان را می‌دهد که از b.N استفاده کنید.

وقتی بنچمارک اجرا می‌شود, به تعداد b.N بار تکرار می‌شود و در آخر محاسبه می‌کند که چقدر طول کشید.

تعداد دفعات اجرای کد نباید برای شما مهم باشد, خود سرویس برای شما تعداد «مناسب» را برای شما تعیین می‌کند.

برای اجرای بنچمارک دستور زیر را بزنید

go test -bench=.

مقدار 136 ns/op یعنی کد ما به شکل میانگین ۱۳۶ نانو ثانیه طول کشیده تا تابع را اجرا کند که مقدار خوبی مجسوب می‌شود.

نکته: به شکل پیش‌فرض بنچمارک‌ یکی یکی اجرا می‌شود.

تمرین

  • تست را به گونه‌ای تغییر دهید که تست تعداد دفعات تکرار را بگیرد و سپس کد را براساس آن درست کنبد

  • یک ExampleRepeat بنویسید تا از تابع خود مستند داشته باشید

  • نگاهی به بسته‌ی stringsarrow-up-right بیندازید. توابعی که فکر می‌کنید مفید باشند را پیدا کنید و با استفاده از آن‌ها تست بنویسید. یادگیری کتابخانه‌ی استاندارد در بلند مدت بسیار مفید است.

جمع‌بندی

  • تمرین تست محور بیشتر

  • یادگیری for

  • یادگیری نوشتن بنچمارک

Last updated