paint-brush
Ilkinji programmirleme diliňiz, kod hakda pikir edişiňize uly täsir edýärtarapyndan@nfrankel
317 oka
317 oka

Ilkinji programmirleme diliňiz, kod hakda pikir edişiňize uly täsir edýär

tarapyndan Nicolas Fränkel6m2025/02/02
Read on Terminal Reader

Örän uzyn; Okamak

Obýekte gönükdirilen programmirleme, miras we subtip ýazmak, ilkinji öwrenen diliňize baglylykda başga dillere terjime edilmeýän aýratyn manylary bolup biler.
featured image - Ilkinji programmirleme diliňiz, kod hakda pikir edişiňize uly täsir edýär
Nicolas Fränkel HackerNoon profile picture


Java, karýeramda ilkinji öwrenen dilim. Onuň gurluşy programmirleme düşünjelerine düşünen ilkinji ýyllarymda esas bolup durýar. Dürli çemeleşmeler bilen başga-da birnäçe dilleri öwrenenimden soň, pikirimi giňeltdim. Bu gün miras ideýasy hakda pikirlenmek isleýärin.

Java-da miras

Java-da miras ideýasy subtip ýazmak düşünjesi bilen berk baglanyşýar. Subtiping - IS A gatnaşyklarynyň durmuşa geçirilmegi. Mysal üçin, Rabbit synpy Mammal synpynyň bir görnüşi. Mundan beýläk, Rabbit mysalynda Mammal ähli gylyk-häsiýetleri bar: bu gylyk-häsiýet miras alýar.


Şol sebäpli, bir usul Mammal parametrini talap edeninde ýa-da yzyna gaýtarmagyň görnüşi Rabbit bolanda Mammal Rabbit mysalyndan geçip bilersiňiz. Java, .Net ýa-da uzakdan şuňa meňzeş bir zady öwrenen bolsaňyz, mirasy şeýle görýärsiňiz we täze adaty bolýar.


Bu aç-açan miras .


 class Animal { void feed(); } class Rabbit extends Animal { //1 }
  1. Rabbit Animal IS A üçin, feed()

Go miras

Go-a ilkinji gezek seredenimde, henizem miras berýän mahaly onuň ýazuw görnüşiniň ýokdugyna haýran galdym. Go, ördek ýazmagy ulanýar:


Ördek ýaly görünýän, ördek ýaly ýüzýän we ördek ýaly bökýän bolsa, belki şeýledir.


Go struct interfeýs ýaly funksiýalary ýerine ýetirýän bolsa, interfeýsi aç-açan ýerine ýetirýär .


 type Animal interface { feed() //1 } type Rabbit struct { } func (rabbit Rabbit) feed() { //2 // feeds }
  1. Animal iýmitlendirip biler
  2. Rabbit parametr hökmünde alýan feed() funksiýasy barlygy sebäpli, Rabbit Animal ýerine ýetirýär


Goalňyşlyk bilen işlemek çemeleşmesini halamok, ýöne aç-açan durmuşa geçirmek hakda iki pikirde boldum. Bir tarapdan, munuň täze düşünje bolandygyna düşündim we aç-açan bolmaga synanyşdym; beýleki tarapdan, programma üpjünçiligini döretmekde ýa-da hakyky durmuşda zatlar elmydama aç-açan aýdyňdyr diýip pikir edýärin.

Pythonda miras

Python, miras hakda bilýän iň gyzykly dilim.


Subtiping we görnüşe esaslanýan miras Python-da döredilen gününden bäri bar.


 class Animal: def feed(self): #1 pass #2 class Rabbit(Animal): #3 pass
  1. Animal iýmitlendirip biler
  2. Python-da abstrakt synplar ýa-da interfeýsler ýok, diňe synplar
  3. Rabbit Animal IS A üçin, feed()


Bu nukdaýnazardan, Python miras nukdaýnazaryndan Java bilen birmeňzeş işleýär. Python, şeýle hem, jadyly usullar hökmünde suratlandyran ördek ýazmagy hödürleýär. Mysal üçin, gaýtalanyp boljak bir zat etmek üçin, meselem , iteratory yzyna gaýtaryp bilýän, diňe __iter__() we __next__() ýerine ýetirmeli:


 class SingleValueIterable(): done = False def __init__(self, value): self.value = value def __iter__(self): #1 return self def __next__(self): #1 if self.done: raise StopIteration else: self.done = True return self.value svi = SingleValueIterable(5) sviter = iter(svi) #2 for x in sviter: print(x) #3
  1. Ördek ýazmagyň usullary
  2. Iterator dörediň - Pythons ýokardaky usullary durmuşa geçirenimizden bäri bilýär
  3. 5 nji çap


Ördek ýazmak usulyndaky mesele, diňe Pythonyň öňünden kesgitlenen jadyly usullary üçin işleýär. Üçünji tarapyň doly miras alyp biljek synpyny hödürlemek isleseňiz näme etmeli?


 class Animal: def feed(): pass class Rabbit: def feed(): pass


Aboveokardaky bölekde, Rabbit Animal däl, gaty gynandyryjy. Protokollar: Gurluş görnüşi (statik ördek ýazmak) atly PEP 544 giriziň. PEP synplarymyz üçin jadyly usullary kesgitlemegiň mümkin däldigini çözýär. Simpleönekeý Protocol synpyny kesgitleýär: ondan miras alanyňyzdan soň, synpda kesgitlenen usullar ördek ýazmaga hukukly bolýar, şonuň üçin ady - statik ördek ýazmak.


 from typing import Protocol class Animal(Protocol): #1 def feed(): #2 pass class Rabbit: def feed(): #2 pass class VenusFlytrap: def feed(): #2 pass
  1. Protocol miras
  2. Animal Protocol bolany üçin, feed() kesgitleýän islendik synp, gowy ýa-da erbet tarapdan Animal öwrülýär

Netije

Obýekte gönükdirilen programmirleme, miras we subtip ýazmak, ilkinji öwrenen diliňize baglylykda başga dillere terjime edilmeýän aýratyn manylary bolup biler. Java özüni Obýekte gönükdirilen dil hökmünde görkezýär we doly bukjany hödürleýär. Gitmek OO dili däl, ýöne ördek ýazmagyň üsti bilen subtip ýazmagy hödürleýär. Python aç-açan we aç-açan miras hödürleýär, ýöne interfeýs ýok.


Täze programmirleme dilini, eýýäm bilýänleriňiz bilen deňeşdirip öwrenýärsiňiz. Diliň aýratynlyklaryny bilmek, maksat diliňizde idiomatik kod ýazmagyň açarydyr. Belli dilleriňizde ýok aýratynlyklar bilen tanyşyň: umuman programmirleme düşünjäňizi giňelder.


Dowam et:




Ilki 2025-nji ýylyň 26-njy ýanwarynda “Java Geek” -de neşir edildi