Kod biçimlendirme yönergeleri (F#)
Bu konu kodu girintileme yönergeleri F# için özetler. F# dili satır sonları ve girinti duyarlı olduğu için onu yalnızca bir okunabilirlik sorunu, estetik sorun veya kodunuzu doğru şekilde formatlamak için kodlama Standartlaştırma sorunu değil. Kodunuzu doğru onu doğru derlemek için biçimlendirmeniz gerekir.
Girinti için genel kurallar
Girinti gerekli olduğunda, boşluklar, sekmeler değil kullanmanız gerekir. En az bir alan gerekiyor. Kuruluşunuz için girinti kullanmak için boşluk sayısını belirtmek için kodlama standartları oluşturabilirsiniz; üç veya dört boşluklardan oluştuğu girinti her düzeyde girinti tipiktir. Yapılandırabileceğiniz Visual Studio seçeneklerini değiştirerek kuruluşunuzun girinti standartlarına göre seçenekleri kullanılabilir iletişim kutusu araçları menü. İçinde Text Editor düğümü genişletin F# 'ı sekmeleri. Kullanılabilir seçenekler açıklaması için bkz: Seçenekleri, metin düzenleyicisi, tüm diller sekmeleri.
Genel olarak, derleyicisi kodunuzu ayrıştırdığında, geçerli iç içe geçme düzeyi gösteren dahili bir yığın korur. Kod girintili, yeni bir düzeylik oluşturulan veya bu iç yığına itilmiş. Bir yapı sona erdiğinde düzeyi popped. Girinti düzeyi sonuna sinyal ve iç yığın pop yapmanın bir yolu olsa da, belirli simgeleri de düzeyi, gibi popped neden end anahtar sözcüğü veya kapama küme ayracı veya parantez.
İşlev tanımı, kod bir tür tanımı gibi çok satırlı bir yapı içinde try...with yapı ve yapıları, döngü gerekir girintili yapýsýnýn açýlýþ satıra göre. İlk satır girintili bir sonraki kod sütun konumunu aynı yapı oluşturur. Girinti düzeyi adlı bir İçerik. Denir, en az bir sütun sütun konumu ayarlar bir offside satır, aynı içerikte olan sonraki kod satırları için. Bir satırlık bir kod karşılaşıldığında daha az girintili bu kurulan sütun konumu, derleyici içerik sona erdi ve siz şimdi ileri düzeyde, önceki bağlamda kodlama olduğunu varsayar. Bu terim offside içinde kod satırının tetikleyen bir yapı sonuna yetecek kadar girintili değildir çünkü koşul tanımlamak için kullanılır. Başka bir deyişle, offside bir satırın solundaki offside kodudur. Doğru girintili kodda, offside kural yapıları sonuna ayırmak için yararlanın. Girinti hatalı biçimde kullanırsanız, offside bir koşul Derleyici uyarı verecek neden olabilir veya kodunuzu yanlış yorumuyla yol açabilir.
Offside satırları şu şekilde belirlenir.
Bir = belirteci ile ilişkili bir let sonra ilk belirteç sütun offside bir satırında tanıtır = işareti.
İçinde bir if...then...else ifade, sonra ilk belirteç sütun konumu then anahtar sözcük veya else anahtar sözcüğünü offside bir satır getirir.
İçinde bir try...with ifade, sonra ilk belirteç try offside bir satır getirir.
İçinde bir match ifade, sonra ilk belirteç with ve sonra her ilk belirteç -> offside satırları tanıtın.
Sonra ilk belirteç with bir tür offside bir satırı uzantısı tanıtır.
Sonra bir açma küme ayracı ya da parantez veya sonra ilk belirteç begin anahtar sözcüğü, offside bir satır getirir.
Anahtar sözcükler ilk karakteri let, if, ve module offside satırları tanıtın.
Aşağıdaki kod örnekleri girinti kurallar gösterilmektedir. Burada, uygun içeriği ile ilişkilendirmek girinti yazdırma ifadeleri kullanır. Girinti kayar her içerik popped ve önceki içeriğe döner. Bu nedenle, bir alan her yinelemenin sonunda yazdırılır; "Bitti!" offside girinti döngünün bir parçası olmadığını çünkü yalnızca bir kez yazdırılır. "Üst düzey içerik" dizesinin yazdırma işlevinin bir parçası değil. Bu nedenle, işlev çağrılmadan önce ilk olarak, statik başlatma sırasında yazdırılana.
let printList list1 =
for elem in list1 do
if elem > 0 then
printf "%d" elem
elif elem = 0 then
printf "Zero"
else
printf "(Negative number)"
printf " "
printfn "Done!"
printfn "Top-level context."
printList [-1;0;1;2;3]
Çıktı aşağıdaki gibidir.
Top-level context
(Negative number) Zero 1 2 3 Done!
Uzun satırları böldüğünüzde çizgisinin devamı aşamaya kapsayan yapı girintilenmelidir. Örneğin, fonksiyon bağımsız değişkenleri aşağıdaki kodda gösterildiği gibi işlev adının ilk karakteri aşamaya girintilenmelidir.
let myFunction1 a b = a + b
let myFunction2(a, b) = a + b
let someFunction param1 param2 =
let result = myFunction1 param1
param2
result * 100
let someOtherFunction param1 param2 =
let result = myFunction2(param1,
param2)
result * 100
Sonraki bölümde açıklandığı gibi bu kurallar için özel durumlar vardır.
Modüllerdeki girinti
Yerel Modül içindeki kod modülüne göre girintili gerekir, ancak üst düzey bir modül kodunda girintili olması gerekmez. Ad alanı öğelerinden girintili gerekmez.
Aşağıdaki kod örnekleri bu görülmektedir.
// Program1.fs
// A is a top-level module.
module A
let function1 a b = a - b * b
// Program2.fs
// A1 and A2 are local modules.
module A1 =
let function1 a b = a*a + b*b
module A2 =
let function2 a b = a*a - b*b
Daha fazla bilgi için bkz. Modüller (F#).
Temel girinti kurallar için özel durumlar
Genel kural, çok satırlı yapıları kod yapýsýný ilk satır girinti göre girintilenmelidir ve offside ilk satırı oluştuğunda yapýsýnýn sonunda belirlenir, önceki bölümde açıklandığı şekilde olduğudur. Bazı yapıları olduğunu, gibi içerikleri son olduğunda ilgili kural için özel durum try...with ifadesi, if...then...else ifade ve kullanımını and yinelemeli işlevler veya türleri, karşılıklı olarak bildirmek için sözdizimi sahip birden fazla bölümü. Sonraki bölümleri gibi girintili then ve else , bir if...then...else aynı ifade düzeyi simgesi olarak, ifade başlar, ancak içerik için bitiş tarihi gösteren yerine aynı içerik sonraki parçasını gösteren. Bu nedenle, bir if...then...else ifade aşağıdaki kod örneği gibi yazılmış.
let abs1 x =
if (x >= 0)
then
x
else
-x
Yalnızca offside kuralın istisnası uygulanır then ve else anahtar sözcükler. Bu nedenle, girintilemek için hata olmamasına rağmen then ve else kod satırları girintili yapmak, başarısız olan bir then blok bir uyarı üretir. Bu, aşağıdaki kod satırlarını gösterilmiştir.
// The following code does not produce a warning.
let abs2 x =
if (x >= 0)
then
x
else
-x
// The following code is not indented properly and produces a warning.
let abs3 x =
if (x >= 0)
then
x
else
-x
Kodu için bir else blok, ek özel bir kural geçerlidir. Önceki örnekte uyarı yalnızca kodda oluşur then değil, kod bloğu else blok. Bu sayede olabilir işlev kodu geri kalanı zorlamadan fonksiyonun başında çeşitli koşullar denetleyen kod yazmak bir else girintili bloğu,. Bu nedenle, bir uyarı üretmeden aşağıdakileri yazabilirsiniz.
let abs4 x =
if (x >= 0) then x else
-x
Önceki satıra iç işleçleri gibi olduğu gibi far gibi bir satır girintili olmayan içerik sona, kural için başka bir özel durum + ve |>. İç işleçleri ile başlayan satırları başlamak için izin verilir (1 + oplength) sütunlar içerik için bir bitiş tetikleyen olmadan normal konum önce burada oplength işleci olun karakter sayısıdır. Bu işleç ile önceki hizalamak için sonra ilk belirteç olur.
Örneğin, aşağıdaki kodda, + sembol önceki satıra küçüktür girintili iki sütun olarak izin verilir.
let function1 arg1 arg2 arg3 arg4 =
arg1 + arg2
+ arg3 + arg4
İç içe geçme düzeyi daha yüksek olur gibi genellikle girintisini artırır, ancak birkaç yapıları, derleyici girinti için daha düşük bir sütun konumu sıfırlamanıza izin verir vardır.
Sütun konumu sıfırlanmasını izin yapıları şunlardır:
Anonim işlevler gövdeleri. Aşağıdaki kodda, yazdırma ifade'den sola uzağına bir sütun konumu başlar fun anahtar sözcüğü. Ancak, satırı bir sütun sola girinti düzeyini önceki başlangıç sırasında başlamamalıdır (diğer bir deyişle, solundaki L , List).
let printListWithOffset a list1 = List.iter (fun elem -> printfn "%d" (a + elem)) list1
Parantezlerle veya bunun içine yapıları begin ve end , bir then veya else engellemek, bir if...then...else ifade, sağlanan girinti sütun konumu'den daha az if anahtar sözcüğü. Bu durum, bir kodlama stili verir bir açma parantezi veya begin bir satırın sonunda kullanılan then veya else.
Gövdeleri modülleri, sınıflar, arabirimler ve yapıları tarafından ayrılmış begin...end, {...}, class...end, veya interface...end. Bu açılış anahtar sözcük tür tanımı türü adı ile aynı satırda aşamaya açılış anahtar sözcük girintili olacak şekilde tüm gövde zorlamadan olabilen bir stil sağlar.
type IMyInterface = interface abstract Function1: int -> int end