Kini idi ti Go jẹ Buburu fun Awọn olupilẹṣẹ Alailẹgbẹ

Nkan naa ni a kọ bi idahun si atẹjade tẹlẹ antipodean article.

Kini idi ti Go jẹ Buburu fun Awọn olupilẹṣẹ Alailẹgbẹ

Ni awọn ọdun meji-plus sẹhin Mo ti nlo Go lati ṣe imuse olupin RADIUS pataki kan pẹlu eto ìdíyelé ti o dagbasoke. Ni ọna, Mo n kọ awọn intricacies ti ede funrararẹ. Awọn eto funrararẹ rọrun pupọ ati kii ṣe idi ti nkan yii, ṣugbọn iriri ti lilo Go funrararẹ yẹ awọn ọrọ diẹ ninu aabo rẹ. Go ti n di ede akọkọ ti o pọ si fun pataki, koodu iwọn. Google ti ṣẹda ede naa, nibiti o ti nlo ni itara. Laini isalẹ, Mo ro nitootọ pe apẹrẹ ti ede Go jẹ buburu fun awọn olutọpa ti ko ni oye.

Apẹrẹ fun alailagbara pirogirama?

Awọn alailera sọrọ ti awọn iṣoro. Ọrọ ti o lagbara nipa awọn imọran ati awọn ala ...

Go jẹ rọrun pupọ lati kọ ẹkọ, rọrun pupọ pe o le ka koodu naa pẹlu fere ko si ikẹkọ rara. Ẹya ara ẹrọ ede yii ni a lo ni ọpọlọpọ awọn ile-iṣẹ agbaye nigbati koodu naa ba ka papọ pẹlu awọn alamọja ti kii ṣe pataki (awọn alakoso, awọn alabara, ati bẹbẹ lọ). Eyi jẹ irọrun pupọ fun awọn ilana bii Idagbasoke Iwakọ Apẹrẹ.
Paapaa awọn olupilẹṣẹ alakobere bẹrẹ lati gbejade koodu to bojumu lẹhin ọsẹ kan tabi meji. Iwe ti mo kọ ẹkọ ni "Go Programming" (nipasẹ Mark Summerfield). Iwe naa dara pupọ, o kan ọpọlọpọ awọn nuances ti ede naa. Lẹhin awọn ede idiju ti ko wulo gẹgẹbi Java, PHP, aini idan jẹ onitura. Ṣugbọn pẹ tabi ya, ọpọlọpọ awọn pirogirama ti o lopin ni imọran lilo awọn ọna atijọ ni aaye tuntun kan. Ṣe eyi jẹ dandan nitootọ?

Rob Pike (akọkọ arojinle ti ede) ṣẹda ede Go gẹgẹbi ede ile-iṣẹ ti o rọrun lati ni oye ati munadoko lati lo. Ede naa jẹ apẹrẹ fun iṣelọpọ ti o pọju ni awọn ẹgbẹ nla ati pe ko si iyemeji nipa rẹ. Ọpọlọpọ awọn olupilẹṣẹ alakobere kerora pe ọpọlọpọ awọn ẹya ti wọn nsọnu. Ifẹ fun ayedero yii jẹ ipinnu mimọ nipasẹ awọn apẹẹrẹ ede, ati lati ni oye ni kikun idi ti o nilo rẹ, a gbọdọ loye iwuri ti awọn olupilẹṣẹ ati ohun ti wọn n gbiyanju lati ṣaṣeyọri ni Go.

Nítorí náà, idi ti a ṣe ki o rọrun? Eyi ni awọn agbasọ ọrọ meji lati Rob Pike:

Koko bọtini nibi ni pe awọn olupilẹṣẹ wa kii ṣe awọn oniwadi. Wọn jẹ, gẹgẹ bi ofin, wọn jẹ ọdọ, wa si wa lẹhin ikẹkọ, boya wọn kọ Java, tabi C/C ++, tabi Python. Wọn ko le loye ede nla kan, ṣugbọn ni akoko kanna a fẹ ki wọn ṣẹda sọfitiwia to dara. Ìdí nìyẹn tó fi yẹ kí èdè náà rọrùn láti lóye àti láti kẹ́kọ̀ọ́.

O yẹ ki o faramọ, ni aijọju sisọ iru si C. Awọn olupilẹṣẹ ti n ṣiṣẹ ni Google bẹrẹ awọn iṣẹ ṣiṣe wọn ni kutukutu ati pe wọn mọ pupọ julọ pẹlu awọn ede ilana, ni pataki idile C. Ibeere fun iṣelọpọ iyara ni ede siseto tuntun tumọ si pe ede ko yẹ ki o jẹ ipilẹṣẹ pupọ.

Ọ̀rọ̀ ọgbọ́n, àbí bẹ́ẹ̀ kọ́?

Artifacts ti Ayedero

Irọrun jẹ ipo pataki fun ẹwa. Lev Tolstoy.

Mimu o rọrun jẹ ọkan ninu awọn ibi-afẹde pataki julọ ni eyikeyi apẹrẹ. Bi o ṣe mọ, iṣẹ pipe kii ṣe iṣẹ akanṣe nibiti ko si nkankan lati ṣafikun, ṣugbọn ọkan lati eyiti ko si nkankan lati yọkuro. Ọpọlọpọ eniyan gbagbọ pe lati le yanju (tabi paapaa ṣalaye) awọn iṣoro idiju, o nilo irinṣẹ eka kan. Sibẹsibẹ, kii ṣe. Jẹ ki a mu ede PERL fun apẹẹrẹ. Awọn onimọ-jinlẹ ede gbagbọ pe olutọpa yẹ ki o ni o kere ju awọn ọna oriṣiriṣi mẹta lati yanju iṣoro kan. Awọn onimọ-jinlẹ ti ede Go gba ọna ti o yatọ; wọn pinnu pe ọna kan, ṣugbọn ọna ti o dara gaan, to lati ṣaṣeyọri ibi-afẹde naa. Ọna yii ni ipilẹ to ṣe pataki: ọna kan ṣoṣo ni o rọrun lati kọ ẹkọ ati nira lati gbagbe.

Ọpọlọpọ awọn aṣikiri n kerora pe ede ko ni awọn abstraction ti o wuyi ninu. Bẹẹni, eyi jẹ otitọ, ṣugbọn eyi jẹ ọkan ninu awọn anfani akọkọ ti ede naa. Ede naa ni idan ti o kere ju - nitorinaa ko nilo imọ-jinlẹ lati ka eto naa. Bi fun ọrọ sisọ ti koodu, eyi kii ṣe iṣoro rara. Eto Golang ti a kọ daradara kan ka ni inaro, pẹlu kekere tabi ko si eto. Ni afikun, iyara kika eto jẹ o kere ju aṣẹ titobi ju iyara kikọ lọ. Ti o ba ro pe gbogbo koodu naa ni ọna kika aṣọ (ti a ṣe ni lilo aṣẹ gofmt ti a ṣe sinu), lẹhinna kika awọn laini afikun diẹ kii ṣe iṣoro rara.

Ko ṣe afihan pupọ

Iṣẹ ọna ko farada nigbati ominira rẹ ni ihamọ. Ipeye kii ṣe ojuṣe rẹ.

Nitori ifẹ fun ayedero, Go ko ni awọn ipilẹ ti o wa ni awọn ede miiran bi ohun adayeba nipasẹ awọn eniyan ti o faramọ wọn. Ni akọkọ o le jẹ airọrun diẹ, ṣugbọn lẹhinna o ṣe akiyesi pe eto naa rọrun pupọ ati diẹ sii lainidi lati ka.

Fun apẹẹrẹ, ohun elo console ti o ka stdin tabi faili kan lati awọn ariyanjiyan laini aṣẹ yoo dabi eyi:

package main

import (
    "bufio"
    "flag"
    "fmt"
    "log"
    "os"
)

func main() {

    flag.Parse()

    scanner := newScanner(flag.Args())

    var text string
    for scanner.Scan() {
        text += scanner.Text()
    }

    if err := scanner.Err(); err != nil {
        log.Fatal(err)
    }

    fmt.Println(text)
}

func newScanner(flags []string) *bufio.Scanner {
    if len(flags) == 0 {
        return bufio.NewScanner(os.Stdin)
    }

    file, err := os.Open(flags[0])

    if err != nil {
        log.Fatal(err)
    }

    return bufio.NewScanner(file)
}

Ojutu si iṣoro kanna ni D, botilẹjẹpe o dabi kukuru diẹ, ko rọrun lati ka

import std.stdio, std.array, std.conv;

void main(string[] args)
{
    try
    {
        auto source = args.length > 1 ? File(args[1], "r") : stdin;
        auto text   = source.byLine.join.to!(string);

        writeln(text);
    }
    catch (Exception ex)
    {
        writeln(ex.msg);
    }
}

Apaadi didaakọ

Eniyan gbe apaadi laarin ara rẹ. Martin Luther.

Awọn olubere nigbagbogbo kerora nipa Go ni awọn ofin ti aini ti jeneriki. Lati yanju ọrọ yii, pupọ julọ wọn lo didaakọ koodu taara. Fun apẹẹrẹ, iṣẹ kan fun akopọ atokọ ti awọn odidi, iru yoo jẹ awọn alamọdaju gbagbọ pe iṣẹ ṣiṣe ko le ṣe imuse ni ọna miiran ju nipasẹ daakọ ti o rọrun fun iru data kọọkan.

package main

import "fmt"

func int64Sum(list []int64) (uint64) {
    var result int64 = 0
    for x := 0; x < len(list); x++ {
        result += list[x]
    }
    return uint64(result)
}

func int32Sum(list []int32) (uint64) {
    var result int32 = 0
    for x := 0; x < len(list); x++ {
        result += list[x]
    }
    return uint64(result)
}

func main() {

    list32 := []int32{1, 2, 3, 4, 5}
    list64 := []int64{1, 2, 3, 4, 5}

    fmt.Println(int32Sum(list32))
    fmt.Println(int64Sum(list64))
}

Ede naa ni awọn ọna ti o to lati ṣe iru awọn ikole. Fun apẹẹrẹ, siseto jeneriki yoo dara.

package main

import "fmt"

func Eval32(list []int32, fn func(a, b int32)int32) int32 {
    var res int32
    for _, val := range list {
        res = fn(res, val)
    }
    return res
}

func int32Add(a, b int32) int32 {
    return a + b
}

func int32Sub(a, b int32) int32 {
    return a + b
}

func Eval64(list []int64, fn func(a, b int64)int64) int64 {
    var res int64
    for _, val := range list {
        res = fn(res, val)
    }
    return res
}

func int64Add(a, b int64) int64 {
    return a + b
}

func int64Sub(a, b int64) int64 {
    return a - b
}

func main() {

    list32 := []int32{1, 2, 3, 4, 5}
    list64 := []int64{1, 2, 3, 4, 5}

    fmt.Println(Eval32(list32, int32Add))
    fmt.Println(Eval64(list64, int64Add))
    fmt.Println(Eval64(list64, int64Sub))
}

Ati pe, botilẹjẹpe koodu wa ti jade lati jẹ diẹ gun ju ọran ti iṣaaju lọ, o ti di gbogbogbo. Nitorinaa, kii yoo nira fun wa lati ṣe gbogbo awọn iṣẹ ṣiṣe iṣiro.

Ọpọlọpọ yoo sọ pe eto kan ni D dabi kukuru pupọ, ati pe wọn yoo jẹ ẹtọ.

import std.stdio;
import std.algorithm;

void main(string[] args)
{
    [1, 2, 3, 4, 5].reduce!((a, b) => a + b).writeln;
}

Bibẹẹkọ, o kuru nikan, ṣugbọn kii ṣe deede diẹ sii, nitori imuse D kọju iṣoro ti mimu aṣiṣe.

Ni igbesi aye gidi, bi idiju ọgbọn ti n pọ si, aafo naa dinku ni iyara. Aafo naa tilekun paapaa ni iyara diẹ sii nigbati o nilo lati ṣe iṣe ti ko ṣee ṣe nipa lilo awọn oniṣẹ ede boṣewa.

Ni awọn ofin ti itọju, extensibility, ati kika, ni ero mi, ede Go bori, botilẹjẹpe o padanu ni ọrọ-ọrọ.

Eto ti a ṣe akojọpọ ni awọn igba miiran fun wa ni awọn anfani ti a ko le sẹ. Eyi jẹ apejuwe kedere nipasẹ package too. Nitorina, lati to awọn eyikeyi akojọ, a kan nilo lati se awọn too.Interface ni wiwo.

import "sort"

type Names []string

func (ns Names) Len() int {
    return len(ns)
}

func (ns Names) Less(i, j int) bool {
    return ns[i] < ns[j]
}

func (ns Names) Swap(i, j int) {
    ns[i], ns[j] = ns[j], ns[i]
}

func main() {
    names := Names{"London", "Berlin", "Rim"}
    sort.Sort(names)
}

Ti o ba mu eyikeyi iṣẹ akanṣe orisun ṣiṣi ti o si ṣiṣẹ aṣẹ grep “interface{}” -R, iwọ yoo rii bii igbagbogbo awọn atọkun idarudapọ ṣe lo. Awọn ẹlẹgbẹ-isunmọ yoo sọ lẹsẹkẹsẹ pe gbogbo eyi jẹ nitori aini awọn apilẹṣẹ. Sibẹsibẹ, eyi kii ṣe ọran nigbagbogbo. Jẹ ki a mu DELPHI gẹgẹbi apẹẹrẹ. Pelu wiwa ti awọn jeneriki kanna, o ni oriṣi VARIANT pataki kan fun awọn iṣẹ ṣiṣe pẹlu awọn iru data lainidii. Ede Go ṣe kanna.

Lati kan Kanonu si ologoṣẹ

Ati awọn straitjacket gbọdọ ipele ti awọn iwọn ti awọn isinwin. Stanislav Lec.

Ọpọlọpọ awọn onijakidijagan ti o ga julọ le beere pe Go ni ẹrọ miiran fun ṣiṣẹda awọn jeneriki - iṣaro. Ati pe wọn yoo jẹ ẹtọ ... ṣugbọn nikan ni awọn iṣẹlẹ toje.

Rob Pike kilo fun wa:

Eyi jẹ ohun elo ti o lagbara ti o yẹ ki o lo pẹlu iṣọra. O yẹ ki o yago fun ayafi ti o muna pataki.

Wikipedia sọ fun wa ni atẹle:

Iyẹwo n tọka si ilana lakoko eyiti eto kan le ṣe atẹle ati yipada eto tirẹ ati ihuwasi lakoko ipaniyan. Ilana siseto ti o wa labẹ iṣaro ni a pe ni siseto afihan. Eyi jẹ iru metaprogramming.

Sibẹsibẹ, bi o ṣe mọ, o ni lati sanwo fun ohun gbogbo. Ni idi eyi o jẹ:

  • iṣoro ni awọn eto kikọ
  • iyara ipaniyan eto

Nitorinaa, iṣaro gbọdọ ṣee lo pẹlu iṣọra, bii ohun ija alaja nla kan. Lilo lairotẹlẹ ti iṣaroye nyorisi awọn eto ti a ko ka, awọn aṣiṣe igbagbogbo ati iyara kekere. O kan ohun kan fun oluṣeto snob lati ni anfani lati ṣafihan koodu rẹ ni iwaju ti miiran, diẹ sii pragmatic ati awọn ẹlẹgbẹ iwọntunwọnsi.

Ẹru aṣa lati ọdọ Xi? Rara, lati awọn nọmba ti awọn ede!

Paapọ pẹlu ọrọ-ọrọ, awọn gbese tun wa silẹ fun awọn ajogun.

Bíótilẹ o daju pe ọpọlọpọ gbagbọ pe ede naa da lori ohun-ini C patapata, eyi kii ṣe ọran naa. Ede naa ṣafikun ọpọlọpọ awọn abala ti awọn ede siseto to dara julọ.

Syntax

Ni akọkọ, sintasi ti awọn ẹya girama da lori sintasi ti ede C. Sibẹsibẹ, ede DELPHI tun ni ipa pataki. Nitorinaa, a rii pe awọn akọmọ laiṣe, eyiti o dinku kika kika ti eto naa, ti yọkuro patapata. Ede naa tun ni “:=” onišẹ to wa ninu ede DELPHI ninu. Ero ti awọn idii jẹ yiya lati awọn ede bii ADA. Ikede awọn nkan ti a ko lo jẹ yiya lati ede PROLOG.

Iṣeduro

Awọn idii naa da lori awọn atunmọ ti ede DELPHI. Apapọ kọọkan n ṣe alaye data ati koodu ati ni ikọkọ ati awọn nkan ti gbogbo eniyan. Eyi n gba ọ laaye lati dinku wiwo package si o kere ju.

Iṣe imuse nipasẹ ọna aṣoju ni a ya lati ede DELPHI.

Iṣakojọpọ

Kii ṣe laisi idi pe awada kan wa: Go ti ni idagbasoke lakoko ti a n ṣajọ eto C kan. Ọkan ninu awọn agbara ti ede ni akojọpọ-iyara rẹ. A ya ero naa lati ede DELPHI. Apapọ Go kọọkan ni ibamu si module DELPHI kan. Awọn idii wọnyi ni a ṣe akopọ nikan nigbati o jẹ dandan gaan. Nitorinaa, lẹhin atunṣe atẹle, iwọ ko nilo lati ṣajọ gbogbo eto naa, ṣugbọn kuku ṣajọpọ awọn idii ti o yipada ati awọn idii ti o da lori awọn idii ti o yipada (ati paapaa lẹhinna, nikan ti awọn atọkun package ti yipada).

Awọn itumọ ti ipele giga

Ede naa ni ọpọlọpọ awọn itumọ ti ipele giga ti ko ni ibatan si awọn ede kekere bi C.

  • Okun
  • Hash tabili
  • Awọn ege
  • Titẹ pepeye jẹ yiya lati awọn ede bii RUBY (eyiti, laanu, ọpọlọpọ ko loye tabi lo si agbara rẹ ni kikun).

Iṣakoso iranti

Iṣakoso iranti ni gbogbogbo yẹ nkan lọtọ. Ti o ba jẹ pe ni awọn ede bii C ++, iṣakoso ti fi silẹ patapata si olupilẹṣẹ, lẹhinna ni awọn ede nigbamii bi DELPHI, awoṣe kika itọkasi kan ti lo. Pẹlu ọna yii, awọn itọkasi gigun kẹkẹ ko gba laaye, niwọn igba ti a ti ṣẹda awọn iṣupọ orukan, lẹhinna Go ti ṣe awari iru awọn iṣupọ (bii C #). Ni afikun, agbasọ idoti jẹ daradara diẹ sii ju awọn imuse ti a mọ lọwọlọwọ lọ ati pe o le ti lo tẹlẹ fun ọpọlọpọ awọn iṣẹ ṣiṣe gidi-akoko. Ede funrarẹ ṣe idanimọ awọn ipo nigbati iye kan lati tọju oniyipada le jẹ pinpin lori akopọ. Eyi dinku fifuye lori oluṣakoso iranti ati mu iyara eto naa pọ si.

Concurrency ati Concurrency

Iparapọ ati ifigagbaga ede kọja iyin. Ko si ede kekere ti o le dije latọna jijin pẹlu Go. Lati ṣe otitọ, o tọ lati ṣe akiyesi pe awoṣe kii ṣe nipasẹ awọn onkọwe ede naa, ṣugbọn a ya nirọrun lati ede ADA atijọ ti o dara. Ede naa ni agbara lati ṣiṣẹ awọn miliọnu awọn asopọ ti o jọra ni lilo gbogbo awọn CPUs, lakoko ti o ni aṣẹ titobi awọn iṣoro idiju ti ko ni idiju pẹlu awọn titiipa ati awọn ipo ere-ije ti o jẹ aṣoju fun koodu asopo-pupọ.

Awọn anfani afikun

Ti o ba jẹ ere, gbogbo eniyan yoo di alaigbagbọ.

Ede tun fun wa ni nọmba awọn anfani laiseaniani:

  • Faili kan ti o le ṣiṣẹ lẹhin kikọ iṣẹ akanṣe naa jẹ ki imuṣiṣẹ awọn ohun elo rọrun pupọ.
  • Titẹ aimi ati iru itọkasi le dinku nọmba awọn aṣiṣe ninu koodu rẹ ni pataki, paapaa laisi awọn idanwo kikọ. Mo mọ diẹ ninu awọn pirogirama ti o ṣe laisi awọn idanwo kikọ rara ati pe didara koodu wọn ko jiya ni pataki.
  • Akopọ-agbelebu ti o rọrun pupọ ati gbigbe ti o dara julọ ti ile-ikawe boṣewa, eyiti o jẹ irọrun pupọ idagbasoke ti awọn ohun elo agbekọja.
  • Awọn ikosile deede RE2 jẹ ailewu okun-ailewu ati pe o ni awọn akoko ipaniyan asọtẹlẹ.
  • Ile-ikawe boṣewa ti o lagbara ti o fun laaye awọn iṣẹ akanṣe pupọ julọ lati ṣe laisi awọn ilana ti ẹnikẹta.
  • Ede naa lagbara to lati dojukọ iṣoro naa ju bi o ṣe le yanju rẹ, sibẹsibẹ ipele kekere to pe iṣoro naa le ṣee yanju daradara.
  • Eto eco Go ti ni awọn irinṣẹ idagbasoke lati inu apoti fun gbogbo awọn iṣẹlẹ: awọn idanwo, iwe aṣẹ, iṣakoso package, awọn linters ti o lagbara, iran koodu, aṣawari awọn ipo ere-ije, ati bẹbẹ lọ.
  • Ẹya Go 1.11 ṣe afihan iṣakoso igbẹkẹle itumọ-itumọ, ti a ṣe lori oke alejo gbigba VCS olokiki. Gbogbo awọn irinṣẹ ti o jẹ ilolupo ilolupo Go lo awọn iṣẹ wọnyi lati ṣe igbasilẹ, kọ, ati fi koodu sii lati ọdọ wọn ni isubu kan. Ati pe iyẹn jẹ nla. Pẹlu dide ti ikede 1.11, iṣoro pẹlu ẹya package tun jẹ ipinnu patapata.
  • Nitori ero pataki ti ede ni lati dinku idan, ede naa n ṣe iwuri fun awọn olupilẹṣẹ lati ṣe mimu aṣiṣe ni gbangba. Ati pe eyi jẹ deede, nitori bibẹẹkọ, yoo gbagbe nipa mimu aṣiṣe lapapọ. Ohun miiran ni pe pupọ julọ awọn olupilẹṣẹ ko mọọmọ foju foju mu aṣiṣe, fẹran dipo ṣiṣe wọn lati ṣaju aṣiṣe naa nirọrun.
  • Ede naa ko ṣe imuse ilana OOP ti kilasika, nitori pe ni irisi mimọ rẹ ko si aiṣedeede ni Go. Sibẹsibẹ, eyi kii ṣe iṣoro nigba lilo awọn atọkun. Aisi OOP ni pataki dinku idena si titẹsi fun awọn olubere.

Irọrun fun anfani agbegbe

O rọrun lati ṣe idiju, o nira lati rọrun.

A ṣe apẹrẹ Go lati rọrun ati pe o ṣaṣeyọri ni ibi-afẹde yẹn. A ti kọ ọ fun awọn olupilẹṣẹ ọlọgbọn ti o loye awọn anfani ti iṣiṣẹpọ ati pe wọn rẹwẹsi ti iyatọ ailopin ti awọn ede ipele-Ile-iṣẹ. Nini eto kekere ti awọn ẹya syntactic ninu ohun ija rẹ, ko ṣe koko-ọrọ si awọn ayipada ni akoko pupọ, nitorinaa awọn olupilẹṣẹ ni akoko pupọ ni ominira fun idagbasoke, kii ṣe fun ikẹkọ ailopin ede awọn imotuntun.

Awọn ile-iṣẹ tun gba nọmba awọn anfani: idena titẹsi kekere jẹ ki wọn yara wa alamọja kan, ati ailagbara ti ede jẹ ki wọn lo koodu kanna paapaa lẹhin ọdun 10.

ipari

Iwọn ọpọlọ nla ko ti jẹ ki erin kan jẹ olubori Ebun Nobel.

Fun awọn olupilẹṣẹ ti ara ẹni ti ara ẹni gba iṣaaju ju ẹmi ẹgbẹ lọ, ati awọn onimọ-jinlẹ ti o nifẹ awọn italaya ẹkọ ati “imudara-ara-ẹni” ailopin, ede naa buru gaan, nitori pe o jẹ ede iṣẹ ọna gbogbogbo ti ko gba ọ laaye lati gba. idunnu darapupo lati abajade ti iṣẹ rẹ ki o fi ara rẹ han alamọja ni iwaju awọn ẹlẹgbẹ (ti a pese pe a ṣe iwọn oye nipasẹ awọn ibeere wọnyi, kii ṣe nipasẹ IQ). Bi ohun gbogbo ni aye, o jẹ ọrọ kan ti ara ẹni ayo. Gẹgẹbi gbogbo awọn imotuntun to niye, ede naa ti wa ni ọna pipẹ tẹlẹ lati kiko gbogbo agbaye si gbigba ọpọlọpọ. Ede naa jẹ ọlọgbọn ni irọrun rẹ, ati, bi o ṣe mọ, ohun gbogbo ti o ni oye jẹ rọrun!

orisun: www.habr.com

Fi ọrọìwòye kun