Uploaded avatar of iHiD

Itt az idő, hogy áss mélyebbre!

@iHiD
Majdnem 4 éve ezelőtt
Videó

Az, hogy megoldasz egy feladatot az Exercism-ön, csak az első lépés. Az igazi tanulás ezután jön!

Ezen a héten elindítottuk a feladatok új „Áss mélyebbre” fülét. Célja, hogy segítsen túllépni a megoldás szakaszán, és felfedezni egy feladat árnyalatait és kompromisszumait anélkül, hogy mentorhoz kellene fordulnod.

Bevezetés

A feladataink megoldásai elképesztően változatosak. A legtöbb kurzusban a legalapvetőbb „igazi” feladat a TwoFer. Egy tipikus megoldás így néz ki (ez Ruby, de a legtöbb nyelvnél hasonló):

module TwoFer
  def self.two_fer(name='you')
    "One for #{name}, one for me."
  end
end

A legutóbbi 500, teszteket teljesítő megoldás közül azonban több mint 350 egyedi volt 😲 És még ha normalizálod is az olyan dolgokat, mint a whitespace meg a változónevek, több mint a fele így is valóban egyedi megoldás marad.

Ezért teljesen lenyűgöző felfedezni, hogy mindenki hogyan oldja meg a feladatokat. De ez teljesen kivitelezhetetlen is. Millió megoldás van az Exercism-ön, és mindet elolvasni szó szerint egy életbe kerülne.

De! Mivel mi terveztük a feladatokat, és több százezer embert mentoráltunk végig rajtuk, a csapatunknak elég jó képe van arról, milyen különböző megközelítéseket választanak az emberek. Ezért hozzáadtuk az új Áss mélyebbre fület, hogy rávilágítsunk arra, milyen különböző idiomatikus (vagy nem idiomatikus, de érdekes) módon lehet megoldani egy feladatot.

Egy példa

Nézzünk egy példát, hogy működés közben lássuk. C#-ban többféleképpen is megfordíthatsz egy stringet.

Használhatod az Array.Reverse() metódust:

var chars = input.ToCharArray();
Array.Reverse(chars);
return new string(chars);

Vagy egy rövidebb, LINQ-alapú megközelítést:

return new string(input.Reverse().ToArray());

vagy használhatsz StringBuilder-t:

var chars = new StringBuilder();
for (var i = input.Length - 1; i >= 0; i--)
{
    chars.Append(input[i]);
}
return chars.ToString();

vagy akár egy kicsit kevésbé idiomatikus (de annál hatékonyabb!) megoldást választva használhatod a Span<T>-t:

Span<char> chars = stackalloc[input.Length];
for (var i = 0; i < input.Length; i++)
{
    chars[input.Length - 1 - i] = input[i];
}
return new string(chars);

Ezeket külön-külön Megközelítésnek hívjuk, és mindegyikhez saját cikk tartozik, amely kifejti. A feladat Áss mélyebbre oldala ezeket egy helyre gyűjti, és egy teljesítményről szóló cikk is tartozik hozzá, amely a kompromisszumokat járja körül.

👉🏾 Nézd meg te is (inkognitó módba kell váltanod, ha még nem oldottad meg a feladatot)

De van itt még más is!

Amellett, hogy dokumentumok szólnak ezekről a különböző megközelítésekről, több ezer videót is készített a közösségünk: feladatokat fedeznek fel bennük, végigvezetéseket rögzítenek, kódolós streameket tartanak, és mélyre ásnak abban, mi tesz idiomatikussá egy megoldást. Ezeket a videókat most gyűjtjük össze, és visszük fel az oldalakra.

Kapcsolódj be

Az elkövetkező hetekben egyre több feladatnál fogod látni felbukkanni az Áss mélyebbre fület az oldalon.

Ha szeretnél egy Megközelítést vagy egy feladatcikket írni, esetleg szólnál a videóidról, hogy felvehessük őket, írj a jonathan@exercism.org címre, és ő segít az indulásban.

Végül pedig mondd el, mit gondolsz, és oszd meg ötleteidet és gondolataidat a fórumbejegyzésben!

30. Oct 2022 · Hasznosnak találtad?