Philocode – Telegram
سوال: چرا توی Typenoscript نباید از any به عنوان type استفاده کرد؟
جواب: بیکاز ما از typeها استفاده می‌کنیم تا به باگ‌های کمتری بخوریم و توسعه، راحت‌تر و مطمئن‌تر بشه. اگه قراره از any (هرچی!) استفاده کنیم، دیگه چرا از Typenoscript استفاده می‌کنیم؟! می‌ریم همون Javsacriptمون رو می‌نویسیم!
👍3🔥2
const something = undefined

if (!something) { console.log('Yep') } else { console.log('Nope') }
Anonymous Quiz
56%
Yep
44%
Nope
🔥3
console.log(typeof [1, 2, 3])
Anonymous Quiz
12%
'number'
46%
'object'
30%
'array'
12%
هیچ‌کدام
🔥3
Philocode
console.log(typeof [1, 2, 3])
پس فهمیدیم که
typeof ['chiz', 'another chiz']
میشه 'object'، اگه خواستید آرایه‌بودن رو چک کنید، یه کار ساده اینه که بفرمایید:
Array.isArray(['chiz', 'another chiz'])

اون چند نفری که گزینۀ اول رو انتخاب کردن رو هم زنده می‌خوام!
👍1
کتاب جالبی به نظر میاد... 🤔
#books
👍2
کلاس‌هایی که دپندنسی کلاس‌های دیگه هستن، باید خیلی خوب و واضح نوشته بشن. اگه مشکلی باشه، باید یه Exception بدن تا رفتارشون مارو فریب نده. مثلاً جایی که درست کار نکرده، null برنگردونید، تا کدی که ازش استفاده می‌کنه، متوجه خطا بشه. کلید اینه که خطاها باید داد بزنن، نه اینکه پنهان بشن.
👍2🤔1
امشب این کتاب رو شروع کردم.
به نظر کتاب خیلی خوبی میاد.
#books #manning
👍2🔥1
چی شد؟! 😂
😁2
Philocode
چی شد؟! 😂
این اتفاق وقتی می‌افته که توی اسم فایل view از نقطه استفاده کرده باشید:
return view('payment.callback');
لاراول نقطه رو با slash جایگزین می‌کنه و در نتیجه خیال می‌کنه که فایل شما اینجاست:
resources
/ views
/ payment
callback{.extension}

درحالیکه فایل شما اینجاست:
resources
/ views
/ payment.callback{.extension}
👍2🔥1
وقتی که یه سرویس نیاز داره کانفیگی رو از سیستم داشته باشه...
مثال: کلاس Payment می‌خواد بدونه که کدوم درگاه پرداخت، فعاله.

کانفیگ ما ممکنه متغیر سراسری (global) باشه، از دیتابیس خونده بشه یا هرچیزی. مهم نیست.

اینجا سرویس ما روی کانفیگ‌هامون وابستگی (dependency) داره، ولی نیازی نیست کل کانفیگ رو بهش پاس بدیم:
class Payment
{
private $config;

public function __construct(AppConfig $appConfig)
{
$this->config = $appConfig;
}
}

به‌جای اینجکت‌کردن کل آبجکت، فقط مقداری رو اینجکت کنید که سرویس واقعاً بهش نیاز داره. آبجکت appConfig ممکنه صدتا مقدار مختلف داخلش باشه و سرویس Payment جز یکی، نیازی به بقیه‌شون نداره.
🔥1
Philocode
امشب این کتاب رو شروع کردم. به نظر کتاب خیلی خوبی میاد. #books #manning
ماتیاس نوباک میگه که آبجکت‌ها دو نوع هستند:
+ Services
+ Other objects:
- Value objects
- Entities (models)
نوع اول باید immutable باشه، بر خلاف نوع دوم که می‌تونه دستکاری بشه.
👍1
گزینۀ درست، a و d می‌شه؛ چون مقدار Money یه مقدار حداقلیه و چیزی نیست که با setter تعیین بشه؛ یعنی هر آبجکتی از Money حتماً مبلغی داره. برای جلوگیری از حالت ناپایدار (inconsistent state) در این آبجکت، باید مقدار 100 و همچنین ارز USD رو توی constructor پاس بدیم.
👍1
این پکیج لاراولی، کد و ساختار پروژۀ شمارو تحلیل می‌کنه!

https://github.com/nunomaduro/phpinsights
#laravel
🔥2
توی لاراول اینطوری میشه برای Validation Ruleها تست نوشت:
$this->assertFalse(
(new Age())->passes('age', -6)
);

متد ()passes یه attribute و یه value می‌گیره.
#laravel
👍1🔥1
Philocode
ماتیاس نوباک میگه که آبجکت‌ها دو نوع هستند: + Services + Other objects: - Value objects - Entities (models) نوع اول باید immutable باشه، بر خلاف نوع دوم که می‌تونه دستکاری بشه.
می‌فرماید که ما کلاسی داریم که با پول سر و کار داره:
class Converter
{
public function __construct(float $amount, string $currency) { ... }
}

اما ممکنه که مقادیر غیر مجاز برای این دو پارامتر داده بشه، مثلاً برای amount عددی منفی بیاد یا اینکه برای currency مقدار "ABC" بیاد که واحد پول هیچ کشوری نیست! برای اینکه ولیدیشن رو داخل constructor انجام ندیم، اینهارو به عنوان تایپ مستقلی در میاریم:
class Converter
{
public function __construct(Amount $amount, Currency $currency) { ... }
}

خیلی خوب شد، اما مثلاً خروجی ما می‌تونه Amount باشه درحالیکه به Currency هم نیاز داریم؛ به یه عبارت دیگه، این دو مقدار به هم ارتباط دارند و نمی‌خواییم جداشون کنیم، از طرفی توی بخش‌های دیگۀ سیستم ممکنه به هرکدومشون به تنهایی نیاز پیدا کنیم، پس هر دو رو داخل تایپ جدیدی به اسم Money می‌ذاریم:
class Converter
{
public function __construct(Money $money) { ... }
}
و خود Money هم اینطوری ساخته میشه:
class Money
{
public function __construct(Amount $amount, Currency $currency) { ... }
}
👍2
I can do it this way:
http://localhost
And if I want it to be fancy I can do it this way:
http://127.0.0.1
And if I want it to be even fancier:
http://[::1] 😵‍💫😂
#HusseinNasr
🔥2