Permalänk
Medlem
Skrivet av MickeBoy:

Jag tänker om man har precis börjat med en kurs i programmering och inte har gjort något förut så är det bättre att försöka lära sig grunderna först. Då tror jag att det bara ställer till det att introducera alternativa lösningar.

Som jag ser det är det for-loopen som är den alternativa lösningen. Gentemot funktionella uttryck är for-loopar svårare att få rätt (bevisligen) och de bryter mot naturligt tänkande. En nybliven student borde få fokusera på att lösa ett problem logiskt, inte semantiskt, men det verkar tyvärr som de flesta kurser har fel fokus.

Att rekommendera något sånt här känns än mer kontraproduktivt. Problemet som skulle lösas har blivit en fördjupning i bisarra syntaktiska regler och förslag om att sätta null (vilket troligtvis inte heller borde läras ut i detta skede).

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem
Skrivet av Emilia_Johanness:

@Teknocide:

Aa okej, förstår dock inte riktigt vart jag ska lägga den koden och om jag ska ta bort något?

Tack för hjälpen!

Den raden ersätter större delen av din DeleteSpelare-metod.

public static void DeleteSpelare(int nummer) { Spelarinfo[] nyVector = new Spelarinfo[spelare.Length - 1]; for (int i = 0; i < nummer; i++) { nyVector[i] = spelare[i]; } for (int i = nummer + 1; i < spelare.Length; i++) { nyVector[i - 1] = spelare[i]; } spelare = nyVector; }

blir istället

public static void DeleteSpelare(int nummer) { spelare = spelare.Where((s, index) => index != nummer).ToArray(); }

Om du vill ta bort en spelare vars spelarnummer stämmer överens med argumentet 'nummer' blir det istället

public static void DeleteSpelare(int nummer) { spelare = spelare.Where((s) => s.Nummer != nummer).ToArray(); }

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem
Skrivet av Teknocide:

Som jag ser det är det for-loopen som är den alternativa lösningen. Gentemot funktionella uttryck är for-loopar svårare att få rätt (bevisligen) och de bryter mot naturligt tänkande. En nybliven student borde få fokusera på att lösa ett problem logiskt, inte semantiskt, men det verkar tyvärr som de flesta kurser har fel fokus.

Att rekommendera något sånt här känns än mer kontraproduktivt. Problemet som skulle lösas har blivit en fördjupning i bisarra syntaktiska regler och förslag om att sätta null (vilket troligtvis inte heller borde läras ut i detta skede).

Jag håller med dig, men det faktum att man använder arrayer istället för listor får mig att tro att läraren en gång i tiden använde C eller C++ och helt enkelt har portat över uppgiften till C#. Lösningsförslagen är lite anpassade för utskrift, men strukturen är fortfarande likadan.

Om man är ny och tillsammans med andra sitter och sliter med en och samma uppgift så tycker i alla fall inte jag att det hjälper mig att få flera alternativa lösningar att titta på. Lösningar som dessutom ser helt olika ut. Jag tycker att principerna med tilldelning, instansiering av variabler o.s.v. måste man lära sig först och detta är det sättet som läraren har valt att göra det på.

Återigen: Om jag själv skulle lösa uppgiften på valfritt sätt så hade jag inte valt arrayer själv.

Permalänk
Medlem
Skrivet av MickeBoy:

Jag håller med dig, men det faktum att man använder arrayer istället för listor får mig att tro att läraren en gång i tiden använde C eller C++ och helt enkelt har portat över uppgiften till C#. Lösningsförslagen är lite anpassade för utskrift, men strukturen är fortfarande likadan.

Om man är ny och tillsammans med andra sitter och sliter med en och samma uppgift så tycker i alla fall inte jag att det hjälper mig att få flera alternativa lösningar att titta på. Lösningar som dessutom ser helt olika ut. Jag tycker att principerna med tilldelning, instansiering av variabler o.s.v. måste man lära sig först och detta är det sättet som läraren har valt att göra det på.

Återigen: Om jag själv skulle lösa uppgiften på valfritt sätt så hade jag inte valt arrayer själv.

Nåväl, någon måste ju vara den som bryter trenden om det ska bli ändring

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem
Skrivet av Teknocide:

Nåväl, någon måste ju vara den som bryter trenden om det ska bli ändring

Håller inte med Det handlar om att lära sig grunderna i programmering och för att lättare förstå lambda så bör man förstå de olika metoderna som finns för att loopa.
En lambda kan översättas till loopar och vice versa. I en loop är det lättare att följa händelseförloppet än i en lambda.
Innan man fått in tänket är det lätt att fylla loopar med funktionalitet som hade kunnat flyttas ut, och det gör lambda svåra och komplexa att använda.

Själv kör jag lambdas till det mesta men om jag blir tvungen att göra en komplex iterering så väljer jag vanliga loopar. Det handlar inte bara om att jag ska skriva 'min' kod utan om att öka läsligheten och förståelsen för det man byggt. Man är inte ensam om koden, någon kommer efter och ska undrhålla eller utveckla vidare på den och då är det kontraproduktivt att lägga in onödig komplexitet som försvårar för dom, hur lätt man än själv tycker det är.

Skickades från m.sweclockers.com

Visa signatur

Oldschool [å:ldsku:l] adj. Användandet av datorprodukter som är äldre än 3 månader.

Permalänk
Medlem

Förutom en del tips att fördjupa sig i grunderna, som är det bästa du kan göra, så vill jag ge dig en ytterligare Hint! Använd enbart engelska när du namnger saker...

Visa signatur

Fulburken:
| I9 9900K
| Gigabyte Aorus Z390 AORUS MASTER
| Asus RTX 3090 Strix OC

Permalänk
Medlem
Skrivet av kundun:

Håller inte med Det handlar om att lära sig grunderna i programmering och för att lättare förstå lambda så bör man förstå de olika metoderna som finns för att loopa.
En lambda kan översättas till loopar och vice versa. I en loop är det lättare att följa händelseförloppet än i en lambda.
Innan man fått in tänket är det lätt att fylla loopar med funktionalitet som hade kunnat flyttas ut, och det gör lambda svåra och komplexa att använda.

Själv kör jag lambdas till det mesta men om jag blir tvungen att göra en komplex iterering så väljer jag vanliga loopar. Det handlar inte bara om att jag ska skriva 'min' kod utan om att öka läsligheten och förståelsen för det man byggt. Man är inte ensam om koden, någon kommer efter och ska undrhålla eller utveckla vidare på den och då är det kontraproduktivt att lägga in onödig komplexitet som försvårar för dom, hur lätt man än själv tycker det är.

Skickades från m.sweclockers.com

En funktion (eller "lambda" som du kallar det) är inte kopplat till loopar på något vis. Har man läst matte A har man kommit i kontakt med funktioner så de borde vara mer bekanta för någon som läser en eftergymnasial kurs. Av den anledningen, och på grund av att de är relevanta vid fler tillfällen än loopar, tycker jag det är rent bisarrt att man inte får lära sig hur de fungerar i moderna programmeringsspråk. Näst intill alla uppgifter folk ställer frågor om här verkar komma från åttiotalet.

Argumentet om att for-loopar skulle vara mer lättlästa än LINQ-uttryck är rent subjektiv och bristfällig då det inte känns som du förstått vad de handlar om. Trender inom datavetenskapen — om man kan kalla dem trender då de börjar bli rätt gamla — visar att språk med rötter i C drar sig åt det funktionella hållet. Java fick förstaklassfunktioner i version 8, samt stöd i standardbiblioteket för att använda dem i uttryck som arbetar med mängd-data; C# har haft dem i åratal; Rust som är ett modernt språk avsett för programmering nära hårdvaran har dem och mer eller mindre alla språk som inte har for-loopar har dem.

Jag påstår inte att det ena är en ersättning för det andra. Det finns fall då en klassiskt for-sats är mer lämpligt än att använda funktionella uttryck, men (i fallet C#) LINQ-uttryck låter dig skriva kod som är kortare och med större sannolikhet gör vad den ska.

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem

"Jag har precis börjat läsa en kurs som heter grundläggande programmering"
Det är detta du måste relatera till, inte vad du tycker är 'the shit' för tillfället eller överlag.
Du har alltså en person som antagligen precis lärt sig vad en variabel är och så kommer du med funktionellauttryck och tycker läroinstanser är ignoranta för att dom inte lär ut det vecka ett.
Efter ett halvår hade vi halva klassen som fortfarande inte fått huvudet runt hur objekt fungerade, men vi hjälptes åt och nu är dom flesta med på tåget. Det dom flesta tyckte var svårt var att det blev för mycket på en gång, då får man backa och förenkla. Inte ge dom en oneliner som löser uppgiften, men som dom inte begriper. Det handlar om att lära sig, inte nödvändigtvis lösa uppgiften på bästa sätt.
Lägger en smile för god ton

Visa signatur

Oldschool [å:ldsku:l] adj. Användandet av datorprodukter som är äldre än 3 månader.

Permalänk
Medlem

@Teknocide: Och hur har du tänkt förklara för eleverna hur ditt LINQ-uttryck fungerar?

Permalänk
Medlem
Skrivet av kundun:

"Jag har precis börjat läsa en kurs som heter grundläggande programmering"
Det är detta du måste relatera till, inte vad du tycker är 'the shit' för tillfället eller överlag.
Du har alltså en person som antagligen precis lärt sig vad en variabel är och så kommer du med funktionellauttryck och tycker läroinstanser är ignoranta för att dom inte lär ut det vecka ett.
Efter ett halvår hade vi halva klassen som fortfarande inte fått huvudet runt hur objekt fungerade, men vi hjälptes åt och nu är dom flesta med på tåget. Det dom flesta tyckte var svårt var att det blev för mycket på en gång, då får man backa och förenkla. Inte ge dom en oneliner som löser uppgiften, men som dom inte begriper. Det handlar om att lära sig, inte nödvändigtvis lösa uppgiften på bästa sätt.
Lägger en smile för god ton

Det är inte vad jag tycker är "the shit", det är vad jag tycker är enklare att förstå. Funktionella språk har funnits längre än objektorienterade; att påstå att det är nytt/tufft/obegripligt håller inte. Jag ser helt enkelt inte varför det skulle vara lättare att förklara en for-loop för en person, än att förklara en funktion. Som sagt, de flesta som går kursen har antagligen tagit matte A och borde ha en åtminstone grundläggande idé om vad det handlar om.

Jag tar inte illa upp, förstår varför du reagerar.

Skrivet av oxxyyd:

@Teknocide: Och hur har du tänkt förklara för eleverna hur ditt LINQ-uttryck fungerar?

Nu har jag inte tänkt något på förhand men vad sägs om

Citat:

Raden väljer ut en delmängd element från en samling där det givna uttrycket är sant.

Att förklara den föreslagna for-loopen hade blivit något i stil med

Citat:

Varje element i din samling har ett index, såvida det inte rör sig om en IEnumerable eller Dictionary — den förstnämnda har ingen längd och den andra är indexerad på nyckelvärdet, alltså går det inte att for-loopa över den. Sedan initierar vi for-loopens index till det första elementets, dvs 0, och låter loopen fortsätta köra medan uttrycket index är mindre än nummer är sant. För varje snurr i loopen kopierar vi värdet på spelare[index] till nyVector[index]

Efter varje snurr i loopen lägger vi på 1 på vårt flytande index-värde. Det är viktigt att vi inte lägger till det innan (++index) för då missar vi första elementet och får dessutom fel data om nummer är 1 i anropet. Om nummer är sista indexet i listan kommer applikationen i stället att krascha. Det kommer den iofs göra ändå om nummer > spelare.Length

När den första loopen är färdig gör vi samma sak igen för element där index < spelare.Length, men vi initierar index till nummer + 1 eftersom vi inte vill ha med elementet med index "nummer". Dessutom måste vi komma ihåg att kopiera spelare[index] till nyVektor[index - 1], då nyVektor är ett element kortare än spelare.

Om nummer är större än sista indexet i samlingen kommer resultatet bli en tom samling och inte en oförändrad. Detta beror på att vi manuellt lägger till elementen baserat på deras index. Det är tråkigt men så får det vara.

Låter det någorlunda rätt?

edit: försök till att korrigera for-looparna som jag skrev fel i.

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem

Du har såklart rätt i sak, men du missar/ignorerar kontexten helt.
Att DU tycker det är lättare att förstå är begripligt, du har ju redan kunskapen, det har inte TS.
Det finns en anledning till att man börjar med arrayer och for-loopar, och inte key-valuepairs och linq/lambda/func. I en for-loop med en array kan man förklara ett procedurellt händelseförlopp direkt i koden på ett helt annat sätt, vilket är ett insteg till ökad förståelse för andra sätt att iterera samlingar.
Det handlar inte om vilket som funnits längst, bästa sättet, prestanda, komplexitet, vad du och jag tycker är lättast, osv. Det handlar om att mottagaren ska förstå och lära sig.

Kunskap växer fram genom förståelse för problemet, snarare än genom lösningen av det.
Du måste väl ändå se det pedagogiska värdet i det?

Visa signatur

Oldschool [å:ldsku:l] adj. Användandet av datorprodukter som är äldre än 3 månader.

Permalänk
Medlem
Skrivet av kundun:

Du har såklart rätt i sak, men du missar/ignorerar kontexten helt.
Att DU tycker det är lättare att förstå är begripligt, du har ju redan kunskapen, det har inte TS.
Det finns en anledning till att man börjar med arrayer och for-loopar, och inte key-valuepairs och linq/lambda/func. I en for-loop med en array kan man förklara ett procedurellt händelseförlopp direkt i koden på ett helt annat sätt, vilket är ett insteg till ökad förståelse för andra sätt att iterera samlingar.
Det handlar inte om vilket som funnits längst, bästa sättet, prestanda, komplexitet, vad du och jag tycker är lättast, osv. Det handlar om att mottagaren ska förstå och lära sig.

Ja jag har kunskapen, och med den kunskapen kan jag med säkerhet säga att jag hellre hade lärt mig det funktionella tänket långt tidigare. En sak jag tycker du missar är att trådskaparen och andra personer i samma situation saknar insikt i både for-loopar och funktioner (men som sagt, matte A…). Det handlar med andra ord om vad man ska lära ut först, eller borde handla om då funktioner alltsom oftast inte ens tas upp.

Du säger att en for-loop ger ökad förståelse för hur man kan iterera genom andra samlingar men det är ju inte sant, snarare motsatsen.
LINQ fungerar på alla typer under System.Collections.Generic, medan for bara fungerar för linjära indexerade samlingar.

Citat:

Kunskap växer fram genom förståelse för problemet, snarare än genom lösningen av det.
Du måste väl ändå se det pedagogiska värdet i det?

Problemet borde väl ändå vara att ta bort en spelare ur en samling snarare än att göra det med en for-loop? Lösningen på problemet kan se ut hur som helst: om man inte förstått problemet kommer lösningen inte heller att göra det den borde.

Jag argumenterar för att min lösning är enklare att läsa och förstå — om man utgår från en person som inte har någon tidigare erfarenhet av programmering. Om studenten därtill tagit en grundläggande kurs i SQL råder det inga tvivel om vilket som är mer tydligt.

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem

1. Att förstå funktioner ingår inte i TS kurs.
2. Att förstå arrayer och for-loopar ingår uppenbarligen.
3. TS förstår problemet.
4. TS förstår inte arrayer.
5. TS förstår inte for-loopar.

Hur tycker du att införa funktioner hjälper TS att förstå arrayer och for-loopar, och således klara kursen?

Visa signatur

Oldschool [å:ldsku:l] adj. Användandet av datorprodukter som är äldre än 3 månader.

Permalänk
Medlem
Skrivet av kundun:

1. Att förstå funktioner ingår inte i TS kurs.
2. Att förstå arrayer och for-loopar ingår uppenbarligen.
3. TS förstår problemet.
4. TS förstår inte arrayer.
5. TS förstår inte for-loopar.

Hur tycker du att införa funktioner hjälper TS att förstå arrayer och for-loopar, och således klara kursen?

Vet du vad som ingår i kursen? Vad jag kan se har det inte skrivits i tråden. Kan inte heller hitta något som säger att problemet måste lösas med for-loopar men det är säkert möjligt att så är fallet.

Jag påstår inte att funktioner hjälper någon att förstå vare sig arrayer eller for-loopar: Det är ju precis det jag skulle välja att undvika i en grundkurs. Mitt utgångsläge var att visa en enklare lösning på problemet. Efter det blev det en massa periferisk diskussion om vad som bör ingå i en grundkurs i programmering, där jag har försökt att ge tydliga argument för hur jag tänker och varför.

Jag vet inte riktigt vad du vill att jag ska skriva. Att C-style for-loopar ska finnas med i alla grundkurser i programmering? Då hade man inte kunnat använda Python (bland många andra språk) som programmeringsspråk, för där finns de inte — och ändå är det många här på Sweclockers som rekommenderar att man börjar med just Python.

Visa signatur

Kom-pa-TI-bilitet