JavaRush /Java блогы /Random-KK /Қашып кеткен кейіпкерлер

Қашып кеткен кейіпкерлер

Топта жарияланған
Сәлеметсіз бе! Алдыңғы дәрістерде біз Java тілінде сыныппен ұсынылған жолдармен таныс болдық String. Естеріңізде болса, жол - бұл таңбалар тізбегі. Таңбалар кез келген болуы мүмкін - әріптер, сандар, тыныс белгілері және т.б. Ең бастысы, жолды құру кезінде бүкіл дәйектілік тырнақшаға алынады:
public class Main {
   public static void main(String[] args) {
       String sasha = new String ("Меня зовут Саша, мне 20 лет!");
   }
}
Бірақ ішінде тырнақшалары бар жолды жасау керек болса не болады? Мысалы, біз әлемге сүйікті кітабымыз туралы айтқымыз келеді:
public class Main {
   public static void main(String[] args) {
       String myFavoriteBook = new String ("Моя любимая книга - "Сумерки" Стефани Майер");
   }
}
Компилятор бір нәрсеге риза емес сияқты! Қатенің себебі неде болуы мүмкін деп ойлайсыз және ол неге тырнақшалармен арнайы пайда болды? Мәселе мынада, компилятор тырнақшаларды қатаң анықталған жолмен қабылдайды, атап айтқанда, ол оларға жолды орап алады. Ол кейіпкерді көрген сайын "оның артынан сол кейіпкер келеді деп күтеді және олардың арасында өзі құрастырушы құруы керек жолдың мәтіні болады. Біздің жағдайда «Ымырт» сөзінің айналасындағы тырнақшалар басқа тырнақшалардың ішінде болады . Ал компилятор мәтіннің осы бөлігіне келгенде, олар одан не қалайтынын түсінбейді. Дәйексөз бар сияқты, яғни ол жолды жасау керек. Бірақ ол қазірдің өзінде істеп жатыр! Дәл осы себеп. Қарапайым тілмен айтқанда, бұл кезде компилятор одан не қалайтынын дұрыс түсінбейді. "Тағы бір дәйексөз? Бұл қандай да бір қате ме? Мен қазірдің өзінде жолды жасап жатырмын! Немесе басқасын жасауым керек пе? Уххх...:/" Компиляторға дәйексөз ол үшін пәрмен болған кезде түсіндіруіміз керек (" жолды жасаңыз!"), ал ол қарапайым символ болған кезде («Ымырт» сөзін тырнақшамен бірге көрсетіңіз!»). Бұған қол жеткізу үшін Java таңбадан қашуды пайдаланады . Бұл арнайы таңба арқылы жасалады. Бұл сияқты: \. Кәдімгі өмірде ол «кері қиғаш сызық» деп аталады, бірақ Java тілінде ол (қашып кететін таңбамен бірге) қашу реті деп аталады . Мысалы, \"міне, бұл – экранда тырнақшаларды көрсетуге арналған басқару тізбегі. Сіздің codeыңызда мұндай құрылымды кездестіргеннен кейін, компилятор бұл жай ғана экранда көрсетілуі керек «тырнақша» таңбасы екенін түсінеді. Кітаппен codeымызды өзгертуге тырысайық:
public static void main(String[] args) {
       String myFavoriteBook = new String ("Моя любимая книга - \"Сумерки\" Стефани Майер");
       System.out.println(myFavoriteBook);
   }
}
Біз екі «ішкі» тырнақшадан қашып құтылдық \. Әдісті іске қосып көрейік main()... Консоль шығысы:

Моя любимая книга - "Сумерки" Стефани Майер
Керемет, code дәл қажетінше жұмыс істеді! Дәйексөздер кейіпкерден қашу қажет болатын жалғыз жағдайдан алыс. Мысалы, біз біреуге жұмысымыз туралы айтқымыз келді:
public class Main {
   public static void main(String[] args) {
       String workFiles= new String ("Мои рабочие файлы лежат в папке D:\Work Projects\java");
       System.out.println(workFiles);
   }
}
Және тағы да қателік! Мұның себебі неде екенін болжай аласыз ба? Компилятор тағы да не істеу керектігін түсінбейді. Өйткені, ол үшін символ басқару реттілігінен\ басқа ештеңе емес ! Ол қиғаш сызықтан кейін қандай да бір ерекше тәсілмен (мысалы, тырнақша) түсіндіруге тура келетін кейбір таңба болуы керек деп күтеді. Дегенмен, бұл жерде тұрақты әріптер жүреді. Осылайша, компилятор қайтадан шатастырылады. Не істеу? Өткен жолы дәл солай: біздікіне тағы біреуін қосыңыз ! \\\
public class Main {

   public static void main(String[] args) {

       String workFiles= new String ("Мои рабочие файлы лежат в папке D:\\Work Projects\\java");
       System.out.println(workFiles);

   }
}
Бұдан не шығатынын көрейік: Консоль шығысы:

Мои рабочие файлы лежат в папке D:\Work Projects\java
Тамаша! Компилятор олардың \қалғандарымен бірге консольге шығарылуы керек қарапайым символдар екенін бірден анықтады. Java-да бірнеше қашу реті бар. Міне, олардың толық тізімі:
  • \t қойынды таңбасы.
  • \b мәтіндегі қайтарылатын таңба бір қадам артқа немесе жолдағы бір таңбаны жою (backspace).
  • \n жаңа жол таңбасы.
  • \r каретканы қайтару сипаты.
  • \f бетті іске қосу.
  • \' жалғыз тырнақша белгісі.
  • \" қос тырнақша белгісі.
  • \\кері қиғаш сызық таңбасы (\).
Осылайша, егер компилятор мәтінде символды кездестірсе \n, ол бұл консольге шығарылуы керек символ мен әріп қана емес, ол үшін арнайы пәрмен - «жол үзілімін жасаңыз!» екенін түсінеді. Мысалы, консольге өлеңнің бір бөлігін шығарғымыз келсе, бұл бізге пайдалы болуы мүмкін:
public class Main {
   public static void main(String[] args) {
       String borodino = new String ("Скажи-ка, дядя, \nВедь не даром \nМосква, спаленная пожаром, \nФранцузу отдана?");
       System.out.println(borodino);
   }
}
Міне, біз мынаны алдық: Консоль шығысы:

Скажи-ка, дядя, 
Ведь не даром 
Москва, спаленная пожаром, 
Французу отдана?
Дәл қажет нәрсе! Компилятор қашу ретін танып, 4 жолдан тұратын өлең бөлігін шығарды.

Юниcode

Таңбалардан қашуға байланысты сіз білуіңіз керек тағы бір маңызды тақырып - Юниcode . Юниcode – әлемнің барлық дерлік жазба тілдеріндегі таңбаларды қамтитын таңбаларды codeтау стандарты. Басқаша айтқанда, бұл кез келген тілдегі кез келген таңбаның codeы бар арнайы codeтардың тізімі! Әрине, бұл тізім өте үлкен және оны ешкім жатқа білмейді :) Егер сіз оның қайдан шыққанын және не үшін қажет болғанын қызықтыратын болсаңыз, Хабрахабрдағы танымдық мақаланы оқыңыз . Юниcodeтағы барлық таңба codeтары «әріп u+ он алтылық сан». Мысалы, әйгілі авторлық құқық белгісі u00A9 codeы арқылы көрсетіледі . Сонымен, Java тіліндегі мәтінмен жұмыс істеу кезінде осы таңбаны пайдалану қажет болса, оны мәтініңізде жасыруға болады! Мысалы, біз барлығына бұл лекцияның JavaRush авторлық құқығымен қорғалғанын айтқымыз келеді:
public class Main {
   public static void main(String[] args) {
       System.out.println("Лекция \"Экранирование символов\", \u00A9 2018 Javarush");
   }
}
Консоль шығысы:

Лекция "Экранирование символов", © 2018 Javarush
Тамаша, бәрі орындалды! Бірақ ерекше кейіпкерлер бәрі бірдей емес! Юниcodeты және таңбадан қашуды пайдалану арқылы бір уақытта әртүрлі тілдерде жазылған мәтінді codeтауға болады. Тіпті бір тілдің бірнеше түрлі диалектілерінде де!
public class Main {
   public static void main(String[] args) {

       System.out.println("\u041c\u0430\u0301\u043e " +
               "\u0426\u0437\u044d\u0434\u0443\u0301\u043d " +
               "\u0028\u043a\u0438\u0442\u002e \u0442\u0440\u0430\u0434\u002e " +
               "\u6bdb\u6fa4\u6771\u002c \u0443\u043f\u0440\u002e " +
               "\u6bdb\u6cfd\u4e1c\u002c \u043f\u0438\u043d\u044c\u0438\u043d\u044c\u003a " +
               "\u004d\u00e1\u006f \u005a\u00e9\u0064\u014d\u006e\u0067\u0029 " +
               "\u2014 \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u0438\u0439 " +
               "\u0433\u043e\u0441\u0443\u0434\u0430\u0440\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 " +
               "\u0438 \u043f\u043e\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 " +
               "\u0434\u0435\u044f\u0442\u0435\u043b\u044c \u0058\u0058 \u0432\u0435\u043a\u0430\u002c " +
               "\u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u0442\u0435\u043e\u0440\u0435\u0442\u0438\u043a " +
               "\u043c\u0430\u043e\u0438\u0437\u043c\u0430\u002e");
   }
}
Консоль шығысы:

Ма́о Цзэду́н (кит. трад. 毛澤東, упр. 毛泽东, пиньинь: Máo Zédōng) — китайский государственный и политический деятель XX века, главный теоретик маоизма.
Бұл мысалда таңба codeтарын біле отырып, біз кириллица алфавитінен және қытай таңбаларын жазудың үш (!) түрлі түрінен тұратын жолды жаздық - классикалық, жеңілдетілген және латын (пининь). Негізінен солай! Енді сіз өзіңіздің жұмысыңызда осы құралды пайдалану үшін кейіпкерден қашу туралы жеткілікті білесіз :) Егер бәрі толығымен түсініксіз болса, мен сізге осы мақаланы оқуға кеңес беремін : бұл жақсы қосымша болады.
Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION