Eğitim: Öğrenirken kod oluşturmak için üst düzey deyimleri kullanarak fikirleri keşfetme
Bu öğreticide şunların nasıl yapılacağını öğreneceksiniz:
- Üst düzey deyimleri kullanımınızı yöneten kuralları öğrenin.
- Algoritmaları keşfetmek için üst düzey deyimleri kullanın.
- Keşifleri yeniden kullanılabilir bileşenler halinde yeniden düzenleme.
Önkoşullar
Makinenizi .NET 6 veya sonraki bir sürümü çalıştıracak şekilde ayarlamanız gerekir. C# derleyicisi, Visual Studio 2022 veya .NET SDKile başlayarak kullanılabilir.
Bu öğreticide, Visual Studio veya .NET CLI dahil olmak üzere C# ve .NET hakkında bilgi sahibi olduğunuz varsayılır.
Keşfetmeye başlayın
Üst düzey deyimler, programınızın giriş noktasını bir sınıftaki statik bir yönteme yerleştirerek gereken ek seremoniyi önlemenizi sağlar. Yeni konsol uygulaması için tipik başlangıç noktası aşağıdaki koda benzer:
using System;
namespace Application
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
}
}
}
Yukarıdaki kod, dotnet new console
komutunu çalıştırmanın ve yeni bir konsol uygulaması oluşturmanın sonucudur. Bu 11 satır yalnızca bir yürütülebilir kod satırı içerir. Yeni üst düzey deyimler özelliğiyle bu programı basitleştirebilirsiniz. Bu, bu programdaki iki satır dışında tüm satırları kaldırmanızı sağlar:
// See https://aka.ms/new-console-template for more information
Console.WriteLine("Hello, World!");
Önemli
.NET 6 için C# şablonları
.NET 6 SDK'sı, aşağıdaki SDK'ları kullanan projeler için bir dizi örtükglobal using
yönergesi de ekler:
- Microsoft.NET.Sdk
- Microsoft.NET.Sdk.Web
- Microsoft.NET.Sdk.Worker
Bu örtük global using
yönergeleri, proje türü için en yaygın ad alanlarını içerir.
Daha fazla bilgi için Örtük Kullanım Yönergeleri makalesine bakın.
Bu özellik, yeni fikirleri keşfetmenizi kolaylaştırır. Betik senaryoları için veya araştırmak için üst düzey deyimleri kullanabilirsiniz. Temel bilgileri çalışmaya başladıktan sonra kodu yeniden düzenlemeye başlayabilir ve oluşturduğunuz yeniden kullanılabilir bileşenler için yöntemler, sınıflar veya diğer derlemeler oluşturabilirsiniz. Üst düzey deyimler hızlı denemelere ve başlangıç öğreticilerine olanak tanır. Ayrıca denemelerden tam programlara kadar sorunsuz bir yol sağlarlar.
Üst düzey deyimler, dosyada göründükleri sırayla yürütülür. Üst düzey deyimler uygulamanızdaki yalnızca bir kaynak dosyada kullanılabilir. Derleyici, bunları birden fazla dosyada kullanırsanız bir hata oluşturur.
Sihirli bir .NET yanıt makinesi oluşturma
Bu öğretici için rastgele bir yanıtla "evet" veya "hayır" sorularını yanıtlayan bir konsol uygulaması oluşturalım. İşlevselliği adım adım oluşturursunuz. Tipik bir programın yapısı için gereken tören yerine görevinize odaklanabilirsiniz. Ardından, işlevden memnun olduğunuzda uygulamayı uygun gördüğünüz şekilde yeniden düzenleyebilirsiniz.
Soruyu konsola geri yazmak iyi bir başlangıç noktasıdır. Başlangıç olarak aşağıdaki kodu yazabilirsiniz:
Console.WriteLine(args);
bir args
değişkeni bildirmezsiniz. Üst düzey deyimlerinizi içeren tek kaynak dosya için, derleyici komut satırı argümanlarını belirtmek amacıyla args
ifadesini tanır. Args türü, tüm C# programlarında olduğu gibi bir string[]
olur.
Aşağıdaki dotnet run
komutunu çalıştırarak kodunuzu test edebilirsiniz:
dotnet run -- Should I use top level statements in all my programs?
Komut satırındaki --
sonrasında yer alan bağımsız değişkenler programa iletilir. konsola yazdırılan args
değişkeninin türünü görebilirsiniz:
System.String[]
Soruyu konsola yazmak için bağımsız değişkenleri numaralandırıp bir boşlukla ayırmanız gerekir.
WriteLine
çağrısını aşağıdaki kodla değiştirin:
Console.WriteLine();
foreach(var s in args)
{
Console.Write(s);
Console.Write(' ');
}
Console.WriteLine();
Şimdi, programı çalıştırdığınızda, soruyu doğru bir parametre dizisi olarak görüntüler.
Rastgele bir yanıt ver
Soruyu yankıladıktan sonra, rastgele yanıtı oluşturmak için kodu ekleyebilirsiniz. Başlangıç olarak olası yanıtlardan oluşan bir dizi ekleyin:
string[] answers =
[
"It is certain.", "Reply hazy, try again.", "Don’t count on it.",
"It is decidedly so.", "Ask again later.", "My reply is no.",
"Without a doubt.", "Better not tell you now.", "My sources say no.",
"Yes – definitely.", "Cannot predict now.", "Outlook not so good.",
"You may rely on it.", "Concentrate and ask again.", "Very doubtful.",
"As I see it, yes.",
"Most likely.",
"Outlook good.",
"Yes.",
"Signs point to yes.",
];
Bu dizide 10 yanıt doğrulayıcı, beşi yaygın olmayan ve beşi negatiftir. Ardından, diziden rastgele bir yanıt oluşturmak ve görüntülemek için aşağıdaki kodu ekleyin:
var index = new Random().Next(answers.Length - 1);
Console.WriteLine(answers[index]);
Sonuçları görmek için uygulamayı yeniden çalıştırabilirsiniz. Aşağıdaki çıkışa benzer bir şey görmeniz gerekir:
dotnet run -- Should I use top level statements in all my programs?
Should I use top level statements in all my programs?
Better not tell you now.
Yanıt oluşturma kodu, üst düzey deyimlerinizde bir değişken bildirimi içerir. Derleyici, derleyici tarafından oluşturulan Main
yönteminde bu bildirimi içerir. Bu değişken bildirimleri yerel değişkenler olduğundan, static
değiştiricisini ekleyemezsiniz.
Bu kod soruları yanıtlar, ancak bir özellik daha ekleyelim. Soru uygulamanızın yanıt hakkında düşünme simülasyonu oluşturmasını istiyorsunuz. Bunu yapmak için biraz ASCII animasyonu ekleyebilir ve çalışırken işlemi duraklatabilirsiniz. Soruyu yankılayan satırın arkasına aşağıdaki kodu ekleyin:
for (int i = 0; i < 20; i++)
{
Console.Write("| -");
await Task.Delay(50);
Console.Write("\b\b\b");
Console.Write("/ \\");
await Task.Delay(50);
Console.Write("\b\b\b");
Console.Write("- |");
await Task.Delay(50);
Console.Write("\b\b\b");
Console.Write("\\ /");
await Task.Delay(50);
Console.Write("\b\b\b");
}
Console.WriteLine();
Ayrıca, kaynak dosyanın en üstüne bir using
yönergesi eklemeniz gerekir:
using System.Threading.Tasks;
using
yönergeleri, dosyadaki diğer deyimlerden önce olmalıdır. Aksi takdirde, bu bir derleyici hatasıdır. Programı yeniden çalıştırabilir ve animasyonu görebilirsiniz. Bu daha iyi bir deneyim sağlar. Zevkinize uygun gecikme süresiyle denemeler yapın.
Yukarıdaki kod, boşlukla ayrılmış bir dizi dönen çizgi oluşturur.
await
anahtar kelimesini eklemek, derleyiciye async
değiştiricisine sahip bir yöntem olarak program giriş noktasını oluşturmasını ve System.Threading.Tasks.Taskdöndürmesini talimat verir. Bu program bir değer döndürmediğinden, program giriş noktası bir Task
döndürür. Programınız bir tamsayı değeri döndürürse, en üst düzey deyimlerinizin sonuna bir return deyimi eklersiniz. Bu return deyimi, döndürülecek tamsayı değerini belirtir. Üst düzey deyimleriniz bir await
ifadesi içeriyorsa, dönüş türü System.Threading.Tasks.Task<TResult>olur.
Gelecek için yeniden düzenleme
Programınız aşağıdaki kod gibi görünmelidir:
Console.WriteLine();
foreach(var s in args)
{
Console.Write(s);
Console.Write(' ');
}
Console.WriteLine();
for (int i = 0; i < 20; i++)
{
Console.Write("| -");
await Task.Delay(50);
Console.Write("\b\b\b");
Console.Write("/ \\");
await Task.Delay(50);
Console.Write("\b\b\b");
Console.Write("- |");
await Task.Delay(50);
Console.Write("\b\b\b");
Console.Write("\\ /");
await Task.Delay(50);
Console.Write("\b\b\b");
}
Console.WriteLine();
string[] answers =
[
"It is certain.", "Reply hazy, try again.", "Don't count on it.",
"It is decidedly so.", "Ask again later.", "My reply is no.",
"Without a doubt.", "Better not tell you now.", "My sources say no.",
"Yes – definitely.", "Cannot predict now.", "Outlook not so good.",
"You may rely on it.", "Concentrate and ask again.", "Very doubtful.",
"As I see it, yes.",
"Most likely.",
"Outlook good.",
"Yes.",
"Signs point to yes.",
];
var index = new Random().Next(answers.Length - 1);
Console.WriteLine(answers[index]);
Yukarıdaki kod makuldür. İşe yarıyor. Ama yeniden kullanılamaz. Artık uygulamayı çalıştırdığınıza göre, artık yeniden kullanılabilir parçaları çekmenin zamanı geldi.
Adaylardan biri, bekleyen animasyonu görüntüleyen koddur. Bu kod parçacığı bir yönteme dönüşebilir:
Dosyanızda yerel bir işlev oluşturarak başlayabilirsiniz. Geçerli animasyonu aşağıdaki kodla değiştirin:
await ShowConsoleAnimation();
static async Task ShowConsoleAnimation()
{
for (int i = 0; i < 20; i++)
{
Console.Write("| -");
await Task.Delay(50);
Console.Write("\b\b\b");
Console.Write("/ \\");
await Task.Delay(50);
Console.Write("\b\b\b");
Console.Write("- |");
await Task.Delay(50);
Console.Write("\b\b\b");
Console.Write("\\ /");
await Task.Delay(50);
Console.Write("\b\b\b");
}
Console.WriteLine();
}
Yukarıdaki kod, ana yönteminizin içinde yerel bir işlev oluşturur. Bu kod hala yeniden kullanılamıyor. Bu nedenle, o kodu bir sınıfa aktarın. utilities.cs adlı yeni bir dosya oluşturun ve aşağıdaki kodu ekleyin:
namespace MyNamespace
{
public static class Utilities
{
public static async Task ShowConsoleAnimation()
{
for (int i = 0; i < 20; i++)
{
Console.Write("| -");
await Task.Delay(50);
Console.Write("\b\b\b");
Console.Write("/ \\");
await Task.Delay(50);
Console.Write("\b\b\b");
Console.Write("- |");
await Task.Delay(50);
Console.Write("\b\b\b");
Console.Write("\\ /");
await Task.Delay(50);
Console.Write("\b\b\b");
}
Console.WriteLine();
}
}
}
Üst düzey deyimleri olan bir dosya, en üst düzey deyimlerden sonra dosyanın sonunda ad alanları ve türler de içerebilir. Ancak bu öğreticide animasyon yöntemini daha kolay yeniden kullanılabilir hale getirmek için ayrı bir dosyaya yerleştirmiş olursunuz.
Son olarak, animations
dizisinde tanımlanan animasyon öğeleri kümesinde gezinmek için foreach
döngüsünü kullanarak, bazı kopyaları kaldırıp animasyon kodunu temizleyebilirsiniz.
Yeniden düzenlemeden sonra tam ShowConsoleAnimation
yöntemi aşağıdaki koda benzer görünmelidir:
public static async Task ShowConsoleAnimation()
{
string[] animations = ["| -", "/ \\", "- |", "\\ /"];
for (int i = 0; i < 20; i++)
{
foreach (string s in animations)
{
Console.Write(s);
await Task.Delay(50);
Console.Write("\b\b\b");
}
}
Console.WriteLine();
}
Artık eksiksiz bir uygulamanız var ve yeniden kullanılabilir bölümleri daha sonra kullanmak üzere yeniden düzenlediniz. Ana programın tamamlanmış sürümünde gösterildiği gibi üst düzey deyimlerinizden yeni yardımcı program yöntemini çağırabilirsiniz:
using MyNamespace;
Console.WriteLine();
foreach(var s in args)
{
Console.Write(s);
Console.Write(' ');
}
Console.WriteLine();
await Utilities.ShowConsoleAnimation();
string[] answers =
[
"It is certain.", "Reply hazy, try again.", "Don’t count on it.",
"It is decidedly so.", "Ask again later.", "My reply is no.",
"Without a doubt.", "Better not tell you now.", "My sources say no.",
"Yes – definitely.", "Cannot predict now.", "Outlook not so good.",
"You may rely on it.", "Concentrate and ask again.", "Very doubtful.",
"As I see it, yes.",
"Most likely.",
"Outlook good.",
"Yes.",
"Signs point to yes.",
];
var index = new Random().Next(answers.Length - 1);
Console.WriteLine(answers[index]);
Yukarıdaki örnek Utilities.ShowConsoleAnimation
aramasını ekler ve başka bir using
komutu ekler.
Özet
Üst düzey deyimler, yeni algoritmaları keşfetmek için basit programlar oluşturmayı kolaylaştırır. Farklı kod parçacıkları deneyerek algoritmalarla denemeler yapabilirsiniz. Neyin işe yaradığını öğrendikte kodu daha sürdürülebilir olacak şekilde yeniden düzenleyebilirsiniz.
Üst düzey deyimler, konsol uygulamalarını temel alan programları basitleştirir. Bu uygulamalar Azure işlevlerini, GitHub eylemlerini ve diğer küçük yardımcı programları içerir. Daha fazla bilgi için bkz. Üst düzey deyimleri (C# Programlama Kılavuzu).