Dart Tipler | Built-in Types — Yerleşik Tipler #6

MÜŞERREF SELÇUK ÖZDEMIR
5 min readDec 13, 2023

--

Dart Yerleşik Tipler — Built-in Types
Dart Yerleşik Tipler — Built-in Types

Built-in types (Yerleşik Tipler):

Dart dili aşağıdakiler için özel desteğe sahiptir:

  • Numbers (int,double)
  • Strings(String)
  • Booleans(bool)
  • Records((value1,value2))
  • Lists(Lists, ayrıca arrays)
  • Sets(Set)
  • Maps(Map)
  • Runes(Runes; genellikle API karakterleri ile değiştirilir)
  • Symbols(Symbol)
  • null değeri (Null)

Bu destek, değişmezler kullanarak nesne oluşturma yeteneğini içerir. Örneğin, this is a string’ bir string değişmezidir ve true bir bool değişmezidir.

Dart’taki her değişken bir nesneye (bir sınıfın örneği) gönderme yaptığından, değişkenleri ilklendirmek için genellikle kurucuları kullanabilirsiniz. Bazı yerleşik tiplerin kendi kurucuları vardır. Örneğin, bir harita oluşturmak için Map() yapıcısını kullanabilirsiniz.

Diğer bazı türlerin de Dart dilinde özel rolleri vardır:

  • Object: Null hariç tüm Dart sınıflarının üst sınıfıdır.
  • Enum: Tüm enumların üst sınıfı.
  • Future ve Stream: Eşzamansızlık desteğinde kullanılır.
  • Iterable: For-in döngülerinde ve senkron “generator” fonksiyonlarında kullanılır.
  • Never: Bir ifadenin değerlendirilmesinin hiçbir zaman başarıyla tamamlanamayacağını belirtir. Genellikle her zaman bir istisna atan fonksiyonlar için kullanılır.
  • dynamic: Statik denetimi devre dışı bırakmak istediğinizi belirtir. Genellikle bunun yerine Object veya Object? kullanmalısınız.
  • void: Bir değerin asla kullanılmadığını belirtir. Genellikle dönüş türü olarak kullanılır.

Numbers:

Dart numaralarının iki çeşidi vardır:

int

Platforma bağlı olarak 64 bitten büyük olmayan tamsayı değerleri. Yerel platformlarda, değerler -263 ila 263–1 arasında olabilir. Web’de, tamsayı değerleri JavaScript sayıları (kesirli kısmı olmayan 64 bit kayan nokta değerleri) olarak temsil edilir ve -253 ila 253–1 arasında olabilir.

double

IEEE 754 standardında belirtildiği gibi 64 bit (çift hassasiyetli) kayan noktalı sayılar.

Hem int hem de double, num’un alt türleridir. num türü +, -, / ve * gibi temel operatörleri içerir ve diğer metotların yanı sıra abs(), ceil() ve floor() metotlarını da burada bulabilirsiniz. (>> gibi bitsel işleçler int sınıfında tanımlanmıştır.) num ve alt türlerinde aradığınız şey yoksa, dart:math kütüphanesinde bulabilirsiniz.

Tamsayılar ondalık noktası olmayan sayılardır. İşte tamsayı değişmezlerinin tanımlanmasına ilişkin bazı örnekler:

var x = 1;
var hex = 0xDEADBEEF;

Bir sayı ondalık içeriyorsa, bu bir double’dır. Çift değişmezlerin tanımlanmasına ilişkin bazı örnekler aşağıda verilmiştir:

var y = 1.1;
var exponents = 1.42e5;

Bir değişkeni num olarak da bildirebilirsiniz. Bunu yaparsanız, değişken hem tamsayı hem de çift değerlere sahip olabilir.

num x = 1; // x hem int hem de double değerlere sahip olabilir
x += 2.5;

Tam sayı değişmezleri gerektiğinde otomatik olarak çift sayıya dönüştürülür:

double z = 1; // double z = 1.0 eşittir

Bir dizeyi sayıya veya tam tersine nasıl dönüştüreceğiniz aşağıda açıklanmıştır:

// String -> int
var one = int.parse('1');
assert(one == 1);

// String -> double
var onePointOne = double.parse('1.1');
assert(onePointOne == 1.1);

// int -> String
String oneAsString = 1.toString();
assert(oneAsString == '1');

// double -> String
String piAsString = 3.14159.toStringAsFixed(2);
assert(piAsString == '3.14');

int türü, bit alanlarındaki bayrakları işlemek ve maskelemek için yararlı olan geleneksel bitsel kaydırma (<<, >>, >>>), tümleyen (~), AND (&), OR (|) ve XOR (^) operatörlerini belirtir. Örneğin:

assert((3 << 1) == 6); // 0011 << 1 == 0110
assert((3 | 4) == 7); // 0011 | 0100 == 0111
assert((3 & 4) == 0); // 0011 & 0100 == 0000

Gerçek sayılar derleme zamanı sabitleridir. İşlenenleri sayı olarak değerlendirilen derleme zamanı sabitleri olduğu sürece, birçok aritmetik ifade de derleme zamanı sabitleridir.

const msPerSecond = 1000;
const secondsUntilRetry = 5;
const msUntilRetry = secondsUntilRetry * msPerSecond;

Strings:

Bir Dart dizesi (String nesnesi) UTF-16 kod birimlerinin bir dizisini tutar. Bir dize oluşturmak için tek veya çift tırnak kullanabilirsiniz:

var s1 = 'Single quotes work well for string literals.';
var s2 = "Double quotes work just as well.";
var s3 = 'It\'s easy to escape the string delimiter.';
var s4 = "It's even easier to use the other delimiter.";

${expression} kullanarak bir ifadenin değerini bir dizenin içine koyabilirsiniz. Eğer ifade bir tanımlayıcı ise, {}’ı atlayabilirsiniz. Bir nesneye karşılık gelen dizeyi almak için, Dart nesnenin toString() yöntemini çağırır.

var s = 'string interpolation';

assert('Dart has $s, which is very handy.' ==
'Dart has string interpolation, '
'which is very handy.');
assert('That deserves all caps. '
'${s.toUpperCase()} is very handy!' ==
'That deserves all caps. '
'STRING INTERPOLATION is very handy!');

Not: == işleci iki nesnenin eşdeğer olup olmadığını test eder. Aynı kod birimleri dizisini içeriyorlarsa iki dizge eşdeğerdir.

Bitişik dize değişmezlerini veya + operatörünü kullanarak dizeleri birleştirebilirsiniz:

var s1 = 'String '
'concatenation'
" works even over line breaks.";
assert(s1 ==
'String concatenation works even over '
'line breaks.');

var s2 = 'The + operator ' + 'works, as well.';
assert(s2 == 'The + operator works, as well.');

Çok satırlı bir dize oluşturmak için, tek veya çift tırnak işaretleriyle birlikte üçlü tırnak işareti kullanın:

var s1 = '''
You can create
multi-line strings like this one.
''';

var s2 = """This is also a
multi-line string.""";

Önüne r ekleyerek “ham” bir dize oluşturabilirsiniz:

var s = r'In a raw string, not even \n gets special treatment.';

Enterpolasyonlu herhangi bir ifade null veya sayısal, dize ya da boolean değer olarak değerlendirilen bir derleme zamanı sabiti olduğu sürece, değişmez dizeler derleme zamanı sabitleridir.

// Bunlar bir const dizesi içinde çalışır.
const aConstNum = 0;
const aConstBool = true;
const aConstString = 'a constant string';

// Bunlar const dize içinde ÇALIŞMAZ.
var aNum = 0;
var aBool = true;
var aString = 'a string';
const aConstList = [1, 2, 3];

const validConstString = '$aConstNum $aConstBool $aConstString';
// const invalidConstString = '$aNum $aBool $aString $aConstList';

Booleans:

Boolean değerleri temsil etmek için, Dart bool adında bir türe sahiptir. Sadece iki nesne bool türüne sahiptir: her ikisi de derleme zamanı sabitleri olan true ve false boolean değişmezleri.

Dart’ın tip güvenliği, if (nonbooleanValue) veya assert (nonbooleanValue) gibi kodlar kullanamayacağınız anlamına gelir. Bunun yerine, aşağıdaki gibi değerleri açıkça kontrol edin:

// Boş bir dize olup olmadığını kontrol edin.
var fullName = '';
assert(fullName.isEmpty);

// Sıfır olup olmadığını kontrol edin.
var hitPoints = 0;
assert(hitPoints <= 0);

// Boş olup olmadığını kontrol edin.
var unicorn = null;
assert(unicorn == null);

// NaN olup olmadığını kontrol edin.
var iMeantToDoThis = 0 / 0;
assert(iMeantToDoThis.isNaN);

Runes and grapheme clusters:

Dart’ta, rünler bir dizenin Unicode kod noktalarını ortaya çıkarır. Unicode (genişletilmiş) grapheme kümeleri olarak da bilinen kullanıcı tarafından algılanan karakterleri görüntülemek veya işlemek için karakter paketini kullanabilirsiniz.

Unicode, dünyadaki tüm yazı sistemlerinde kullanılan her harf, rakam ve sembol için benzersiz bir sayısal değer tanımlar. Bir Dart dizesi UTF-16 kod birimlerinin bir dizisi olduğundan, Unicode kod noktalarını bir dize içinde ifade etmek özel sözdizimi gerektirir. Bir Unicode kod noktasını ifade etmenin olağan yolu \uXXXX şeklindedir, burada XXXX 4 basamaklı onaltılık bir değerdir. Örneğin, kalp karakteri (♥) \u2665'tir. Daha fazla veya daha az 4 onaltılık basamak belirtmek için, değeri küme parantezleri içine yerleştirin. Örneğin, gülen emoji (😆) \u{1f606} şeklindedir.

Tek tek Unicode karakterleri okumanız veya yazmanız gerekiyorsa, characters paketi tarafından String üzerinde tanımlanan characters getter’ını kullanın. Döndürülen Characters nesnesi, grafem kümelerinin bir dizisi olarak dizedir. İşte characters API’sini kullanmanın bir örneği:

import 'package:characters/characters.dart';

void main() {
var hi = 'Hi 🇩🇰';
print(hi);
print('The end of the string: ${hi.substring(hi.length - 1)}');
print('The last character: ${hi.characters.last}');
}

Ortamınıza bağlı olarak çıktı şuna benzer:

dart run bin/main.dart
Hi 🇩🇰
The end of the string: ???
The last character: 🇩🇰

Symbols:

Bir Symbol nesnesi, bir Dart programında bildirilen bir operatörü veya tanımlayıcıyı temsil eder. Sembolleri hiçbir zaman kullanmanız gerekmeyebilir, ancak tanımlayıcılara adlarıyla başvuran API’ler için çok değerlidirler, çünkü küçültme işlemi tanımlayıcı adlarını değiştirir, ancak tanımlayıcı sembollerini değiştirmez.

Bir tanımlayıcının sembolünü almak için, sadece # ve ardından tanımlayıcının geldiği bir sembol değişmezi kullanın:

#radix
#bar

Sembol değişmezleri derleme zamanı sabitleridir.

Müşerref Selçuk Özdemir

--

--