Bir dizinin boyutunu bulmak için birkaç farklı yolla karşılaşmış gibiyim. Bu üç yöntem arasındaki fark nedir?
my @arr = (2);
print scalar @arr; # First way to print array size
print $#arr; # Second way to print array size
my $arrSize = @arr;
print $arrSize; # Third way to print array size
Birinci ve üçüncü yollar aynıdır: bir diziyi skaler bağlamda değerlendirirler. Bunun bir dizinin boyutunu elde etmenin standart yolu olduğunu düşünüyorum.
İkinci yol aslında dizinin son indisini döndürür, bu da (genellikle) dizi boyutuyla aynı değildir.
Birincisi, ikincisi diğer ikisine eşdeğer değildir. $#array` dizinin boyutundan bir eksik olan dizinin son indisini döndürür.
Diğer ikisi hemen hemen aynıdır. Sadece skaler bağlam oluşturmak için iki farklı araç kullanıyorsunuz. Konu okunabilirlik meselesine geliyor.
Ben şahsen aşağıdakileri tercih ederim:
say 0+@array; # Represent @array as a number
Ben daha açık buluyorum
say scalar(@array); # Represent @array as a scalar
ve
my $size = @array;
say $size;
İkincisi bu şekilde tek başına oldukça net görünüyor, ancak diğer kodun bir parçası olduğunda fazladan satırın netliği ortadan kaldırdığını görüyorum. Skaler bağlamda @array
in ne yaptığını öğretmek için ve belki de $size
ı birden fazla kez kullanmak istiyorsanız yararlıdır.
Bu, diziyi boyutu olarak değerlendirildiği bir skaler bağlama zorlayarak boyutu alır:
print scalar @arr;
Bu, skaler bir değişkene atandığı için diziyi skaler bir bağlama zorlamanın başka bir yoludur:
my $arrSize = @arr;
Bu, dizideki son elemanın indeksini alır, bu nedenle aslında boyut eksi 1'dir (indekslerin 0'dan başladığını varsayarsak, bu Perl'de ayarlanabilir, ancak bunu yapmak genellikle kötü bir fikirdir):
print $#arr;
Bu sonuncusu, dizi boyutunu elde etmek için kullanmak için gerçekten iyi değildir. Sadece dizinin son elemanını almak istiyorsanız kullanışlı olabilir:
my $lastElement = $arr[$#arr];
Ayrıca, burada Stack Overflow'da görebileceğiniz gibi, bu yapı çoğu sözdizimi vurgulayıcı tarafından doğru şekilde işlenmez...