راهنمای جامع ترکیب ستون محاسباتی و فیلتر FILTER_
در روش جدید، به جای استفاده از متغیرهای خارج از کد، از یک استاندارد مشخص با پیشوند const FILTER استفاده میشود که باعث خوانایی، نگهداری آسانتر و عملکرد بهتر کد میگردد. مهمترین ویژگی این سیستم، یکپارچهسازی بخش "فیلتر" و "ستون محاسباتی" است؛ به این معنی که میتوان با یک قطعه کد واحد، هم محاسبات را انجام داد و نتیجه را نمایش داد و همزمان از همان کد به عنوان فیلتر برای جستجو استفاده کرد. این قابلیت زمانی کاربرد دارد که منطق نمایش یک ستون و شرط فیلتر کردن آن یکسان باشد.
لازم به ذکر است که روش تعریف جداگانه فیلتر همچنان معتبر و مفید است، خصوصاً زمانی که منطق فیلتر با منطق نمایش ستون متفاوت باشد.
سیستم قدیمی (حذف شده)
// روش قدیمی که دیگر پشتیبانی نمیشود
let condition11 = _var11 != '' ? _var11 : 1; // تعداد خرید اسپرد
let minPrice = _var12 != '' ? _var12 : 1000; // حداقل قیمت
if (price > condition11) {
// منطق معامله
}
مشکلات روش قدیمی:
- وابستگی به متغیرهای خارجی
- کد پیچیده و غیرقابل خواندن
- عدم امکان مشاهده ویژوال مقادیر
- جداسازی اجباری فیلتر از فرمول اصلی
روش جدید تعریف متغیر
1️⃣ شروع با const FILTER_
const FILTER_
2️⃣ ادامه نام با حروف بزرگ
const FILTER_MIN_RETURN // ✅ درست
const FILTER_MAX_PRICE // ✅ درست
const FILTER_spread_count // ❌ غلط
const filter_MIN_RETURN // ❌ غلط
3️⃣ اضافه کردن توضیح فارسی بعد //
const FILTER_MIN_RETURN = 5; // حداقل سود
const FILTER_MAX_PRICE = 10000; // حداکثر قیمت
مزایای سیستم جدید
ویژوال بودن
- امکان تغییر مقادیر بدون تغییر کد
- مشاهده آسان پارامترهای قابل تنظیم
نگهداری آسان
- کد تمیز و خواناتر
- عدم وابستگی به متغیرهای خارجی
عملکرد بهتر
- بهینهسازی بهتر توسط موتور جاوااسکریپت
- کاهش پیچیدگی محاسبات
مثالهای عملی
const FILTER_MIN_PROFIT = 2.5; // حداقل سود (درصد)
const FILTER_MIN_TVALUE = 10000000; // حداقل ارزش معاملات
const FILTER_OPTION_STATE = 'ITM'; // وضعیت قرارداد [][ITM][OTM][ATM]
مقایسه قبل و بعد
کد قدیمی:
let condition11 = _var11 != '' ? _var11 : 1000;
let condition12 = _var12 != '' ? _var12 : 'ITM';
if (price > condition11 && state == condition12) {
return 'نمایش داده شود';
}
کد جدید:
const FILTER_MIN_PRICE = 1000; // حداقل قیمت
const FILTER_OPTION_STATE = 'ITM'; // وضعیت قرارداد
if (price > FILTER_MIN_PRICE && state == FILTER_OPTION_STATE) {
return 'نمایش داده شود';
}
یکپارچهسازی فیلتر و فرمول
حالا دیگر نیازی نیست فیلتر را جدا از فرمول تعریف کنید! با اضافه کردن چند خط کد، هم فرمول محاسبه میشود هم فیلتر اعمال میگردد.
مثال کامل
🔸 فرمول ساده (بدون فیلتر) در قسمت ستون محاسباتی
const FILTER_TVALUE_MIN = 10000000; // حداقل ارزش معاملات
const FILTER_OPTION_STATE = ''; // وضعیت قرارداد [][ITM][OTM][ATM]
let result = '';
if (Option.TI.TValue > FILTER_TVALUE_MIN
&& (FILTER_OPTION_STATE == '' || Option.State == FILTER_OPTION_STATE)) {
result = 'ارزش معاملات: ' + Option.TI.LastDayTValue + ' ' + Option.State;
}
result;
🔸 فیلتر جداگانه (روش قدیمی) در قسمت فیلتر تعریف می شد
const FILTER_TVALUE_MIN = 10000000; // حداقل ارزش معاملات
const FILTER_OPTION_STATE = ''; // وضعیت قرارداد
// فقط true/false برمیگرداند
Option.TI.TValue > FILTER_TVALUE_MIN
&& (FILTER_OPTION_STATE == '' || Option.State == FILTER_OPTION_STATE)
🔸 🌟 فرمول یکپارچه جدید (فیلتر + فرمول) در قسمت ستون محاسباتی
const FILTER_TVALUE_MIN = 10000000; // حداقل ارزش معاملات
const FILTER_OPTION_STATE = ''; // وضعیت قرارداد [][ITM][OTM][ATM]
const FILTER_SHOW = true; // فیلتر در نمایش خروجی
const FILTER_RESULT = false; // فیلتر جستجوی اصلی
let isFilterMatched = false;
let result = '';
if ((!FILTER_SHOW && !FILTER_RESULT) ||
(Option.TI.TValue > FILTER_TVALUE_MIN
&& (FILTER_OPTION_STATE == '' || Option.State == FILTER_OPTION_STATE))) {
if (FILTER_RESULT) {
isFilterMatched = true;
}
result = 'ارزش معاملات: ' + Option.TI.LastDayTValue + ' ' + Option.State;
}
if (FILTER_RESULT === true) {
isFilterMatched;
} else {
result;
}
راهنمای تبدیل کد
| کلید | توضیح | مقدار پیشفرض |
|---|---|---|
FILTER_SHOW |
فیلتر نمایش خروجی | true |
FILTER_RESULT |
فیلتر جستجوی اصلی | false |
توضیح کدهای اضافی برای ترکیب ستون و فیلتر
بخشهایی که در کد بالا بولد شدهاند، کدهایی هستند که با اضافه کردن آنها به فرمول معمولی، میتوانید هم از آن به عنوان ستون محاسباتی و هم به عنوان فیلتر استفاده کنید.
const FILTER_SHOW = true; // کنترل نمایش خروجی
const FILTER_RESULT = false; // کنترل حالت فیلتر
این دو متغیر تعیین میکنند که کد در چه حالتی کار کند:
- اگر فقط نمایش خروجی میخواهید
- اگر فقط فیلتر میخواهید
- یا هر دو
let isFilterMatched = false;
این متغیر نتیجه فیلتر را ذخیره میکند. اگر شرایط فیلتر برقرار باشد، مقدار آن true میشود.
منطق کنترل اجرا
if ((!FILTER_SHOW && !FILTER_RESULT) ||
(Option.TI.TValue > FILTER_TVALUE_MIN && ...)) {
// محتوای اصلی
}
if (FILTER_RESULT === true) {
isFilterMatched;
} else {
result;
}
این منطق تعیین میکند که آیا کد باید اجرا شود یا نه، و در نهایت خروجی مناسب (نتیجه فیلتر یا محتوای اصلی) را برمیگرداند.