آموزش پیاده سازی لینت Lint در برنامه نویسی فلاتر
در برنامه نویسی فلاتر، lint به فرآیند بررسی کد برای یافتن خطاها و مشکلات احتمالی گفته میشود.
این فرآیند توسط یک ابزار lint انجام میشود که با کد منبع برنامه کار میکند و خطاها و مشکلات احتمالی را شناسایی میکند.
هر برنامه نویسی از اهمیت کدنویسی تمیز و نوشتن برنامه هایی با خوانایی بالا اطلاع دارد. به همین دلیل شما به عنوان یک توسعه دهنده حرفه ای در زمینه فلاتر بهتر است تا از قوانین Lint پیروی کنید.
لینت Lint چیست؟
لینت در واقع یک سری از قوانین و قواعد است که کمک میکند به ما تا هم کدهای تمیز تری بنویسیم و هم از بروز خطاهای احتمالی جلوگیری کنیم.
این کار به وسیله ابزار Lint انجام میشود که کدهای نوشته شده را آنالیز میکند و موارد لازم, خطاها, باگ ها و باقی مسائل را نمایش میدهد.
لینتینگ یک فرآیند است که در آن کد منبع برای خطاهای برنامه نویسی و همچنین خطاهای سبکی و کد بدون قالب چک میشود.
این به شناسایی برخی از اشتباهات رایج و نادری که در طول برنامه نویسی انجام میشود، مانند اشتباهات منطقی، متغیرهای غیر استفاده شده، دستورهای if-else خالی و موارد دیگر، کمک میکند.
لینتر (Lint) یک ابزار است که کد منبع را برای یافتن خطاهای برنامه نویسی، باگها، خطاهای سبکی و ساختارهای مشکوک تجزیه و تحلیل میکند. این ابزار به تأیید کیفیت کد کمک میکند.
نمونه خطاهایی که ممکن است رخ دهند
همانطور که گفته شد لینت شامل یک سری قوانین است که با رعایت کردن آنها از بروز خطاهای مختلف جلوگیری میکنیم.
یکی از آن قوانین متغیرها و کلاس های استفاده نشده است.
به کد زیر توجه کنید.
import 'package:flutter/material.dart';
import 'home.dart'; //
class MyApp extends StatelessWidget {
Widget build(context) {
return Scaffold(
appBar: AppBar(title: Text('Lint Rules Demo'),),
body: Center(
child: Text('Heey There!'),
),
);
}
}
در کد بالا در خط دوم یک امیپورت انجام داده ایم اما از آن در طول برنامه هیچ استفاده ای نکرده ایم.
همین شرایط برای متغیرهایی که تعریف میکنیم ولی از آنها استفاده نمیکنیم هم رخ میدهد.
پیاده سازی Lint در فلاتر
معمولا توصیه میشود که در یک پروژه از همان ابتدا سیستم لینت پیاده سازی شود نه در انتها.
قوانین لینت شامل سه دسته بندی مختلف میباشد که میتوانید از آنها استفاده کنید.
قوانین خطا – این قوانین مرتبط با خطاهای رایجی هستند که هنگام برنامهنویسی رخ میدهند.
قوانین سبک – این قوانین به سبک نوشتاری کد متمرکز هستند، به عنوان مثال، به دستورالعمل سبکی که توسط راهنمای سبک Dart تعیین شده است.
Pub – این قوانین مرتبط با مسائل مربوط به ابزار Pub هستند. Pub یک ابزار مدیریت پکیجها در دارت است و مرتبط با موضوعاتی مانند وابستگیها و مدیریت پکیجها در پروژههای دارت میشود.
در حال حاضر برخلاف گذشته زمانی که پروژه جدیدی در فریمورک فلاتر ایجاد میکنید فایل analysis_options.yaml هم همراه با آن ساخته میشود و نیازی به تعریف آن ندارید.
اما اگر پروژه شما قدیمی است نیاز دارید تا این فایل را حتما بسازید.
این فایل زمانی کاربرد دارد که بخواهید از قوانین مشخصی از Lint استفاده کنید.
در غیر اینصورت با این فایل میتوانید کاری نداشته باشید.
دو روش کلی برای ایجاد قوانین لینت وجود دارد.
۱: استفاده از قوانین موجود قبلی
۲: ایجاد قوانین شخصی سازی شده خودتان
استفاده از قوانین کلی لینت
برای روش اول یعنی استفاده از قوانین موجود قبلی lint پکیج های مختلفی وجود دارد که میتوانید از آنها استفاده کنید.
Dart linter و Flutter_lints از محبوب ترین آنها میباشد.
در پروژه های فلاتر پکیج Flutter_lints بصورت پیشفرض وجود دارد.
ایجاد قوانین شخصی لینت
این قوانینی هستند که هر فرد بر اساس مشخصات شخصی خود بدون استفاده از بستههای dart_lint /flutter_lint که قوانین تنظیم شده از پیش را دارند، تنظیم میکند.
هنگام تنظیم و سفارشیسازی قوانین لینتر فردی خود، شما قوانین را در فایل analysis_options.yaml به عنوان نشانداده شده در مرحله قبل خواهید کرد.
در زیر ساختار یک فایل analysis_options.yaml جدید قبل از افزودن تغییرات به آن نمایش داده شده است:
# This file configures the analyzer, which statically analyzes Dart code to
# check for errors, warnings, and lints.
#
# The issues identified by the analyzer are surfaced in the UI of Dart-enabled
# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be
# invoked from the command line by running `flutter analyze`.
# The following line activates a set of recommended lints for Flutter apps,
# packages, and plugins designed to encourage good coding practices.
include: package:flutter_lints/flutter.yaml
linter:
# The lint rules applied to this project can be customized in the
# section below to disable rules from the `package:flutter_lints/flutter.yaml`
# included above or to enable additional rules. A list of all available lints
# and their documentation is published at
# https://dart-lang.github.io/linter/lints/index.html.
#
# Instead of disabling a lint rule for the entire project in the
# section below, it can also be suppressed for a single line of code
# or a specific dart file by using the `// ignore: name_of_lint` and
# `// ignore_for_file: name_of_lint` syntax on the line or in the file
# producing the lint.
rules:
# avoid_print: false # Uncomment to disable the `avoid_print` rule
# prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule
# Additional information about this file can be found at
# https://dart.dev/guides/language/analysis-options
برخی از قوانین lint
در این قسمت بخشی از قوانین لینت را باهم بررسی میکنیم.
از دستور Print استفاده نکنید
یکی از قوانین لینت عدم استفاده از دستور پرینت در پروژه نهایی است.
برای کدهای تولیدی، در نظر داشته باشید که از یک چارچوب ورودیها استفاده کنید.
اگر از فریمورک Flutter استفاده میکنید، میتوانید از debugPrint
استفاده کنید یا تماسهای print
خود را با یک بررسی برای kDebugMode
محاصره کنید.
به روش های زیر میتوانید عمل کنید.
void f(int x) {
debugPrint('debug: $x');
...
}
یا
void f(int x) {
log('log: $x');
...
}
یا
void f(int x) {
if (kDebugMode) {
print('debug: $x');
}
...
}
استفاده از مقدار Null به جای Void
در مواردی که هیچ مقدار بازگشتی نخواهیم داشت به جای استفاده از Null از Void استفاده کنید.
Null f() {}
Future<Null> f() {}
Stream<Null> f() {}
f(Null x) {}
شکل صحیح
void f() {}
Future<void> f() {}
Stream<void> f() {}
f(void x) {}
عدم تعریف متغیرها به صورت final
تعریف پارامترها به عنوان final
ممکن است به کد بیفایده و بیش از حد طولانی منجر شود، به خصوص زمانی که از قاعده “parameter_assignments” استفاده میشود.
استفاده از final
به عنوان قاعده یکنواختی در کد میتواند کد را پر از کلمه کلیدی final
کند و کد را سختتر برای خواندن کند.
از طرف دیگر، final
معمولاً برای اطمینان از اینکه مقادیر پارامترها پس از تعیین نهایی نمیشوند و بهینهسازی کد استفاده میشود.
به عنوان یک توسعهدهنده، شما باید به دقت تصمیم بگیرید که کدام پارامترها باید final
باشند و کدام نباید.
در برخی موارد، استفاده از final
میتواند به کدتان کمک کند تا از اشتباهات برنامهنویسی جلوگیری کند و در برخی موارد دیگر میتواند کد را پیچیدهتر کند.
انتخاب مناسب برای هر پروژه و وضعیت خاصی وابسته به تصمیمات طراحی و توسعهدهنده است.
void goodParameter(final String label) { // LINT
print(label);
}
شکل صحیح
void badParameter(String label) { // OK
print(label);
}
برای مطالعه کامل قوانین لینت میتوانید به صفحه Linter rules مراجعه کنید.
دیدگاهتان را بنویسید