تفاوت دو تابع substr و substring

سلام سلام ما هپی لرن هستیم و شما دارید ششمین پست اموزشیمون رو از سایت ویرگول می‌خونید. در هپی لرن درباره‌ی موضوعات و مهارت هایی صحبت می‌کنیم که فارغ از این که شما با چه زبان برنامه نویسی دارید کد می‌زنید و یا چند ساله که دارید در حوزه برنامه نویسی فعالیت می‌کنید، میتونه بهتون کمک کنه تا در مسیر درست قرار بگیرید و سطح رضایتتون از کد زنی بالا ببرید. شما میتونید مقالات ما رو شنبه‌ها و جمعه ها از همین صفحه دنبال کنید.
در جلسه سوم با این موضوع اشنا شدیم که اگه بخواهیم قسمتی از یک ارایه را جدا کنیم باید از توابع slice و splice استفاده کنیم،در این قسمت قراره با توابعی اشنا بشیم که برای جدا کردن قسمتی از رشته ها از انها استفاده میکنیم.
تابع substr : این متود میتونه دو تا ورودی بگیره، ورودی اول ایندکس شروع و ورودی دوم تعداد کاراکتری که قراره جدا بشه. خروجی هم میاد اون بخش از رشته رو که در ورودی مشخصاتشو معلوم کردیم بهمون برمیگردونه.

مثالی از substr
مثالی از substr

در مثال اول خروجی ما میشه اون بخش از رشته که از ایندکس 1 شروع شده و طولش برابر با 4 هست. در مثال دوم چون ما به این تابع یک ورودی دادیم خروجی از ایندکس شروع تا اخر رشته است.
نکته ای که جالب اینه که ما میتونیم به ورودی اول substr عددهای منفی بدیم. ایندکس های منفی از اخر رشته یا ارایه شروع میشن، مثلا 1- نشون دهنده اخرین کارکتره و 2- دومین کاراکتر از اخرو نشون میده.

تابع substring :این تابع هم همانند تابع substr میتونه دوتا ورودی بگیره که ورودی اول ایندکس شروع ولی ورودی دوم ایندکس پایانی هست و خروجی یک رشته که از ایندکس که به عنوان ورودی اول دادیم شروع و تا ایندکس پایانی ادامه داره:)(بله! کارکتر با ایندکس پایانی در رشته نیست)

مثالی از تفاوت substr  و substring
مثالی از تفاوت substr و substring

یه تفاوت دیگه بین substr و substring اینه که ما در substring برخلاف متود substr نمیتونیم ایندکس منفی بدیم و اگر ایندکس منفی بدیم جاوااسکریپ اون مقدار منفی با صفر جایگزین میکنه.

شاید حالا احساس کنید که هیچ تفاوتی بین تابع slice (تابع slice برای رشته ها هم بکار میره) و substring وجود نداره و دو تابع دارند یه کارو انجام میدن! اما خوبه که بدونید در موارد زیر باهم متفاوتند:
1) در تابع substring اگر ورودی اول بزرگتر از ورودی اول باشه (یعنی ایندکس شروع بزرگتر از ایندکس پایانی باشه!) جاوا اسکریپت جای این دوتا ورودی عوض میکنه اما در تابع slice در چنین شرایطی به ما یک رشته خالی یا همون "" برمیگردونه!

2) یه تفاوت دیگه عملکرد متفاوت این دوتابع با ورودی های منفیه، همین طور که گفتیم اگه به تابع substring ورودی منفی بدیم، مقدارش با صفر جایگزین میشه اما عملکرد تابع slice همانند substr هست و ورودی منفی نشون دهنده اینه که شمارش ما از انتها رشته اغاز شده است.
خوب امیدورام دیگه تفاوت بین اینارو متوجه شده باشید و دراخر اگه دوست دارید راجب موضوع خاصی بنویسیم لطفا تو کامنت ها برامون بگید، و همچنین معرفی ما به دوستاتون میتونه بهمون خیلی کمک کنه تا تیم هپی لرن رو بزرگتر کنیم.