Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Tip
Baru mengembangkan perangkat lunak? Mulai dengan tutorial Memulai terlebih dahulu. Anda menjadi terbiasa dengan kelas, metode, dan perulangan di sana.
Berpengalaman dalam bahasa lain? Tutorial ini berfokus pada fitur rekaman C# yang Anda gunakan setiap hari: kesetaraan nilai, sintaks posisi, dan with ekspresi.
Dalam tutorial ini, Anda membuat aplikasi konsol yang memodelkan suhu harian dengan menggunakan record dan record struct.
Dalam tutorial ini, Anda akan belajar cara:
- Deklarasikan rekaman posisi dan struktur rekaman.
- Susun hierarki rekaman yang kecil.
- Gunakan kesetaraan dan pemformatan yang dihasilkan kompilator.
- Gunakan
withekspresi untuk mutasi yang tidak merusak.
Prerequisites
Instruksi penginstalan
Pada Windows, file konfigurasi WinGet ini untuk menginstal semua prasyarat. Jika Anda sudah memiliki sesuatu yang terinstal, WinGet akan melewati langkah tersebut.
- Unduh file dan klik dua kali untuk menjalankannya.
- Baca perjanjian lisensi, ketik y, dan pilih Masukkan saat diminta untuk menerima.
- Jika Anda mendapatkan perintah Kontrol Akun Pengguna (UAC) yang berkedip di Taskbar Anda, izinkan penginstalan dilanjutkan.
Pada platform lain, Anda perlu menginstal masing-masing komponen ini secara terpisah.
- Unduh penginstal yang direkomendasikan dari halaman unduhan .NET SDK dan klik dua kali untuk menjalankannya. Halaman unduhan mendeteksi platform Anda dan merekomendasikan penginstal terbaru untuk platform Anda.
- Unduh penginstal terbaru dari halaman beranda Visual Studio Code dan klik dua kali untuk menjalankannya. Halaman itu juga mendeteksi platform Anda dan tautan harus benar untuk sistem Anda.
- Klik tombol "Instal" pada halaman ekstensi C# DevKit. Yang membuka kode Visual Studio, dan menanyakan apakah Anda ingin menginstal atau mengaktifkan ekstensi. Pilih "instal".
Membuat aplikasi dan catatan pertama Anda
Buat folder untuk aplikasi Anda, jalankan dotnet new console, dan buka proyek yang dihasilkan.
Tambahkan file bernama DailyTemperature.cs, dan tambahkan posisi readonly record struct untuk nilai suhu:
public readonly record struct DailyTemperature(double HighTemp, double LowTemp)
{
public double Mean => (HighTemp + LowTemp) / 2.0;
}
Tambahkan file bernama Program.cs, dan buat data suhu sampel:
private static DailyTemperature[] data = [
new DailyTemperature(HighTemp: 57, LowTemp: 30),
new DailyTemperature(60, 35),
new DailyTemperature(63, 33),
new DailyTemperature(68, 29),
new DailyTemperature(72, 47),
new DailyTemperature(75, 55),
new DailyTemperature(77, 55),
new DailyTemperature(72, 58),
new DailyTemperature(70, 47),
new DailyTemperature(77, 59),
new DailyTemperature(85, 65),
new DailyTemperature(87, 65),
new DailyTemperature(85, 72),
new DailyTemperature(83, 68),
new DailyTemperature(77, 65),
new DailyTemperature(72, 58),
new DailyTemperature(77, 55),
new DailyTemperature(76, 53),
new DailyTemperature(80, 60),
new DailyTemperature(85, 66)
];
Sintaks ini memberi Anda pemodelan data ringkas dengan semantik nilai yang tidak dapat diubah.
Menambahkan perilaku ke struct rekaman
Dalam DailyTemperature.cs, struktur rekaman sudah memiliki properti komputasi Mean :
public double Mean => (HighTemp + LowTemp) / 2.0;
Struktur rekaman berfungsi dengan baik di sini karena setiap nilai berukuran kecil dan bersifat mandiri.
Membuat jenis catatan untuk perhitungan hari derajat
Note
Hari derajat pemanasan dan hari derajat pendinginan mengukur seberapa besar suhu rata-rata harian menyimpang dari suhu dasar (biasanya 65°F / 18°C). Derajat-hari pemanasan terakumulasi pada hari-hari dingin ketika rata-rata berada di bawah patokan, sementara derajat-hari pendinginan terakumulasi pada hari-hari hangat ketika rata-rata berada di atas patokan. Perhitungan ini membantu memperkirakan konsumsi energi untuk pemanasan atau pendinginan bangunan, membuatnya berguna untuk perusahaan utilitas, manajer bangunan, dan analisis iklim.
Buat file bernama DegreeDays.cs dengan hierarki untuk penghitungan hari derajat pemanasan dan pendinginan:
public abstract record DegreeDays(double BaseTemperature, IEnumerable<DailyTemperature> TempRecords);
public sealed record HeatingDegreeDays(double BaseTemperature, IEnumerable<DailyTemperature> TempRecords)
: DegreeDays(BaseTemperature, TempRecords)
{
public double DegreeDays => TempRecords.Where(s => s.Mean < BaseTemperature).Sum(s => BaseTemperature - s.Mean);
}
public sealed record CoolingDegreeDays(double BaseTemperature, IEnumerable<DailyTemperature> TempRecords)
: DegreeDays(BaseTemperature, TempRecords)
{
public double DegreeDays => TempRecords.Where(s => s.Mean > BaseTemperature).Sum(s => s.Mean - BaseTemperature);
}
Sekarang hitung total dari metode Main Anda di Program.cs.
var heatingDegreeDays = new HeatingDegreeDays(65, data);
Console.WriteLine(heatingDegreeDays);
var coolingDegreeDays = new CoolingDegreeDays(65, data);
Console.WriteLine(coolingDegreeDays);
Output yang dihasilkan ToString berguna untuk diagnostik cepat saat Anda melakukan iterasi.
Menimpa PrintMembers untuk menyesuaikan output
Ketika output default menyertakan terlalu banyak kebisingan, ambil alih PrintMembers dalam rekaman dasar:
protected virtual bool PrintMembers(StringBuilder stringBuilder)
{
stringBuilder.Append($"BaseTemperature = {BaseTemperature}");
return true;
}
Penimpaan menjaga output tetap berfokus pada informasi yang Anda butuhkan.
Gunakan dengan ekspresi untuk mutasi nondestruktif
Gunakan with untuk membuat salinan yang dimodifikasi tanpa mengubah rekaman asli:
// Growing degree days measure warming to determine plant growing rates
var growingDegreeDays = coolingDegreeDays with { BaseTemperature = 41 };
Console.WriteLine(growingDegreeDays);
Perluas ide tersebut untuk menghitung total bergulir dari irisan data input Anda:
// showing moving accumulation of 5 days using range syntax
List<CoolingDegreeDays> movingAccumulation = new();
int rangeSize = (data.Length > 5) ? 5 : data.Length;
for (int start = 0; start < data.Length - rangeSize; start++)
{
var fiveDayTotal = growingDegreeDays with { TempRecords = data[start..(start + rangeSize)] };
movingAccumulation.Add(fiveDayTotal);
}
Console.WriteLine();
Console.WriteLine("Total degree days in the last five days");
foreach(var item in movingAccumulation)
{
Console.WriteLine(item);
}
Pendekatan ini berguna ketika Anda memerlukan transformasi saat Anda mempertahankan nilai asli.
Langkah berikutnya
- Tinjau jenis catatan C# untuk panduan yang lebih mendalam.
- Lanjutkan dengan C# berorientasi Objek untuk pola desain yang lebih luas.
- Jelajahi Jenis konversi untuk menggabungkan rekaman dengan pola konversi yang aman.