Tip Code
78 subscribers
13 photos
2 videos
4 links
تیپ هایی (Tip) از زبان های برنامه نویسی، فریمورک‌ها، پلتفرم‌ها، IDEs و ...

اکانت ما روی توئیتر:
Twitter.com/TipCode_ir
Download Telegram
‏تفاوت while و do while به زبان خیلی ساده
#طنز
در #Javascript از این راه برای کوتاه کردن کد بدون نوشتن صفرهای متوالی در اعدا استفاده کنید
for (let i = 0; i < 1e7; i++) { ... }

تمام این موارد true برمی گردونه
1e0 === 1;
1e7 === 10000000;
2e1 === 20;
2e2 === 200;
#سطح_متوسط
کپی گرفتن از یک جدول در #SQL
توسط دستور زیر میتوانید، ساختار یک جدول را کپی کرده و یک جدول جدید مانند جدول قبل خواهید داشت.

-- Copy structure and data
SELECT * INTO NewTbl FROM Tbl1

-- Copy structure only
SELECT * INTO Tbl1_Copy FROM Tbl1 WHERE 1=0

-- Copy structure only
SELECT TOP(0) * INTO Tbl1_Copy FROM Tbl1

#بانک_اطلاعاتی #mssql #سطح_مبتدی
در #javascript از نحوه دستوری Destructuring assignment برای ذخیره مقادیر ایندکس های موردنظر از یک آرایه در چند متغیر طی یک دستور استفاده کنید:


let colors =
['red', 'green', 'blue', 'black', 'purple'];

const [ , , thirdColor, , fifthColor] = colors;

console.log(thirdColor); // blue
console.log(fifthColor); // purple



#destructuring_assignment #سطح_متوسط
👍1
تبدیل آرایه به CSV در #PHP

function array2csv($input, $delimiter = ',', $enclosure = '"')
{
$fp = fopen('php://temp', 'r+');
fputcsv($fp, $input, $delimiter, $enclosure);
rewind($fp);
$data = fread($fp, 1048576);
fclose($fp);
return rtrim($data, "\n");
}

#بک‌اند #آرایه #CSV #سطح_پیشرفته
در #Javascript برای پیداکردن بیشترین مقدار در یک آرایه لازم نیست حتما از حلقه استفاده کنید. فقط آرایه رو با استفاده از spread operator ها به تابع ()Math.max پاس بدید:


let values = [1, 999, 2];
Math.max(...values);

می تونید اعداد دیگه رو هم برای مقایسه با مقادیر آرایه اضافه کنید

Math.max(...values, 1000, 998);


یکی از کاربردهای این ترفند می تونه تعیین مقدار پیش فرض برای متغیرها باشه. در این مثال اگر عدد مثبت پیدا نشد مقدار پیش فرض صفر داده میشه

let negatives = [-123, -456, -789];
const aValue = Math.max(...negatives, 0);


#سطح_متوسط #spread_syntax
👍1
در #CSS با این روش میتوانید هر جایی از صفحه را کاری کنید که با ماوس قابل انتخاب کردن نباشد:

.no-select {
-moz-user-select: -moz-none;
-moz-user-select: none;
-o-user-select: none;
-khtml-user-select: none;
-webkit-user-select: none;
-ms-user-select: none;
user-select: none;
}
#فرانت‌اند #سطح_متوسط
👍1
تابع ()setState در #react بصورت ناهمگام (asynchronous) اجرا می شود و باعث مشکلاتی می شود بعنوان مثال:

this.setState({count: this.state.count + 1});
this.setState({count: this.state.count + 1});
this.setState({count: this.state.count + 1});
// this.state.count === 1, not 3


برای حل این مشکل یک تابع به ()setState پاس بدید:

this.setState(prevState => ({ count: prevState.count + 1 }));

#سطح_متوسط
تبدیل اعداد فارسی به انگلیسی در #javascript

const digits = '۰۱۲۳۴۵۶۷۸۹';
digits.replace(/[\u0660-\u0669\u06f0-\u06f9]/g,
function(c) {
return c.charCodeAt(0) & 0xf;
});

#کار_با_اعداد #سطح_متوسط
1
Tip Code pinned «با سلام توضیحاتی مختصر در مورد کانال محتوای کانال @TipOverflow در مورد تیپ هایی (Tip) هستند که در طول عمر کار فنی (برنامه نویسی) یاد می گیرید و استفاده می کنید و بعضا باعث بالابردن خوانایی برنامه، کوتاه کردن کد، بهبود Performance و موضوعاتی از این قبیل…»
روشی برای پاس ندادن پارامترهای میانی در #javascript

function method (p1, p2, p3, p4) {
console.log(
`${p1} ${p2} ${p3} ${p4}`);
}

method(...['first', , , 'last']);

#spread_syntax #سطح_متوسطه
توسط این تابع در #PHP میتوان چک کرد که آدرس #ایمیل وارد شده صحیح است یا خیر؟

function isValidEmail($email)
{
// Check email format
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
return false;
}

list($user, $host) = explode("@", $email);
//check, if host is accessible
if (!checkdnsrr($host, "MX") && !checkdnsrr($host, "A")) {
return false;
}
return true;
}

نکته: این تابع DNS سایت ارائه دهنده ایمیل را چک میکند تا آدرس ایمیل fake نباشد.

#بک‌اند #سطح_پیشرفته
هر دوی این توابع در #javascript اعداد انگلیسی را به فارسی تبدیل می کنند البته با این تفاوت که تابع دوم کلیه حروف بجز اعداد را از رشته وردی حذف می کند:

تابع اول:

function toFarsiNumber(n) {
const farsiDigits =
['۰','۱','۲','۳','۴','۵','۶','۷','۸','۹'];

return n
.toString()
.replace(/\d/g, x => farsiDigits[x]);
}

تابع دوم:
function toFarsiNumber(n) {
const farsiDigits =
['۰','۱','۲','۳','۴','۵','۶','۷','۸','۹'];

return n
.toString()
.split('')
.map(x => farsiDigits[x])
.join('');
}

خروجی تابع اول:
toFarsiNumber('Two or 2 ?'); // Two or ۲ ?

خروجی تابع دوم:
toFarsiNumber('Two or 2 ?'); // ۲

#سطح_متوسط
چرا در #javascript باید یجای اپراتورهای '==' و '===' از ()Object.is استفاده کنیم؟

به خروجی این شرط ها نگاه کنید:
0 == ' ' //true
null == undefined //true
[1] == true //true

شاید برای حل این مشکل از اپراتور '===' بجای '==' استفاده می کنید اما این راه حل همه جا جواب نمیده، بعنوان مثال:
NaN === NaN //false

در حالیکه خروجی ()Object.is برای تمام موارد مقدار قابل قبول تری هست:

Object.is(0 , ' '); //false
Object.is(null, undefined); //false
Object.is([1], true); //false
Object.is(NaN, NaN); //true

#سطح_متوسط
👍1
استفاده از اپراتور + قبل از مقادیر در #javascript معادل استفاده ار تابع ()Number است:

0 === Number(null); // true

خروجی مقادیر پایین معادل خروجی تابع ()Number بجای اپراتور + است:

console.log(+'123'); // 123
console.log(+null); // 0
console.log(+true); // 1
console.log(+false); // 0
console.log(+[]); // 0
console.log(+[123]); // 123
console.log(+new Date); // 1527790306576

#سطح_مبتدی
👍1
یک مثال از کاربرد تیپ قبلی: زمانی که نیاز به مقایسه مقادیر با ورودی های یک وب فرم مثل المنت های input، select و ... هستیم.

let today = new Date();
if (+form.month.value == (today.getMonth() + 1) &&
+form.day.value == today.getDate()) {
// happy birthday 🎂
// ...
}

#سطح_مبتدی #javascript
روشی جالب برای استفاده از دستور Switch Case در #PHP

$age = 15;

switch (true){
case ($age >= 1 && $age <= 12):
echo 'Child';
break;
case ($age >= 13 && $age <= 19):
echo 'Teenager';
break;
case ($age >= 20):
echo 'Adult';
break;
}

#بک‌اند #سطح_متوسط
حذف مقادیر تکراری از آرایه بدون استفاده از حلقه ها : #javascript

روش اول:
let noDupe = (arr) => 
arr.filter((item, i) =>
arr.indexOf(item) >= i);

ٰروش دوم: استفاده از Set و #spread_operator که در ES2015 اضافه شده اند ( برای کار در IE و یا نسخه های پایین Firefox و Chrome نیاز به transpiler دارید)

const noDupe = arr => [...new Set(arr)];

خروجی هر دو روش:
noDupe([1,2,2,1,3]); //[1,2,3];


#سطح_متوسط #spread_syntax
در #php برای پردازش یک آدرس #URL نیازی به نوشتن #Regex نیست و میتوان از توابع موجود استفاده کرد.
برای بدست آوردن قسمت های مختلف یک آدرس URL میتوان از دستور زیر استفاده کرد:

$url = 'http://example.com/path1/path2?var1=1000&var2=ali';
$parsed = parse_url($url);
// Output:
// array (
// 'scheme' => 'http',
// 'host' => 'www.example.com',
// 'path' => '/path1/path2',
// 'query' => 'var1=1000&var2=ali'
// )

یا اگر فقط قسمت خاصی از URL را نیاز داشتید:
$parsed = parse_url($url, PHP_URL_HOST);
// Output: example.com

#بک‌اند #سطح_متوسط
Tip Code
در #php برای پردازش یک آدرس #URL نیازی به نوشتن #Regex نیست و میتوان از توابع موجود استفاده کرد. برای بدست آوردن قسمت های مختلف یک آدرس URL میتوان از دستور زیر استفاده کرد: $url = 'http://example.com/path1/path2?var1=1000&var2=ali'; $parsed = parse_url($url);…
همچنین برای پردازش QueryString نیز میتوان از توابع داخلی #php استفاده کرد:

$url = 'http://www.example.com/path1/path2?var1=1000&var2=ali';
$query = parse_url($url, PHP_URL_QUERY);
parse_str($query, $params);
var_dump($query);
var_dump($params);

// Output1: var1=1000&var2=ali

// Output2:
// array (
// 'var1' => '1000',
// 'var2' => 'ali',
// )

#بک‌اند #سطح_متوسط
گارانتی تکرار درست تایمرها در #javascript

از اونجایی که کلیه دستورات javascript تنها در یک thread اجرا می شوند، هیچگونه گارانتی برای اجرای دستورات ()setInterval در interval مشخص شده وجود ندارد. چرا که شاید مدت زمان اجرای دستورات داخل setInterval بیشتر از مدت زمانِ interval تعیین شده باشد و در این صورت تایمرهای بعدی به صف دستورات در javascript اضافه نخواهند شد تا کار تایمر قبلی تمام و از صف دستورات خارج شود.

همچنین ممکن است در بعضی موارد چند تایمر بلافاصله (بدون وقفه) بعد از هم اجرا شوند چرا که interval تعیین شده برای اجرای مجدد تایمر به مدت زمانِ صرف شده جهت اجرای دستورات داخل تایمر نزدیک بوده است.

برای حل این مشکل از دو دستور setTimeout و arguments.callee به شکل پایین استفاده می کنیم:

setTimeout(function(){
// code
setTimeout(arguments.callee, interval);
}, interval);

برای دوستانی که از قبل با arguments.callee آشنایی ندارند: arguments.callee یک اشاره گر (Pointer) به تابع در حال اجرا است (بعبارت دیگر اشاره گر به تابعی است که مالک arguments است).