Struct
- Dart kursu
- Uzman
- Ders 16/47
- 5 dk
Struct ile C struct öğrenirsin.
Struct
Struct, dart:ffi ile C struct'larını Dart tarafında temsil eden sınıftır. Bir Struct, extends Struct ile tanımlanır ve C tarafındaki alanları Dart tarafında @Int32() gibi annotation'larla bildirir.
Örneğin class Point extends Struct { @Int32() external int x; @Int32() external int y; }, C'deki struct Point { int x; int y; } karşılığıdır. Struct alanları external olur; bu, belleğin C tarafında yönetildiğini belirtir.
Struct bellek düzeni
Struct alanlarının sırası ve türü, C struct'ının bellek düzeniyle birebir eşleşmelidir. Aksi halde veri bozulması olur. @Int32() 4 bayt, @Double() 8 bayt, @Int8() 1 bayt kaplar.
Struct'lar Pointer<Point> ile referanslanır ve Pointer.ref ile erişilir. Struct belleği ya C tarafında ayrılır ya da calloc/malloc ile Dart tarafından ayrılır. Bellek serbest bırakılmazsa sızıntı olur.
Uygulama StructInfo sınıfı
Bir StructInfo sınıfı tanımla: final String name; final int fieldCount; StructInfo(this.name, this.fieldCount); alan ve kurucu. String describe() => '$name: $fieldCount fields'; metodu. main içinde final si = StructInfo('Point', 2); yarat; print(si.describe()); ile yazdır.
Başlangıç kodu
void main() {
// StructInfo sınıfını tanımla (name, fieldCount; describe)
// bir StructInfo yarat; describe() yazdır
}Örnek çözüm
class StructInfo {
final String name;
final int fieldCount;
StructInfo(this.name, this.fieldCount);
String describe() => '$name: $fieldCount fields';
}
void main() {
final si = StructInfo('Point', 2);
print(si.describe());
}Beklenen çıktı
Point: 2 fields
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Bir Struct nasıl tanımlanır?
- extends Struct ile Doğru cevap
- extends Class ile
- implements Struct ile
- with Struct ile
Açıklama: bir Struct extends Struct ile tanımlanır.
2 Struct parçalarını eşleştir
| Kavram | Anlamı |
|---|---|
extends Struct |
Tanım biçimi |
@Int32() |
Alan annotation |
external |
Bellek C tarafında |
Pointer<T> |
Struct referansı |
3 Struct annotation
class Point extends Struct {
@____() external int x;
}
class Point extends Struct {
@Int32() external int x;
}
Açıklama: @Int32() bir int alanı 4 bayt olarak bildirir.