JavaRush /Java Blog /Random-TK /Lambdas we akymlar, diňe tejribe, teoriýa ýok

Lambdas we akymlar, diňe tejribe, teoriýa ýok

Toparda çap edildi
Hemmäňize salam! Bäsleşik mynasybetli bu ýerde makala däl-de, gysga bir sapak ýazmagy makul bildim. Java-daky lambdalar we akymlar hakda bolar. Eger siz eýýäm tanyş bolsaňyz we ulanýan bolsaňyz, göni makalanyň soňuna geçiň, JavaRush bilen amal edip boljak kiçijik meseleler bolar. Size java 8 we has ýokary, JR-den taýýarlyk gerek, jikme-jiklikler we düşnüksiz zatlar köp bolar, muny anyklamak üçin güýçli isleg. Lambdalaryň we akymlaryň peýda bolmagynyň taryhyny düşündirmejekdigimden başlalyň, muny diňe özüm bilemok. Diňe olaryň funksional programmirleme stilinden, OOP stilimize gelendigini bilýärin. Gysga okuw tejribämde, nädip we nämäni görkezýändigini görkezdim, käbir adamlara bu pikire düşünmek kyn düşýär, şonuň üçin nädip ýazmalydygyny ýadyňyzdan çykarmaň, soň düşünersiňiz.

Lambdas

Lambdalar we akymlar, diňe tejribe, teoriýa ýok - 1Lambdas we akymlar, diňe tejribe, teoriýa ýok - 2Lambdalaryň nämedigini bilmeýän bolsaňyz, onda: Lambda şeýle görünýär:
(a, b) -> a.compareTo(b)
(переменные) -> действие
Häzirlikçe ýeterlik. Teoriýany şu ýerden okap bilersiňiz: birini baglanyşdyryň , ikisini baglanyşdyryň , ýöne meniň pikirimçe tejribe has gyzykly. Aşakdaky meseläni çözmegiňizi maslahat berýärin: 1-nji usuly ulanyp kalkulýator ýazyň. Usul 2 sanly bahany we başga bir zady kabul etmeli. Koduňyz şuňa meňzeş bir zat görüner:
class Lambda{
    public static void main (String[] args) {
	}

    public static double calculate(){
       	return null;
    }
}
Usul goluna 3 parametr girizmeli calculate, 1 buýruk goşmaly returnwe bu usuly çagyrmagy synap görmeli main. Bu usul näme edip biler?
  • eplemek;
  • köpeltmek;
  • bölmek;
  • aýyrmak;
  • köküni hasaplamak;
  • güýç ýokarlandyrmak;
  • birinji san + 117 bilen bölünen argumentleriň jemini güýç bilen ýokarlandyrmak;
  • we pikir edip biljek beýleki amallaryňyz.
Näme ulanmaly däl:
  • if-else;
  • charamal görkezijisi hökmünde;
  • switch-case;
  • we kelläňize gelýän beýleki zatlar.
Näme ulanyp bilersiňiz:
  • Diňe lambdalar, wezipe olaryň üstünde.
- Näme? Hemmesi? - Hawa, bularyň hemmesi, sebäbi sözüň doly manysynda 3 setir goşmaly, iň bolmanda birini teklip etsem, galanlary awtomatiki ýazylar. Isleseňiz, google mysallaryny alyp, düşünmäge synanyşyp bilersiňiz. Elbetde, özüňizi barlarsyňyz we aldasaňyz, hiç kim bilmez, ýöne näme üçin? Şeýle ýönekeý meseläni çözüp, 1.5 okuwçymyň hemmesi lambdalaryň nämedigini we olary nähili ulanmalydygyna takyk düşündiler. Bu akym üçin gaty zerur bolar. Netije bilen öwünmek we dogry edendigiňizi anyklamak isleseňiz, kody şahsy habara iberiň. Teswir ýazmagyň zerurlygy ýok; ol ýerde gyzykly maslahatlar goşup bilersiňiz (ýöne meseläni aňsatlaşdyrmazlyk üçin). Againene-de bu mysaly çözüp, lambdalary nädip ulanmalydygyna eýýäm düşünmeli.
Lambdas we akymlar, diňe tejribe, teoriýa ýok - 3
Indi java akymlaryna geçeliň. Bular, okyjy, belki pikir eden akymlaryňyz däl. Nook, beýle däl inputStreamwe beýle däl OutputStream. Bu başga, has gyzykly. Akymlar siklleri çalyşdy, düýbünden däl, ýöne şonda-da. Olara "muny nädip etmelidigini düşündirmeli däl, näme etmelidigini düşündirme" şygary bilen hyzmat edilýär. Akymyň kiçijik mysaly:
List<String> myList = Arrays.asList("a1", "a2", "b1", "c2", "c1");

myList.stream()
    .filter(s -> s.startsWith("c"))
    .map(String::toUpperCase)
    .sorted()
    .forEach(System.out::println);
Bu ýerde näme bolýar? Teswirler goşalyň:
myList.stream() // получить поток
    .filter(s -> s.startsWith("c")) //отфильтровать значения, оставить те, что начинаются с «с»
    .map(String::toUpperCase)  // преобразовать все значения, перевести в верхний регистр
    .sorted() // отсортировать по порядку (дефолтный порядо)
    .forEach(System.out::println); // вывести каждый элемент на экран
Adaty aýlaw bilen deňeşdiriň:
List<String> toSort = new ArrayList<>();
for(String s : myList){
     if(s.startsWith("c")){
         toSort.add(s.toUpperCase());
     }
}

Collections.sort(toSort);

for(String s : toSort){
     System.ouy.println(s);
}
Kody okanyňyzda hemme zat gorkunç görünýär, ýöne teswirler bilen aňsatmy? Bu adaty zat, men olara köp wagt bäri düşünmedim. Düşünmegiň açary tejribe. Şonuň üçin üçünji tarap makalalaryny okap başlaýarys we soraglarymyza jogap gözläp başlaýarys, teswirlerde bu ýerden hem sorap bilersiňiz, men doly jogap bermerin, ýöne ugry görkezerin. JavaRush-dan gelýän meseleleriň sanawy, meniň pikirimçe, akym bilen meşgullanmak üçin ajaýyp:
  • 2208 - 1 akym we 1 gaýdyp gelmek bilen çözülip bilner. usulyň bedeni başlar returnwe soň 1 akym bolar. Talaby goýalyň StringBuilder.

  • 1908 - ony 1 akym we 1 gaýdyp bermek bilen hem çözüp bilersiňiz. Faýly okamakdan başlamak. Akymlar arkaly bir faýla nädip ýazga geçirmelidigini bilemok (bu mümkin bolsa), häzirlikçe el bilen edýäris. Bular. Diňe 2 akym açýarys (konsol we faýla ýazmak). Faýly bize bir sahypa ýa-da akym (google we javadoc) gaýtaryp berjek usullar arkaly okaýarys.

  • 1907 - teoriýa boýunça bir akymda hem çözülip bilner. Akymyň girişi faýlyň ady, çykyş dünýä sözleriniň sanydyr.

Bu hemmesi. Mümkin bolsa, başga bir ýönekeý hekaýa ýazaryn. Meniň pikirimçe, synap görmek mümkinçiligi bolmazdan ajaýyp bir zat hakda okamak nähilidir bir içgysgynç ýa-da bir zat. Kalkulýator we 3 bulgurdan soň, lambdalar we akymlar bilen eýýäm gowy düşünişýärsiňiz öýdýärin, şonuň üçin öňem ýok bolsa, ähli mümkinçilikleri okaň. Täzelenme:
  • 1016 - birneme ýoýulan görnüşde, ony 1 akymda we 1 gaýdyp getirip bilersiňiz;

  • 1821 - gaty aňsat we 1 akymda we 1 gaýdyp.

    Bu 2 mesele sizi başga bir akym usuly we başga bir kollektor bilen tanyşdyrar.

  • 1925 - bir akymda sözler bilen bir setir alyp, soňra bir faýla ýazyp bilersiňiz (akymdan bir faýla ýazmagyň mümkin däldigini bilemok)

Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION