Skip to content

Instantly share code, notes, and snippets.

@LeBaleiro
Last active October 13, 2022 16:03
Show Gist options
  • Save LeBaleiro/c1bacbf92e16f491b41a14f192619b66 to your computer and use it in GitHub Desktop.
Save LeBaleiro/c1bacbf92e16f491b41a14f192619b66 to your computer and use it in GitHub Desktop.
Clean Code - Dart Examples
// Choose meaningful names
// ❌ Bad:
void save() { }
// ✅ Good:
void saveCustomerIntoDatabase() { }
// The Length of a Name
// Variables
List<int> studentsGrades = [9, 8, 15, 21];
var gradesSum = 0;
// the index can be called just "i" because the scope is small (one line)
for (int i = 0; i < studentsGrades.length; i++) {
gradesSum = gradesSum + studentsGrades [i];
}
// Functions or Classes Name
// For Functions and Classes it's the opposite, for smaller scopes the function
// name should be big (very explanatory)
void updateUsersAvatarColor() { }
// For larger scopes the Function or Class should have a smaller name
User getUser() { }
// Choose searchable names
// ❌ Bad:
var h = 300;
// ✅ Good:
var eiffelTowerHeight = 300;
// Avoid negative names
// ❌ Bad (negative word):
if (cartIsNotEmpty) {
// ...
} else {
// ...
}
// ✅ Good (positive word):
if (cartIsFull) {
// ...
} else {
// ...
}
// Avoid negative statements
// ❌ Bad (negative if):
if (!cartIsFull) {
// ...
} else {
// ...
}
// ✅ Good (positive word):
if (cartIsFull) {
// ...
} else {
// ...
}
// Don’t use prefixes
// Choose names you can pronounce
// ❌ Bad:
var dateDMY;
// ✅ Good:
var dateDayMonthYearFormat;
// Be careful with optical illusions
// ❌ Bad:
var textFieldNameController;
var textFieldUsernameController;
// ✅ Good:
var nameTextFieldController;
var usernameTextFieldController;
// Make meaningful distinction between names
// ❌ Bad:
class Product { }
class ProductData { }
class ProductInfo { }
// ✅ Good:
class Product { } // Only one class for Product
// There are some types of comments that are acceptable, like:
// ✅ copyrights
// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
debugShowCheckedModeBanner: false,
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
// Acceptable comments
// ✅ informative comments explaining a pattern (for example regEx)
void main() {
final email = '[email protected]';
// Checks:
// if the email has at and dot signs
// if it has characters before and after the at sign
// if it has characters after the dot sign
final regExp = RegExp(r"^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$");
if (regExp.hasMatch(email)) {
print('Email válido!');
} else {
print('Email inválido!');
}
}
// Acceptable comments
// ✅ warning of consequences
void main() {
// DON'T RUN THESE TESTS UNLESS YOU HAVE SOME TIME TO KILL
test ('test 1', () {});
test ('test 2', () {});
test ('test 3', () {});
test ('test 4', () {});
// [...]
test ('test 20', () {});
test ('test 21', () {});
}
// Acceptable comments
// ✅ TODO comments, but try to not leave them when you leave the code, they are probably going to be forgotten
// TODO: Call the API to get this data

// Acceptable comments

// ✅ Public APIs

Public APIs

// Bad types of comments
// ❌ Bad (Redundant comments):
// This is the main function
void main() { }
// ❌ Bad:
// Comments to version control (use git instead)
// ❌ Bad:
// Commented code
// ❌ Bad:
// Comments about a code that is somewhere else
// But more importantly: you should only use comments when you fail to make your code express itself.
@omar6260
Copy link

Thank for sharing 🤗 @LeBaleiro

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment