د ایډیالوژیکي نقطه نظر څخه د جاوا په اړه څه ښه دي؟ د پروګرام کولو مختلفې ژبې شتون لري. دوی مختلف ستونزې حل کوي، تاسو پوهیږئ. د مثال په توګه، Python د ګړندي ستونزو حل کولو لپاره د یو لاین سکریپټونو لیکلو لپاره عالي دی.
په پلس اړخ کې ، تاسو کولی شئ په بشپړ ډول د اجرا وړ کوډ کنټرول کړئ. د مثال په توګه، موږ موټرې لرو، د Yandex بې چلوونکي موټرې، د دوی کوډ په پلس کې لیکل شوی. ولې؟ جاوا داسې شی لري - د کثافاتو راټولونکی. دا د غیر ضروري شیانو رام پاکوي. دا شی په ناڅاپي ډول پیل کیږي او د نړۍ مخه نیسي، دا د پروګرام پاتې برخه ودروي او د شیانو شمیرلو ته ځي، د شیانو پاکه حافظه. که داسې شی په ډرون کې کار وکړي، دا ښه نه ده. ستاسو ډرون به مستقیم چلوي، پدې شیبه کې خپل حافظه پاکوي او سړک ته هیڅ نه ګوري. له همدې امله، ډرون په پرو باندې لیکل کیږي.
جاوا کومې ستونزې حل کوي؟ دا په اصل کې د لویو پروګرامونو د جوړولو لپاره یوه ژبه ده چې د کلونو په اوږدو کې د لسګونو یا سلګونو خلکو لخوا لیکل کیږي. په ځانګړې توګه، په Yandex.Market کې ډیری شالید په جاوا کې لیکل شوي. موږ په څو ښارونو کې ویشل شوی ټیم لرو، په هر یو کې لس کسان. او کوډ ساتل اسانه دي، دا د لسو کلونو یا ډیرو لپاره ملاتړ شوی، او په ورته وخت کې نوي خلک راځي او پدې کوډ پوهیږي.
کومه ژبه باید کومه ځانګړنه ولري چې په دې کې کوډ په اسانۍ سره حمایه شي او په لویو ټیمونو کې په اسانۍ سره وده ومومي. تر ټولو لومړی، دا باید د لوستلو وړ کوډ وي، او دا باید د پیچلو معماري حلونو پلي کول اسانه وي. دا باید د لوړې کچې خلاصون لیکل اسانه وي. دا ټول هغه څه دي چې جاوا موږ ته درکوي. دا د اعتراض پر بنسټ ژبه ده. د لوړې کچې خلاصون او پیچلي معمارۍ پلي کول واقعیا اسانه دي.
کوم بنسټیز مهارتونه، زما په نظر، د پیل JA لوبغاړی باید ولري؟ تر ټولو لومړی، دا د جاوا اصلي ژبې پوهه ده. بل د انحصار انجیکشن چوکاټ یو ډول دی. راتلونکی سپیکر، کیریل به په دې اړه په بشپړه توګه خبرې وکړي. زه ډیر ژور نه ځم. بل د معمارۍ او ډیزاین نمونې دي. موږ اړتیا لرو د لوی غوښتنلیکونو لیکلو لپاره د معماري پلوه ښکلي کوډ لیکلو وړتیا ولرو. او دا د ډیټابیس سره د کار کولو دندو لپاره یو ډول SQL یا ORM دی. او دا په پس منظر کې ډیر پلي کیږي.
لاړ شه! جاوا کور. زه به دلته واقعیا امریکا ونه موند - تاسو اړتیا لرئ پخپله ژبه پوه شئ. هغه څه چې تاسو باید پاملرنه وکړئ. لومړی، جاوا په وروستیو کلونو کې ډیری نسخې خپرې کړې، دا چې په 2014-2015 کې اووم خپور شو، بیا اتم، نهم، لسم، ډیری نوي نسخې، او ډیر نوي نوي شیان معرفي شول. ، د مثال په توګه ، د جاوا سټریم API ، لامبډا ، او داسې نور ډیر ښه ، تازه ، په زړه پوري شیان چې د تولید کوډ کې کارول کیږي ، دوی په مرکو کې د څه په اړه پوښتنه کوي او کوم چې تاسو اړتیا لرئ پوه شئ. له همدې امله، تاسو باید د جاوا-4 کتابتون کې له شیلف څخه کتاب ونه اخلئ او زده کړئ. دا زموږ پلان دی: موږ Java-8 یا لوړ زده کوو.
موږ نوښتونو ته ډیره پاملرنه کوو لکه سټریم API، var، او داسې نور. دوی د مرکو په جریان کې پوښتل کیږي او په دوامداره توګه په تولید کې کارول کیږي. دا دی ، د سټریم API د لوپونو په پرتله خورا یخ دی ، په عموم کې ، یو خورا ښه شی. ډاډه اوسئ چې پام وکړئ.
او دلته ټول ډولونه شتون لري لکه تکرارونکي، استثناوې او داسې نور. هغه شیان چې تاسو ته مهم نه ښکاري تر هغه چې تاسو پخپله یو کوچنی کوډ ولیکئ. تاسو دې استثناوو ته اړتیا نلرئ، په هرصورت څوک ورته اړتیا لري؟ مګر دوی به خامخا په مرکو کې وپوښتل شي، دوی به یقینا ستاسو لپاره په تولید کې ګټور وي. په عموم کې، تاسو باید استثناء، تکرارونکي او نورو شیانو ته پام وکړئ.
د معلوماتو جوړښتونه. تاسو نشئ کولی د جوړښتونو پرته لاړ شئ، مګر دا به خورا ښه وي که تاسو یوازې نه پوهیږئ چې سیټونه، لغتونه او پاڼې شتون لري. او همدارنګه د جوړښتونو مختلف تطبیق. د مثال په توګه، په جاوا کې ورته لغت ډیری تطبیقونه لري، پشمول د HashMap او TreeMap. دوی مختلف اسیمپټوټیکونه لري، دوی دننه په مختلف ډول جوړښت لري. تاسو اړتیا لرئ پوه شئ چې دوی څنګه توپیر لري او کله چې کوم یو وکاروئ.
دا به هم خورا ښه وي که تاسو پوهیږئ چې دا ډیټا جوړښتونه په داخلي توګه څنګه کار کوي. دا دی، دا اسانه نده چې د دوی د نښې نښانې پوه شي - څومره شرط کار کوي، پاس څومره وخت کار کوي، مګر جوړښت څنګه دننه کار کوي - د مثال په توګه، په هش میپ کې بالټ څه شی دی.
دا د ونو او ګرافونو په پام کې نیولو سره هم ارزښت لري. دا هغه شیان دي چې د تولید کوډ کې خورا عام ندي، مګر دوی په مرکو کې مینه لري. په دې اساس، تاسو اړتیا لرئ چې د ونو، ګرافونو په عرض او ژور کې تیرولو وړتیا ولرئ. دا ټول ساده الګوریتمونه دي.
هرڅومره ژر چې تاسو کوم لوی کوډ لیکل پیل کړئ ، پیچلي ، د کتابتونونو کارول ، څو ټولګي کوډ ، تاسو به پوه شئ چې دا ستاسو لپاره د سیسټمونو رامینځته کولو او انحصارونو حل کولو پرته سخت دی. دا په عمده توګه ماون او ګرډل دي. دوی تاسو ته اجازه درکوي په یوه لیکه کې ستاسو پروژې ته کتابتونونه وارد کړئ. دا دی، تاسو یو کرښه xml ولیکئ او په پروژه کې کتابتونونه وارد کړئ. لوی سیسټمونه. دوی تقریبا ورته دي، یو یې وکاروئ - ماون یا ګرډل.
بل - یو ډول نسخه کنټرول سیسټم. زه د ګیټ وړاندیز کوم ځکه چې دا مشهور دی او ډیری ټیوټوریلونه شتون لري. نږدې هرڅوک Git کاروي، دا یو ښه شی دی، تاسو پرته له دې ژوند نشئ کولی.
او یو ډول پرمختیایی چاپیریال. زه د IntelliJ Idea وړاندیز کوم. دا د پراختیا پروسه خورا ګړندۍ کوي ، تاسو سره ډیره مرسته کوي ، ستاسو لپاره ټول بویلر پلیټ کوډ لیکي ، په عموم کې ، دا ښه دی.
د پسرلي بوټ د پسرلي یوه ټوټه ده چې تاسو ته اجازه درکوي د یو تڼۍ سره ستاسو د سرور غوښتنلیک چل کړئ. تاسو THID ته لاړ شئ، یو څو تڼۍ فشار کړئ، او اوس تاسو د خپل سرور غوښتنلیک په لوکل هوسټ 8080 کې پرمخ وړئ. دا دی، تاسو تر اوسه د کوډ یوه کرښه نه ده لیکلې، مګر دا دمخه کار کوي. ډیر خوندور شی. که تاسو خپل څه لیکئ، اور!
پسرلی یو ډیر لوی چوکاټ دی. دا نه یوازې ستاسو د سرور غوښتنلیک غوره کوي او د انحصار انجیکشن حل کوي. دا تاسو ته اجازه درکوي یو شمیر شیان ترسره کړئ ، پشمول د REST API میتودونو رامینځته کول. دا دی، تاسو یو څه میتود لیکلی او د نقشې ترلاسه کولو تشریح یې ورسره ضمیمه کړی. او اوس تاسو دمخه په لوکل هوسټ کې یو څه میتود لرئ چې تاسو ته سلام نړۍ لیکي. د کوډ دوه کرښې او دا کار کوي. ښایسته توکي.
پسرلی د لیکلو ازموینې هم اسانه کوي. په لوی پرمختګ کې د ازموینې پرته هیڅ لاره نشته. کوډ باید معاینه شي. د دې هدف لپاره، جاوا یو ښه کتابتون لري JUnit 5. او په عمومي توګه JUnit، مګر وروستۍ نسخه پنځمه ده. دلته د ازموینې لپاره هرڅه شتون لري ، هر ډول ادعاګانې او نور شیان.
او یو په زړه پوری Mockito چوکاټ شتون لري. تصور وکړئ چې تاسو یو څه فعالیت لرئ چې تاسو یې ازموینه غواړئ. فعالیت ډیری شیان ترسره کوي ، پشمول په مینځ کې ، دا ستاسو د ID سره VKontakte ته ننوځي ، د مثال په توګه ، او د ID څخه د VKontakte کارونکي لومړی او وروستی نوم ترلاسه کوي. تاسو شاید په ازموینو کې VKontakte شامل نه کړئ ، دا عجیب دی. مګر تاسو اړتیا لرئ د فعالیت ازموینه وکړئ ، نو تاسو دا ټولګی جوړ کړی ، د موکیټو په کارولو سره ، دا موک کړئ ، تقلید یې کړئ.
تاسو به ووایاست چې کله دې ټولګي ته د داسې او داسې ID سره غوښتنه راځي، دا یو څه وروستی نوم بیرته راولي، د بیلګې په توګه، واسیا پپکین. او دا به کار وکړي. دا دی، تاسو به د mok یو ټولګي لپاره ټول فعالیت ازموینه وکړئ. ډیر خوندور شی.
دا د څه په اړه ده؟ راځئ هڅه وکړو چې د دواړو طریقو ګټې - سیټر او جوړونکي - په یو کې یوځای کړو. موږ یو ځانګړی شی جوړوو، جوړونکی، چې به د ID او نوم ساحې هم ولري، کوم چې پخپله به د سیټر پر بنسټ جوړ شي، او کوم چې به د جوړونې طریقه ولري چې تاسو ته د ټولو پیرامیټونو سره یو نوی کاروونکي بیرته راولي. موږ یو نه بدلیدونکی څیز او سیټر ترلاسه کوو. ارام!
ستونزې څه دي؟ دلته موږ کلاسیک جوړونکی لرو. ستونزه دا ده چې موږ لاهم کولی شو په ځینې ساحه کې چک کول هیر کړو. او که موږ د ID لیدنه هیره کړه، په دې حالت کې په بلډر کې دا صفر ته ابتدايي کیږي، ځکه چې د int ډول د رد وړ نه دی. او که موږ نوم "بانډ" جوړ کړو او د ID دفتر ته تلل هیر کړو، نو موږ به یو نوی کاروونکي ولرو چې id "0" او د "بانډ" نوم وي. ښه نه.
راځئ هڅه وکړو چې دا مبارزه وکړو. په جوړونکي کې موږ به int ته په int بدل کړو ترڅو دا ناپاک وي. اوس هرڅه عالي دي.
که موږ هڅه وکړو چې د "بانډ" نوم سره یو کارن جوړ کړو، په هغې کې د ID ایښودل هیر شوي، موږ به د یو نلی پوائنټر استثنا ترلاسه کړو، ځکه چې ID د رد وړ نه دی، مګر جوړونکی یو ناپاک، په ځانګړې توګه د پوائنټر استثناء لري.
مګر موږ لاهم کولی شو د نوم ایښودل هیر کړو ، نو موږ د اعتراض بیا پلی کول null ته تنظیم کړو. اوس، کله چې موږ د بلډر څخه خپل اعتراض جوړوو، دا ګوري چې ساحه بې اعتباره نه ده. او دا ټول نه دي.
راځئ چې وروستی مثال وګورو. په دې حالت کې، که موږ په یو ډول د ID چلولو وخت کې یو څه رد کړو، نو دا به ښه وي چې سمدلاسه پوه شئ چې تاسو دا کار کړی او دا ښه نه ده چې تاسو اوس غلطي کوئ.
تاسو اړتیا لرئ چې د کارن رامینځته کولو په وخت کې نه یوه تېروتنه وغورځوئ ، مګر کله چې تاسو ID ته null تنظیم کړئ. له همدې امله، په بلډر کې به موږ سیټر انټیجر په int بدل کړو، او هغه به سمدلاسه قسم وکړي چې دوی null ایستل کړي.