Your Web News in One Place

Help Webnuz

Referal links:

Sign up for GreenGeeks web hosting
February 20, 2022 09:01 pm GMT

Flutter Linter Kurallar Blm 2: Stil Kurallar

Bir nceki blmde Linter kurallarnn ilk grubu olan hata kurallarn renmitik. Bu blmde ikinci grupta yer alan stil kurallarna deineceiz.

Stil Kurallar:

always_declare_return_types

Fonksiyon veya method dn trlerini(return type) belirtin:

Bir method veya function olutururken her zaman bir dn tr belirtin. Fonksiyonlar iin dn trleri bildirmek, analyzer'n alma zaman srasnda oluabilecek hatalar iin kodunuzu daha iyi bir ekilde kontrol etmesine izin vererek kod tabannz iyiletirmeye yardmc olur.

Yanl kullanm:

main() { }_bar() => _Foo();class _Foo {  _foo() => 42;}

Doru kullanm:

void main() { }_Foo _bar() => _Foo();class _Foo {  int _foo() => 42;}typedef predicate = bool Function(Object o);

always_put_control_body_on_new_line

Kontrol yapsn expression ifadesinden ayrn.

Bir if, for, while do'nun statement(ifade) ksmn ksa olsa bile expression ile ayn satra koymayn. Bunu yapmak, orada ilgili kodun olduunu netletirmez. Bu, zellikle erken dnler (return'ler) iin nemlidir.

Yanl kullanm:

if (notReady) return;if (notReady)  return;else print('ok')while (condition) i += 1;

Doru kullanm:

if (notReady)  return;if (notReady)  return;else  print('ok')while (condition)  i += 1;

always_put_required_named_parameters_first

Required parametrelerinizi her zaman en baa koyun:

Yanl kullanm: m({b, c, required a}) ;
Doru kullanm: m({required a, b, c}) ;

Yanl kullanm: m({b, c, @required a}) ;
Doru kullanm: m({@required a, b, c}) ;

always_specify_types

Tip aklamalarn belirtin. Mmkn olduunca var kullanmaktan kann.
Trn bilinmediini aka belirtmek istiyorsanz dynamic kullann.

Yanl kullanm:

var foo = 10;final bar = Bar();const quux = 20;

Doru kullanm:

int foo = 10;final Bar bar = Bar();String baz = 'hello';const int quux = 20;

annotate_overrides

Override edilen medhod ve field'lara aklama ekleyin.

Yanl kullanm:

class Cat {  int get lives => 9;}class Lucky extends Cat {  final int lives = 14;}

Doru kullanm:

abstract class Dog {  String get breed;  void bark() {}}class Husky extends Dog {  @override  final String breed = 'Husky';  @override  void bark() {}}

avoid_annotating_with_dynamic

Gerekli olmad durumlarda dynamic ile aklama eklemekten kann.

Dinamik, bir fonksiyonun veya methodun varsaylan dn deeri olduundan, genellikle buna aklama eklemek gerekli deildir.

Yanl kullanm:

dynamic lookUpOrDefault(String name, Map map, dynamic defaultValue) {  var value = map[name];  if (value != null) return value;  return defaultValue;}

Doru kullanm:

lookUpOrDefault(String name, Map map, defaultValue) {  var value = map[name];  if (value != null) return value;  return defaultValue;}

avoid_bool_literals_in_conditional_expressions

Koullu ifadelerde (conditional expressions) bool kullanmndan kann.

Yanl kullanm:

condition ? true : boolExpressioncondition ? false : boolExpressioncondition ? boolExpression : truecondition ? boolExpression : false

Doru kullanm:

condition || boolExpression!condition && boolExpression!condition || boolExpressioncondition && boolExpression

avoid_catches_without_on_clauses

Yan tmce olmadan catch kullanmndan kann.

n yan tmceleri olmadan catch kullanmak, kodunuzu atlamayan(thrown) (ve dolaysyla fark edilmeyecek) beklenmedik hatalarla karlamaya yatkn hale getirir.

Yanl kullanm:

try { somethingRisky()}catch(e) {  doSomething(e);}

Doru kullanm:

 somethingRisky()}catch(e) {  doSomething(e);}Y:try { somethingRisky()}on Exception catch(e) {  doSomething(e);}

avoid_catching_errors

Hatay veya onu implement eden trleri aka yakalamayn.

Hatalar, Exception'lardan farkldr, nk Hatalar alma zamanndan nce analiz edilebilir ve nlenebilir. alma zamannda bir hatay yakalamak (catch) neredeyse hibir zaman gerekmez.

Yanl kullanm:

try {  somethingRisky();} on Error catch(e) {  doSomething(e);}

Doru kullanm:

try {  somethingRisky();} on Exception catch(e) {  doSomething(e);}

avoid_classes_with_only_static_members

Yalnzca statik yeler ieren bir snf tanmlamaktan kann.

Yanl kullanm:

class DateUtils {  static DateTime mostRecent(List<DateTime> dates) {    return dates.reduce((a, b) => a.isAfter(b) ? a : b);  }}class _Favorites {  static const mammal = 'weasel';}

Doru kullanm:

DateTime mostRecent(List<DateTime> dates) {  return dates.reduce((a, b) => a.isAfter(b) ? a : b);}const _favoriteMammal = 'weasel';

avoid_double_and_int_checks

Double ve int kontrollerinden kaonn.

JS'ye derlendiinde integer deerler float olarak temsil edilir. Bu durum trn int veya double olduu yerlerde, is or is'i kullanrken baz beklenmedik davranlara yol aabilir.

Yanl kullanm:

f(num x) {  if (x is double) {    ...  } else if (x is int) {    ...  }}

Doru kullanm:

f(dynamic x) {  if (x is num) {    ...  } else {    ...  }}

avoid_equals_and_hash_code_on_mutable_classes

@immutable olarak iaretlenmemi snflarda ar ykleme operatr (overloading) == ve hashCode kullanmndan kann.

Bir snf immutable (deimez) deilse, overloading operator (ar ykleme operatr) == ve hashCode, koleksiyonlarda kullanldnda ngrlemeyen ve istenmeyen davranlara yol aabilir.

Yanl kullanm:

class B {  String key;  const B(this.key);  @override  operator ==(other) => other is B && other.key == key;  @override  int hashCode() => key.hashCode;}

Lint, @immutable notunun kullanmn kontrol eder ve snf baka trl deitirilemez olsa bile tetiklenir. Bylece:

Yanl kullanm:

class C {  final String key;  const C(this.key);  @override  operator ==(other) => other is B && other.key == key;  @override  int hashCode() => key.hashCode;}

Doru kullanm:

@immutableclass A {  final String key;  const A(this.key);  @override  operator ==(other) => other is A && other.key == key;  @override  int hashCode() => key.hashCode;}

avoid_escaping_inner_quotes

Kesme iareti kullanmanz gerekiyorsa string ifadenizi " ift trnak ierisinde yazn. Tek trnak kullanmayn.

Yanl kullanm: var s = 'It\'s not fun';
Doru kullanm: var s = "It's not fun";

avoid_field_initializers_in_const_classes

Const snflarnda field balatclarn kullanmaktan kann.

Yanl kullanm:

class A {  final a = const [];  const A();}

Doru kullanm:

class A {  get a => const [];  const A();}

avoid_final_parameters

Parametre bildirimlerinde final kullanmaktan kann.

Parametreleri final olarak bildirmek, zellikle parameter_assignments kural kullanlrken gereksiz ekilde ayrntl koda yol aabilir.

Yanl kullanm:

void goodParameter(final String label) { // LINT  print(label);}

Doru kullanm:

void badParameter(String label) { // OK  print(label);}

Yanl kullanm: void goodExpression(final int value) => print(value); // LINT

Doru kullanm:void badExpression(int value) => print(value); // OK

Yanl kullanm:void badExpression(int value) => print(value); // OK

Doru kullanm:[1, 4, 6, 8].forEach((value) => print(value + 2)); // OK

avoid_function_literals_in_foreach_calls

Function literal ile forEach kullanmndan kann.

Yanl kullanm:

people.forEach((person) {  ...});

Doru kullanm:

for (var person in people) {  ...}people.forEach(print);

avoid_init_to_null

Deikenleri null atamas yaparak balatmaktan kann.

Dart'ta deer atamas yaplmayan bir deiken otomatik olarak null olarak balatlr. Bu sebeple null atamas yapmak gereksizdir.

Yanl kullanm:

int _nextId = null;class LazyId {  int _id = null;  int get id {    if (_nextId == null) _nextId = 0;    if (_id == null) _id = _nextId++;    return _id;  }}

Doru kullanm:

int _nextId;class LazyId {  int _id;  int get id {    if (_nextId == null) _nextId = 0;    if (_id == null) _id = _nextId++;    return _id;  }}

avoid_js_rounded_ints

Yanl kullanm: int value = 9007199254740995;

Doru kullanm: BigInt value = BigInt.parse('9007199254740995');

avoid_multiple_declarations_per_line

Tek bir satrda birden ok deiken tanmlamayn.

Yanl kullanm: String? foo, bar, baz;

Doru kullanm:

String? foo;String? bar;String? baz;

avoid_null_checks_in_equality_operators

Null zel bir tr olduundan, hibir snf ona edeer olamaz. Bu nedenle, dier rnein bo olup olmadn kontrol etmek gereksizdir.

Yanl kullanm:

class Person {  final String name;  @override  operator ==(other) =>      other != null && other is Person && name == other.name;}

Doru kullanm:

class Person {  final String name;  @override  operator ==(other) => other is Person && name == other.name;}

avoid_positional_boolean_parameters

Konumsal bool parametrelerini kullanmaktan kann.

Konumsal boole parametreleri, ok belirsiz olduklar iin kt bir uygulamadr. Adlandrlm boole parametrelerinin kullanlmas, boole deerinin neyi temsil ettiini tanmlad iin ok daha okunabilirdir.

Yanl kullanm:

Task(true);Task(false);ListBox(false, true, true);Button(false);

Doru kullanm:

Task.oneShot();Task.repeating();ListBox(scroll: true, showScrollbars: true);Button(ButtonState.enabled);

avoid_private_typedef_functions

Yalnzca bir kez kullanlan zel typedef fonksiyonlarndan kann. Satr ii ilev szdizimini (inline function syntax) tercih edin.

Yanl kullanm:

typedef void _F();m(_F f);

Doru kullanm:m(void Function() f);

avoid_redundant_argument_values

Gereksiz argman deerlerinden kann.

Fonksiyon parametresinin default deerine karlk gelen argmanlar gndermekten kann.

Yanl kullanm:

void f({bool valWithDefault = true, bool? val}) {  ...}void main() {  f(valWithDefault: true);}

Doru kullanm:

void f({bool valWithDefault = true, bool? val}) {  ...}void main() {  f(valWithDefault: false);  f();}

avoid_renaming_method_parameters

Override edilen methodlarn parametrelerini yeniden adlandrmayn.

Yanl kullanm:

abstract class A {  m(a);}abstract class B extends A {  m(b);  <---}

Doru kullanm:

abstract class A {  m(a);}abstract class B extends A {  m(a);  <----}

avoid_return_types_on_setters

Setter'larda dn tr belirtmekten kann.

Setter'lar bir deer dndrmediinden, dn tr belirtmek gereksizdir.

Yanl kullanm: void set speed(int ms);

Doru kullanm: set speed(int ms);

avoid_returning_null

Dn tr bool, double, int veya num olan yelerden null dndrmekten kann.

bool, double, int ve num gibi primitive (ilkel) trleri dndren ilevlerin genellikle null olmayan deerler dndrmesi beklenir. Bu nedenle, primitive bir trn beklendii yerde null dndrmek, runtime exception'larna (alma zaman istisnalarna) yol aabilir.

Yanl kullanm:

bool getBool() => null;num getNum() => null;int getInt() => null;double getDouble() => null;

Doru kullanm:

bool getBool() => false;num getNum() => -1;int getInt() => -1;double getDouble() => -1.0;

avoid_returning_null_for_void

Void iin null dndrmekten kann.

Yanl kullanm:

void f1() {  return null;}Future<void> f2() async {  return null;}

Doru kullanm:

void f1() {  return;}Future<void> f2() async {  return;}

avoid_returning_this

this yerine cascade operator'n kullann.

Yanl kullanm:

var buffer = StringBuffer()  .write('one')  .write('two')  .write('three');

Doru kullanm:

var buffer = StringBuffer()  ..write('one')  ..write('two')  ..write('three');

avoid_setters_without_getters

Karlk gelen bir getter deeri olmadan bir setter tanmlamayn.

Yanl kullanm:

class Bad {  int l, r;  set length(int newLength) {    r = l + newLength;  }}

Doru kullanm:

class Good {  int l, r;  int get length => r - l;  set length(int newLength) {    r = l + newLength;  }}

avoid_shadowing_type_parameters

Shadowing tip parametrelerinden kann.

Yanl kullanm:

class A<T> {  void fn<T>() {}}

Doru kullanm:

class A<T> {  void fn<U>() {}}

avoid_types_on_closure_parameters

Function expression parametreleri iin aklama trlerinden kann.
Function expression parametreleri iin tr belirmek gereksizdir.

Yanl kullanm:

var names = people.map((Person person) => person.name);

Doru kullanm:

var names = people.map((person) => person.name);

avoid_unnecessary_containers

Gereksiz Contaimner kullanmndan kann.

Bir Widget esini baka hibir parametre seti olmadan Container ile sarmann hibir etkisi yoktur ve kodu gereksiz yere daha karmak hale getirir.

Yanl kullanm:

Widget buildRow() {  return Container(      child: Row(        children: <Widget>[          const MyLogo(),          const Expanded(            child: Text('...'),          ),        ],      )  );}

Doru kullanm:

Widget buildRow() {  return Row(    children: <Widget>[      const MyLogo(),      const Expanded(        child: Text('...'),      ),    ],  );}

avoid_unused_constructor_parameters

Constructor'larda kullanlmayan parametre tanmlamaktan kann.

Yanl kullanm:

class BadOne {  BadOne(int unusedParameter, [String unusedPositional]);}class BadTwo {  int c;  BadTwo(int a, int b, int x) {    c = a + b;  }}

avoid_void_async

Void dndren asenkron fonksiyonlardan kann.

Asenkron fonksiyonlarda geriye Future dndrn.

Yanl kullanm:

void f() async {}void f2() async => null;

Doru kullanm:

Future<void> f() async {}Future<void> f2() async => null;

await_only_futures

Await'e u trlerde izin verilir: Future, FutureOr, Future?, FutureOr? ve dynamic.

Yanl kullanm:

main() async {  print(await 23);}

Doru kulllanm:

main() async {  await null; // If a delay is really intended.  print(23);}

camel_case_extensions

Uzantlar UpperCamelCase kullanarak adlandrn.
Uzantlar adlandrlrken, her kelimenin ilk harfin byk yazmal (ilk kelime dahil) ve seperator (ayrc) kullanmamaldr.

Doru kullanm:

extension MyFancyList<T> on List<T> {   // ... }extension SmartIterable<T> on Iterable<T> {  // ...}

camel_case_types

Snflar ve typedef'ler isimlendirilirken her kelimenin ilk harfin (ilk kelime dahil) byk yazmal ve seperator kullanmamaldr.

Doru kullanm:

class SliderMenu {  // ...}class HttpRequest {  // ...}typedef num Adder(num x, num y);

cascade_invocations

Ayn referans zerinde art arda methodlar arrken cascading (basamakl) stili kullann.

Yanl kullanm:

SomeClass someReference = SomeClass();someReference.firstMethod();someReference.secondMethod();

Yanl kullanm:

SomeClass someReference = SomeClass();...someReference.firstMethod();someReference.aProperty = value;someReference.secondMethod();

Doru kullanm:

SomeClass someReference = SomeClass()    ..firstMethod()    ..aProperty = value    ..secondMethod();

Doru kullanm:

SomeClass someReference = SomeClass();...someReference    ..firstMethod()    ..aProperty = value    ..secondMethod();

cast_nullable_to_non_nullable

Nullable olmayan bir tre nullable bir deer atamayn.

Yanl kullanm:

class A {}class B extends A {}A? a;var v = a as B;var v = a as A;

Doru kullanm:

class A {}class B extends A {}A? a;var v = a! as B;var v = a!;

constant_identifier_names

Constant isimlerinde lowerCamelCase kullann.

Yanl kullanm:

const PI = 3.14;const kDefaultTimeout = 1000;final URL_SCHEME = RegExp('^([a-z]+):');class Dice {  static final NUMBER_GENERATOR = Random();}

Doru kullanm:

const pi = 3.14;const defaultTimeout = 1000;final urlScheme = RegExp('^([a-z]+):');class Dice {  static final numberGenerator = Random();}

deprecated_consistency

@deprecated()' Tutarl bir ekilde uygulayn :

bir snf kullanmdan kaldrlmsa (deprecated), constructor'lar da kullanmdan kaldrlmaldr.
Bir field kullanmdan kaldrlmsa, ona iaret eden constructor parametresi de kullanmdan kaldrlmaldr.
Bir field'a iaret eden bir constructor parametresi kullanmdan kaldrlmsa, field da kullanmdan kaldrlmaldr.

Yanl kullanm:

@deprecatedclass A {  A();}class B {  B({this.field});  @deprecated  Object field;}

Doru kullanm:

@deprecatedclass A {  @deprecated  A();}class B {  B({@deprecated this.field});  @deprecated  Object field;}

directives_ordering

dart: importlarn dier importlardan nce yapn.

Yanl kullanm:

import 'package:bar/bar.dart';import 'package:foo/foo.dart';import 'dart:async';  // LINTimport 'dart:html';  // LINT

Doru kullanm:

import 'dart:async';  // OKimport 'dart:html';  // OKimport 'package:bar/bar.dart';import 'package:foo/foo.dart';

package: importlarn relative importlarndan nce yapn.

Yanl kullanm:

import 'a.dart';import 'b.dart';import 'package:bar/bar.dart';  // LINTimport 'package:foo/foo.dart';  // LINT

Doru kullanm:

import 'package:bar/bar.dart';  // OKimport 'package:foo/foo.dart';  // OKimport 'a.dart';import 'b.dart';

Tm import 'lardan sonra export 'lar ayr bir blmde belirtin.

Yanl kullanm:

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

Doru kullanm:

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

Alfabetik sralamay kullann.

Yanl kullanm:

import 'package:foo/bar.dart'; // OKimport 'package:bar/bar.dart'; // LINTimport 'a/b.dart'; // OKimport 'a.dart'; // LINT

Doru kullanm:

import 'package:bar/bar.dart'; // OKimport 'package:foo/bar.dart'; // OKimport 'a.dart'; // OKimport 'a/b.dart'; // OK

do_not_use_environment

Environment tarafndan bildirilen deikenleri kullanmayn.

Derleme zamannda environment'dan tretilen deerlerin kullanlmas, gizli global durum yaratr ve uygulamalarn anlalmasn ve srdrlmesini zorlatrr.

fromEnvironment veya hasEnvironment factory constructor'larn kullanmayn.

Yanl kullanm:

const loggingLevel =  bool.hasEnvironment('logging') ? String.fromEnvironment('logging') : null;

empty_catches

Bo catch bloklarn kullanmaktan kann.

Genel olarak, bo catch bloklarn kullanmaktan kann. Bunun gerektii durumlarda exception'larn neden yakalanp bastrldn aklamak iin bir yorum yaplmaldr. Alternatif olarak, exception tanmlayc (exception identifier), onu atlamak istediimizi belirtmek iin alt izgilerle (rnein, _) adlandrlabilir.

Yanl kullanm:

try {  ...} catch(exception) { }

Doru kullanm:

try {  ...} catch(e) {  // ignored, really.}// Alternatively:try {  ...} catch(_) { }// Better still:try {  ...} catch(e) {  doSomething(e);}

empty_constructor_bodies

Bo constructor gvdeleri yerine {} kullann.

Dart'ta, bo bir gvdeye sahip bir constructor yalnzca noktal virglle sonlandrlabilir. Bu const constructor'lar iin gereklidir. Tutarllk ve ksalk iin dier constructor'lar da bunu yapmaldr.

Doru kullanm:

class Point {  int x, y;  Point(this.x, this.y);}

Yanl kullanm:

class Point {  int x, y;  Point(this.x, this.y) {}}

eol_at_end_of_file

Dosya sonlarna yeni bir satr koyun.
Bo olmayan dosyalarn sonuna tek bir yeni satr koyun.

Yanl kullanm:

a {}

Doru kullanm:

b {}    <-- newline

exhaustive_cases

Enum benzeri snflardaki tm constant'lar iin durum yan tmceleri (case clauses) tanmlayn.

Yanl kullanm:

class EnumLike {  final int i;  const EnumLike._(this.i);  static const e = EnumLike._(1);  static const f = EnumLike._(2);  static const g = EnumLike._(3);}void bad(EnumLike e) {  // Missing case.  switch(e) { // LINT    case EnumLike.e :      print('e');      break;    case EnumLike.f :      print('f');      break;  }}

Doru kullanm:

class EnumLike {  final int i;  const EnumLike._(this.i);  static const e = EnumLike._(1);  static const f = EnumLike._(2);  static const g = EnumLike._(3);}void ok(EnumLike e) {  // All cases covered.  switch(e) { // OK    case EnumLike.e :      print('e');      break;    case EnumLike.f :      print('f');      break;    case EnumLike.g :      print('g');      break;  }}

file_names
Bu makalede ayrntl olarak akland.

implementation_imports

Uygulama dosyalarn baka bir paketten import etmeyin.

lib iindeki kitaplklar herkese aktr: dier paketler bunlar import etmekte serbesttir. Ancak bir paketin kodunun ou, yalnzca paketin kendisi tarafndan import edilip kullanlmas gereken dahili uygulama kitaplklardr. Bunlar, lib'nin src adl bir alt dizinine girer. leri dzenlemenize yardmc olacaksa, orada alt dizinler oluturabilirsiniz.

Ayn paketteki dier Dart kodunun iinden lib/src'de yaayan kitaplklar ie aktarmakta zgrsnz (lib'deki dier kitaplklar, bin iindeki komut dosyalar ve testler gibi) ancak asla baka bir paketin lib/src dizininden ie aktarmamalsnz. Bu dosyalar paketin genel API'sinin bir paras deildir ve kodunuzu bozabilecek ekillerde deiebilirler.

Yanl kullanm:

// In 'road_runner'import 'package:acme/lib/src/internals.dart;

join_return_with_assignment

Mmkn olduunda return deyimini atama ile birletirin.

Yanl kullanm:

class A {  B _lazyInstance;  static B get instance {    _lazyInstance ??= B(); // LINT    return _lazyInstance;  }}

Doru kullanm:

class A {  B _lazyInstance;  static B get instance => _lazyInstance ??= B();}

leading_newlines_in_multiline_strings

ok satrl dizeleri yeni satrla balatn.

ok satrl dizeler, yeni bir satrla baladklarnda okunmas daha kolaydr (ok satrl bir dizeyi balatan yeni satr yok saylr).

Yanl kullanm:

var s1 = '''{  "a": 1,  "b": 2}''';

Doru kullanm:

var s1 = '''{  "a": 1,  "b": 2}''';var s2 = '''This one-liner multiline string is ok. It usually allows to escape both ' and " in the string.''';

library_private_types_in_public_api

Genel API'lerde zel trleri kullanmaktan kann.

Yanl kullanm:

f(_Private p) { ... }class _Private {}

Doru kullanm:

f(String s) { ... }

line_longer_than_80_chars

80 karakterden uzun satrlardan kann.

no_default_cases

Kt kullanm:

  switch (testEnum) {    case TestEnum.A:      return '123';    case TestEnum.B:      return 'abc';    default:      return null;  }

Doru kullanm:

  switch (testEnum) {    case TestEnum.A:      return '123';    case TestEnum.B:      return 'abc';  }  // Default here.  return null;

no_runtimeType_toString

runtimeType zerinde "toString()" ars yapmaktan kann.

Bir alma zaman trnde toString'i armak, performans olumsuz ynde etkileyebilecek nemsiz bir ilemdir. Bundan kanmak daha iyidir.

Yanl kullanm:

class A {  String toString() => '$runtimeType()';}

Doru kullanm:

class A {  String toString() => 'A()';}

Bu durumun geerli olmad performansn sorun olmad veya real type bilgilerinin performanstan daha nemli olduu baz istisnalara sahiptir:

assertion
throw expressions (atma ifadelerinde)
catch clauses (yakalama cmleciklerinde)
mixin declaration
abstract class (soyut snfta)

null_closures

Closure (kapanmann) beklendii bir argman olarak null iletmeyin.

Yanl kullanm: [1, 3, 5].firstWhere((e) => e.isOdd, orElse: null);

Doru kullanm: [1, 3, 5].firstWhere((e) => e.isOdd, orElse: () => null);

omit_local_variable_types

Local deikenler iin tr aklamalarn atlayn.

Local deikenler, zellikle fonksiyonlarn kk olma eiliminde olduu modern kodda ok az kapsama sahiptir. Trn atlanmas, okuyucunun dikkatini deikenin ismine ve onun balang deerine odaklar.

Yanl kullanm:

List<List<Ingredient>> possibleDesserts(Set<Ingredient> pantry) {  List<List<Ingredient>> desserts = <List<Ingredient>>[];  for (final List<Ingredient> recipe in cookbook) {    if (pantry.containsAll(recipe)) {      desserts.add(recipe);    }  }  return desserts;}

Doru kullanm:

List<List<Ingredient>> possibleDesserts(Set<Ingredient> pantry) {  var desserts = <List<Ingredient>>[];  for (final recipe in cookbook) {    if (pantry.containsAll(recipe)) {      desserts.add(recipe);    }  }  return desserts;}

Bazen karsanan tr, deikenin sahip olmasn istediiniz tr deildir. rnein, daha sonra baka trlerin deerlerini atamay dnebilirsin. Bu durumda, deikene istediiniz trde aklama ekleyin.

Widget build(BuildContext context) {  [!Widget!] result = Text('You won!');  if (applyPadding) {    result = Padding(padding: EdgeInsets.all(8.0), child: result);  }  return result;}

one_member_abstracts
Basit bir fonksiyon kullanlacaksa tek yeli bir abstract (soyut ) snf tanmlamaktan kann.

Yanl kullanm:

abstract class Predicate {  bool test(item);}

Doru kullanm: typedef Predicate = bool Function(item);

only_throw_errors

Yalnzca istisna (exception) veya Hata'y genileten (extending) snflarn rneklerini atn.

Yalnzca dart.core.Error veya dart.core.Exception' genileten snf rnekleri atn.

Hata veya istisna'y extend etmeyen rnekler atmak kt bir uygulamadr.

Yanl kullanm:

void throwString() {  throw 'hello world!'; // LINT}

Doru kullanm:

void throwArgumentError() {  Error error = ArgumentError('oh!');  throw error; // OK}

overriden_fields

Field'lar override etmeyin.

Yanl kullanm:

class Base {  Object field = 'lorem';  Object something = 'change';}class Bad1 extends Base {  @override  final field = 'ipsum'; // LINT}class Bad2 extends Base {  @override  Object something = 'done'; // LINT}

Doru kullanm:

class Base {  Object field = 'lorem';  Object something = 'change';}class Ok extends Base {  Object newField; // OK  final Object newFinal = 'ignore'; // OK}

Doru kullanm:

abstract class BaseLoggingHandler {  Base transformer;}class LogPrintHandler implements BaseLoggingHandler {  @override  Derived transformer; // OK}

package_api_docs
Tm public API'ler iin belge yorumlar salayn.

Public (genel) API'ler, paketinizin lib klasrndeki her eyden, lib/src'deki uygulama dosyalarnn karlmasndan ve bir da aktarma ynergesiyle aka da aktarlan elerin eklenmesinden oluur.

rnein lib/foo.dart:

export 'src/bar.dart' show Bar;export 'src/baz.dart';class Foo { }class _Foo { }

Tm public API yeleri, ///belge-stili yorumlarla ( doc-style comments) belgelenmelidir.

Yanl kullanm:

class Bar {  void bar();}

Doru kullanm:

/// A Foo.abstract class Foo {  /// Start foo-ing.  void start() => _start();  _start();}

References:
https://dart.dev/tools/linter-rules#style-rules


Original Link: https://dev.to/gulsenkeskin/flutter-linter-kurallari-bolum-2-stil-kurallari-3b16

Share this article:    Share on Facebook
View Full Article

Dev To

An online community for sharing and discovering great ideas, having debates, and making friends

More About this Source Visit Dev To