CodeGym /وبلاگ جاوا /Random-FA /شخصیت های فرار از جاوا
John Squirrels
مرحله
San Francisco

شخصیت های فرار از جاوا

در گروه منتشر شد
سلام! در درس های قبلی، قبلاً با رشته های متنی آشنا شده ایم که توسط کلاس String در جاوا نمایش داده می شوند. همانطور که احتمالاً به یاد دارید، یک رشته دنباله ای از کاراکترها است. این کاراکترها می توانند هر حرف، اعداد، علائم نگارشی و غیره باشند. نکته اصلی هنگام ایجاد یک رشته این است که کل دنباله باید در علامت نقل قول قرار گیرد:

public class Main {
   public static void main(String[] args) {
       String alex = new String ("My name is Alex. I'm 20!");
   }
}
اما اگر نیاز به ایجاد رشته ای داشته باشیم که خودش باید دارای علامت نقل قول باشد، چه کنیم؟ برای مثال، فرض کنید می‌خواهیم درباره کتاب مورد علاقه‌تان به دنیا بگوییم:

public class Main {
   public static void main(String[] args) {
       String myFavoriteBook = new String ("My favorite book is "Twilight" by Stephanie Meyer");
   }
}
به نظر می رسد کامپایلر از چیزی ناراضی است! به نظر شما مشکل از چی میتونه باشه؟ و چه ربطی به گیومه داره؟ در واقع، همه چیز بسیار ساده است. کامپایلر گیومه ها را به روشی بسیار خاص تفسیر می کند، یعنی انتظار دارد رشته هایی در آنها پیچیده شود. و هر بار که کامپایلر "" را می بیند، انتظار دارد که پس از علامت نقل قول یک علامت نقل قول دوم قرار گیرد و محتوای بین آنها متن رشته ای باشد که باید توسط کامپایلر ایجاد شود. در مورد ما، علامت نقل قول در اطراف کلمه "گرگ و میش" در داخل گیومه های دیگر قرار دارد. وقتی کامپایلر به این قطعه از متن می رسد، به سادگی نمی فهمد که انتظار می رود چه کاری انجام دهد. علامت نقل قول نشان می دهد که باید یک رشته ایجاد شود. اما کامپایلر این است در اینجا به این دلیل است: به سادگی، کامپایلر در مورد آنچه که انتظار می رود انجام دهد گیج می شود. "یک علامت نقل قول دیگر؟ آیا این نوعی اشتباه است؟ من در حال حاضر یک رشته ایجاد می کنم! یا باید یکی دیگه بسازم؟ ارگ!...:/" باید به کامپایلر اطلاع دهیم که چه زمانی یک علامت نقل قول یک دستور است ("یک رشته!") و چه زمانی صرفا یک کاراکتر است ("کلمه "گرگ و میش" را همراه با علامت نقل قول نمایش دهید! "). برای انجام این کار، جاوا از کاراکتر فرار استفاده می کند . این کار با استفاده از یک نماد خاص انجام می شود: \ . این نماد معمولاً "بک اسلش" نامیده می شود. در جاوا، یک بک اسلش با یک کاراکتر که قرار است "گریز" شود، یک دنباله کنترل نامیده می شود. به عنوان مثال، \" یک دنباله کنترل برای نمایش علائم نقل قول روی صفحه است. پس از مواجهه با این ساختار در کد شما، کامپایلر متوجه خواهد شد که این فقط یک علامت نقل قول است که باید روی صفحه نمایش داده شود. بیایید سعی کنیم کد خود را با کتاب تغییر دهیم:

public static void main(String[] args) {
       String myFavoriteBook = new String ("My favorite book is \"Twilight\" by Stephanie Meyer");
       System.out.println(myFavoriteBook);
   }
}
ما از \ برای فرار از دو علامت نقل قول "داخلی" خود استفاده کرده ایم. بیایید روش main() را اجرا کنیم ... خروجی کنسول:
My favorite book is "Twilight" by Stephanie Meyer
عالی! کد دقیقاً همانطور که می خواستیم کار می کرد! گیومه ها به هیچ وجه تنها شخصیت هایی نیستند که ممکن است نیاز به فرار داشته باشیم. فرض کنید می خواهیم به کسی در مورد کار خود بگوییم:

public class Main {
   public static void main(String[] args) {
       String workFiles= new String ("My work files are in D:\Work Projects\java");
       System.out.println(workFiles);
   }
}
یک خطای دیگر! می توانید حدس بزنید چرا؟ بار دیگر، کامپایلر متوجه نمی شود که چه کاری باید انجام دهد. از این گذشته، کامپایلر \ را به‌عنوان چیزی غیر از یک توالی کنترل نمی‌شناسد ! انتظار دارد که بک اسلش توسط یک کاراکتر مشخص دنبال شود که باید به نحوی آن را به روشی خاص (مثلاً علامت نقل قول) تفسیر کند. اما، در این مورد، \ با حروف معمولی دنبال می شود. بنابراین کامپایلر دوباره گیج می شود. چه کار باید بکنیم؟ دقیقاً همان چیزی که قبلاً وجود داشت: فقط یک \ دیگر به \ خود اضافه می کنیم !

public class Main {

   public static void main(String[] args) {

       String workFiles= new String ("My work files are in D:\\Work Projects\\java");
       System.out.println(workFiles);

   }
}
بیایید ببینیم چه چیزی بدست می آوریم: خروجی کنسول:
My work files are in D:\Work Projects\java
فوق العاده! کامپایلر بلافاصله تعیین می کند که \ کاراکترهای معمولی هستند که باید همراه با بقیه نمایش داده شوند. جاوا توالی های کنترلی بسیار زیادی دارد. این لیست کامل است:
  • \ t - برگه.
  • \b - backspace (گامی به عقب در متن یا حذف یک کاراکتر).
  • \n - خط جدید.
  • \r - برگشت کالسکه. ()
  • \f - فید فرم.
  • \' نقل قول تک.
  • \" نقل قول دوگانه.
  • \\ معکوس.
بنابراین، اگر کامپایلر با \n در متن مواجه شود، متوجه می‌شود که این فقط یک علامت و یک حرف برای نمایش در کنسول نیست، بلکه یک دستور ویژه برای "انتقال به یک خط جدید!" است. به عنوان مثال، اگر بخواهیم بخشی از یک شعر را نمایش دهیم، ممکن است مفید باشد:

public class Main {
   public static void main(String[] args) {
       String byron = new String ("She walks in beauty, like the night, \nOf cloudless climes and starry skies\nAnd all that's best of dark and bright\nMeet in her aspect and her eyes...");
       System.out.println(byron);
   }
}
در اینجا چیزی است که ما دریافت می کنیم: خروجی کنسول:
She walks in beauty, like the night, 
Of cloudless climes and starry skies 
And all that's best of dark and bright 
Meet in her aspect and her eyes...
همان چیزی که ما می خواستیم! گردآورنده دنباله فرار را تشخیص داد و گزیده ای از شعر را در 4 سطر خروجی داد.

فرار از کاراکترهای یونیکد

موضوع مهم دیگری که باید در رابطه با کاراکترهای فرار بدانید Unicode است. یونیکد یک رمزگذاری کاراکتر استاندارد است که شامل نمادهای تقریباً هر زبان نوشتاری در جهان است. به عبارت دیگر، لیستی از کدهای ویژه است که تقریباً هر شخصیت را در هر زبانی نشان می دهد! طبیعتاً، این یک لیست بسیار طولانی است و هیچ کس آن را از روی قلب یاد نمی گیرد :) اگر می خواهید بدانید که از کجا آمده و چرا ضروری است، این مقاله آموزنده را بخوانید: https://docs.oracle.com/javase/tutorial/ i18n/text/unicode.html همه کدهای کاراکتر یونیکد به شکل " u +< رقم هگزا دسیمال>" هستند. به عنوان مثال، نماد شناخته شده کپی رایت با u00A9 نشان داده می شود. بنابراین، در صورت نیاز به استفاده از این کاراکتر هنگام کار با متن در جاوا، می توانید از آن در متن خود فرار کنید! به عنوان مثال، ما می خواهیم به همه اطلاع دهیم که CodeGym دارای حق چاپ این درس است:

public class Main {
   public static void main(String[] args) {
       System.out.println("\"Escaping characters\", \u00A9 2019 CodeGym");
   }
}
خروجی کنسول:
"Escaping characters", © 2019 CodeGym
عالی، همه چیز درست شد! اما این فقط در مورد نمادهای خاص نیست! می توانید از یونیکد و کاراکترهای فرار برای رمزگذاری متن نوشته شده به طور همزمان به زبان های مختلف استفاده کنید. و حتی متن نوشته شده به چندین گویش مختلف از یک زبان!

public class Main {
   public static void main(String[] args) {

       System.out.println("\u004d\u0061\u006f \u005a\u0065\u0064\u006f\u006e\u0067 " + 

               "\u0028\u0054\u0072\u0061\u0064\u0069\u0074\u0069\u006f\u006e\u0061\u006c " +

               "\u0043\u0068\u0069\u006e\u0065\u0073\u0065\u003a \u6bdb\u6fa4\u6771\u002c " +

               "\u0053\u0069\u006d\u0070\u006c\u0069\u0066\u0069\u0065\u0064 " +

               "\u0043\u0068\u0069\u006e\u0065\u0073\u0065\u003a \u6bdb\u6cfd\u4e1c\u002c " +

               "\u0050\u0069\u006e\u0079\u0069\u006e\u003a \u004d\u00e1\u006f " +

               "\u005a\u00e9\u0064\u014d\u006e\u0067\u0029 \u0077\u0061\u0073 \u0061 " +

               "\u0032\u0030\u0074\u0068\u002d\u0063\u0065\u006e\u0074\u0075\u0072\u0079 " +

               "\u0043\u0068\u0069\u006e\u0065\u0073\u0065 " +

                "\u0073\u0074\u0061\u0074\u0065\u0073\u006d\u0061\u006e\u002c " +

               "\u0070\u006f\u006c\u0069\u0074\u0069\u0063\u0069\u0061\u006e\u002c " +

               "\u0061\u006e\u0064 \u0074\u0068\u0065 \u0063\u0068\u0069\u0065\u0066 " +

               "\u0074\u0068\u0065\u006f\u0072\u0065\u0074\u0069\u0063\u0069\u0061\u006e " +

               "\u006f\u0066 \u004d\u0061\u006f\u0069\u0073\u006d\u002e");
   }
}
خروجی کنسول:
Mao Zedong (Traditional Chinese: 毛澤東, Simplified Chinese: 毛泽东, Pinyin: Máo Zédōng) was a 20th-century Chinese statesman, politician, and the chief theoretician of Maoism.
در این مثال، ما از کدهای کاراکتر برای ساخت یک رشته متشکل از انگلیسی و سه (!) نوع مختلف نویسه چینی - سنتی، ساده و لاتین (پینیین) استفاده کردیم. و این در مورد آن را خلاصه می کند! اکنون به اندازه کافی در مورد فرار از شخصیت ها می دانید تا از این ابزار عالی در کار خود استفاده کنید :) برای تقویت آموخته های خود، پیشنهاد می کنیم یک درس ویدیویی از دوره جاوا ما تماشا کنید.
نظرات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION