DEV Community

Cover image for Flutter Temiz Kod Prensipleri: Bölüm 1 💫 🌌 ✨
Gülsen Keskin
Gülsen Keskin

Posted on • Updated on

Flutter Temiz Kod Prensipleri: Bölüm 1 💫 🌌 ✨

It doesn’t require an awful lot of skill to write a program that a computer understands.
The skill is writing programs that human understand.
— Robert C. Martin

Bölüm 1 : İsimlendirme Kuralları ✨

UpperCamelCase kullanılması gereken durumlar:

Class isimleri, enum tipleri, typedef'ler ve tip parametreleri UpperCamelCase olmalıdır.

örnek:

class SliderMenu { ... }

class HttpRequest { ... }

typedef Predicate<T> = bool Function(T value);
Enter fullscreen mode Exit fullscreen mode
class Foo {
  const Foo([Object? arg]);
}

@Foo(anArg)
class A { ... }

@Foo()
class B { ... }
Enter fullscreen mode Exit fullscreen mode

Extension (uzantı) adlarında da UpperCamelCase kullanılır.

extension MyFancyList<T> on List<T> { ... }
extension SmartIterable<T> on Iterable<T> { ... }
Enter fullscreen mode Exit fullscreen mode

lowercase_with_underscores kullanılması gereken durumlar:

Kütüphane, paket, dizin ve kaynak dosyaları isimlendirirken lowercase_with_underscores biçimini kullanın.

Bazı dosya isimleri büyük/küçük harf duyarlı olmadığı için dosya adlarının tamamının küçük harf olması gerekir. Kelimeleri ayırmak içinse _ alt çizgi kullanabilirsiniz.

library peg_parser.source_scanner;

import 'file_system.dart';
import 'slider_menu.dart';
Enter fullscreen mode Exit fullscreen mode

Kitaplık öneki belirtirken de lowercase_with_underscores kullanın.

import 'dart:math' as math;
import 'package:angular_components/angular_components' as angular_components;
import 'package:js/js.dart' as js;
Enter fullscreen mode Exit fullscreen mode

lowerCamelCase kullanılması gereken durumlar:

Class üyeleri, üst düzey tanımlar, değişkenler, parametreler ve adlandırılmış parametreler isimlendirilirken ilk kelime dışındaki her kelimenin ilk harfini büyük olmalıdır.

var count = 3;

HttpRequest httpRequest;

void align(bool clearItems) {
  // ...
}
Enter fullscreen mode Exit fullscreen mode

Costant'larınızı isimlendirirken de lowerCamelCase kullanın.

const pi = 3.14;
const defaultTimeout = 1000;
final urlScheme = RegExp('^([a-z]+):');

class Dice {
  static final numberGenerator = Random();
}
Enter fullscreen mode Exit fullscreen mode

SCREAMING_CAPS:

Zaten kullanan bir dosyaya veya kitaplığa kod eklerken SCREAMING_CAPS biçimlendirmesini kullanın.

İki harften uzun olan kısaltmaları büyük harfle yazın.

class HttpConnection {}
class DBIOPort {}
class TVVcr {}
class MrRogers {}

var httpRequest = ...
var uiHandler = ...
var userId = ...
Id id;
Enter fullscreen mode Exit fullscreen mode

Kullanılmayan geri arama parametreleri için , _, vb. kullanmayı tercih edin.

Bu size bir değerin iletildiği ancak onu kullanmanız gerekmediği geri aramalarda (callbacks) yaygın bir kullanımdır.
Bu durumda, kullanılmayan parametreyi _ olarak adlandırmak iyi bir yoldur.
Fonksiyonda birden fazla kullanılmayan parametre varsa, ad çakışmalarını önlemek için ek alt çizgi kullanın: _, __, vb.

futureOfVoid.then((_) {
  print('Operation complete.');
});
Enter fullscreen mode Exit fullscreen mode

Bir diğer örnek:

[1,2,3].map((_) => print('Hello'));

Not: Bu yönerge yalnızca local ve anonim fonksiyonlar için geçerlidir.

Üst düzey fonksiyonlar ve method bildirimleri (method declarations) bu bağlama sahip değildir, bu nedenle parametreleri kullanılmasa bile, her bir parametrenin ne için olduğu açık bir şekilde belirtilmelidir.

Private olmayan tanımlayıcıları adlandırıken ismin başında alt çizgiyi kullanmayın:

Dart, üyeleri ve üst düzey bildirimleri private olarak işaretlemek için bir tanımlayıcıda (identifier) önde gelen bir alt çizgi kullanır.

Kullanıcılar böylece bir _ alt çizgi gördüklerinde bunun bir private elaman olduğunu bilirler.

Local değişkenler, parametreler, local fonksiyonlar veya kitaplık önekleri için private kavramı yoktur. Bunlardan birinin alt çizgi ile başlayan bir adı olduğunda, okuyucuya kafa karıştırıcı bir sinyal gönderir. Bunu önlemek için, bu isimlerin başında alt çizgi kullanmayın.

Yanlış kullanım: import 'dart:core' as _core;

Doğru kullanım: import 'dart:core' as core;

Yanlış kullanım:

void print(String _name) {
  var _size = _name.length;
  ...
}
Enter fullscreen mode Exit fullscreen mode

Doğru kullanım:

void print(String name) {
  var size = name.length;
  ...
}
Enter fullscreen mode Exit fullscreen mode

Ön ek harfleri kullanmayın

Hungarian notasyonu ve diğer şemalar, derleyicinin kodunuzu anlamanıza yardımcı olmak için fazla bir şey yapmadığı BCPL zamanında ortaya çıkmıştır. Dart size bildirimlerinizin türünü, kapsamını, değişebilirliğini ve diğer özelliklerini söyleyebileceğinden, bu özellikleri tanımlayıcı adlarında belirtmenize gerek yoktur.

kullanın: defaultTimeout

kullanmayın: kDefaultTimeout

Her bölüm'ü (section) boş bir satırla ayırın.

paket importlarını relative importlarından önce yapın

Yanlış kullanım:

import 'package:bar/bar.dart';
import 'package:foo/foo.dart';

import 'dart:async';  // LINT
import 'dart:html';  // LINT
Enter fullscreen mode Exit fullscreen mode

Yanlış kullanım:

import 'dart:html';  // OK
import 'package:bar/bar.dart';

import 'dart:async';  // LINT
import 'package:foo/foo.dart';
Enter fullscreen mode Exit fullscreen mode

Doğru kullanım:

import 'dart:async';  // OK
import 'dart:html';  // OK

import 'package:bar/bar.dart';
import 'package:foo/foo.dart';
Enter fullscreen mode Exit fullscreen mode

Export'ları tüm import işlemlerinizden sonra ayrı bir bölümde belirtin (bir satır boşluk bırakarak)

Yanlış kullanım:

import 'src/error.dart';
export 'src/error.dart'; // LINT
import 'src/string_source.dart';
Enter fullscreen mode Exit fullscreen mode

Doğru kullanım:

import 'src/error.dart';
import 'src/string_source.dart';

export 'src/error.dart'; // OK
Enter fullscreen mode Exit fullscreen mode

Bölümleri alfabetik olarak sıralayın

Yanlış kullanım:

import 'package:foo/foo.dart';
import 'package:bar/bar.dart';

import 'foo/foo.dart';
import 'foo.dart';
Enter fullscreen mode Exit fullscreen mode

Doğru kullanım:

import 'package:bar/bar.dart';
import 'package:foo/foo.dart';

import 'foo.dart';
import 'foo/foo.dart';
Enter fullscreen mode Exit fullscreen mode

Dart format kullanarak kodunuzu biçimlendirin

Tüm akış kontrol ifadeleri için küme parantezleri kullanın.

Doğru kullanım:

if (isWeekDay) {
  print('Bike to work!');
} else {
  print('Go dancing or read a book!');
}
Enter fullscreen mode Exit fullscreen mode

Tek satırlık sorgularda isterseniz küme parantezlerini atlayabilirsiniz.

if (arg == null) return defaultValue;

References:
https://dart.dev/tools/linter-rules#directives_ordering
https://dart.dev/guides/language/effective-dart/style
https://medium.com/upday-devs/basics-of-clean-code-flutter-project-ui-part-b7fa93c31775

Discussion (0)