Keizai - en ekonomisk översiktsida

Permalänk
Medlem

Keizai - en ekonomisk översiktsida

Hej.

Har länge arbetat med det här projektet (som förr hette Min ekonomi), men började om från början för kanske 6 veckor sen, och lanserade den för kanske 2 veckor sen. Har sen dess arbetat med att slå ut buggar och lösa problem, samt förfina det hela.

Efter att jag släppte en uppdatering för mer eller mindre en timme sen, som visar en indikation för när man byter månad eller kalendervy, känner jag att jag kan äntligen skapa en tråd om projektet här

Keizai är en ekonomisk översiktsida som hjälper dig att hålla stenkoll på dina utgifter, skulder och lån. Projektet är mån om din integritet och du har full kontroll över din egna data. All data som du ger Keizai, krypteras med AES-256 + saltning, innan informationen lagras i databasen. Och om du känner att du inte vill att dina krypteringsnycklar lagras på den server jag hanterar, så kan du enkelt installera Keizai på din egna server (self-hosting).

Projektet är långt ifrån klart, och vissa funktioner fattas, som till exempel att webbsidan ska automatiskt ändra datumet på de återkommande utgifterna. I dagsläget måste man ändra förfallodatumet för dessa utgifter manuellt när en ny period har ägt rum (till exempel 25 juli-25 augusti), vilket (enligt mig) är bara drygt. Arbetar på en lösning på detta. Måste bara tänka klart först, vilket jag har svårt för nu i och med mitt mående :/

Lämna gärna synpunkter på hur Keizai är i dagsläget. Och om ni har tips på hur jag kan göra Keizai bättre, nämn de också Jag har just nu över 20 saker i att göra-listan, bland annat:

  • kunna dela ett objekt (utgift, skuld, lån) till en annan användare (till exempel, när man delar en utgift med någon),

  • en sökmotor,

  • möjligheten att skanna in uppgifterna om en utgift i en bankapp för betalning, utan att behöva använda QR-koden,

  • plus mer.

Adress: keizai.se (keizai har jag för mig betyder ekonomi på japanska (Lingva visar endast de japanska tecknen för ordet)).

Visa signatur

Citera mig om du vill att jag ska hitta till ditt svar.
airikr.me. Andra projekt: Keizai, Koroth, Serenum & Enc.

Permalänk

Mycket mustigt PHP-projekt må jag säga!

Tack så mycket för att du delar med dig. Det är mycket roligt att få hoppa in och kika på någon annans WebbKodProjekt med helt blinda ögon. Det blir som att hoppa in i någons skapade nivå för allra första gången där allt som är uppenbart för dig som skapat den är helt nytt för mig!

Några saker jag funderar på:

  • Databasskapandet härifrån: https://codeberg.org/airikr/Keizai/src/branch/main/database.s... Det verkar inte finnas några Foreign Keys(FKs)? Detta betyder då att det skulle gå att råka lägga in data för en användare som inte finns registrerad. Om du skapar FKs mellan `users` och `items` och även lägger till "ON DELETE CASCADE" för `items`-tabellen så behöver du bara radera en användare så raderas all deras data automatiskt istället för två separata DELETE-SQLs för det!

  • En rolig kontrast mellan ditt PHP-projekt och mitt JS-projekt är att du har inga kommentarer och det som slog mig då var hur klurigt det kan vara att få ett grepp om varför diverse kod ligger i de filer de ligger i, i vilken ordning, och så vidare. Eller så är jag bara "korkad"! Jag tänker att korta vägledande kommentarer kan ge mentalt stöd som snabbt förklarar kontexten för diverse "kodparagrafer" än att ytterligare mentala resurser ska läggas på att både läsa koden och lista ut varför den ligger där den ligger (varför var någonstans i filen och varför i just den filen, och så vidare). Vid "deployment" så kan man väl ändå ta bort kommentarerna? Vissa företag verkar dock ha policy att "förbjuda kommentarer" vilket jag tycker är konstigt: varför göra det mentalt mer ansträngande att läsa kod om man kan göra det enklare?

  • Din SQL() funktion här: https://codeberg.org/airikr/Keizai/src/branch/main/functions/... Räcker det med "Prepare" och loopande "bindValue" för att säkra mot SQL Injections & XSS? Jag är ljusår från Databasadmin så därför jag frågar om du själv vet! Annars kanske loopa igenom varje value med strip_tags & real_escape_string också som en extra säkerhetsimplementering?

Jag diggar att du har implementerat kryptering av data innan det lagras i databas. Det är något själv jag vill lära mig inom SQL för att ta "Databas-pelaren" inom Webbutveckling till en riktig branschstandardnivå!

Jag diggar också din användning av .htaccess vilket är en ytterligare sak som jag inte har fått lära mig än så länge i min pågående distansutbildning inom Webbutvecklingsprogrammet. Det är ju en sådan där liten detalj som borde finnas med i alla nybörjarkurser inom Webbutveckling så att man kan göra så mycket rätt som möjligt från början. Om jag tolkat rätt i din .htaccess-fil så går det INTE att surfa direkt till PHP-filernas namn om man känner till dem?

Om du vill så får du gärna kika på mitt motsvarande JS-projekt här och "såga/konstrukivt kritisera" det hur mycket du än vill (jag lägger ingen "stolthet" i mitt kodande än så länge då jag är student och söker efter branschmentor).

Kortfattat om mitt eget JS-projekt så är det som "ett förenklat HTML+CSS UI" där du skriver in HTML-element i olika nivåer (under HTML-flik) - dessa visas DOM-renderade under "OUTPUT", och sedan CSS-regler (under CSS-flik) till dem som sedan ska kunna styras med reglage istället för klassisk manuell skriftlig inmatning av värden. Det sistnämnda är den biten jag arbetar med nu då det är klurigt rent datastruktur- & algoritmmässigt talat. Just nu har jag några förskapade CSS-regler för p, nav, ul, li för testsyften.

Berätta gärna om du personligen upplever att "flitigt kommenterade" ger något mentalt stöd eller om det bara stör i kodläsandet. Kan mycket väl vara så att min hypotes om vägledande kommentarer i "kodparagrafer" inte är så mentalt stöttande utan snarare mentalt ansträngande!

Allt som allt i sin helhet: Mycket bra köttat, och bara kötta vidare!

Mvh,
WKL.

Visa signatur

(V)ulnerabilities
(I)n
(B)asically
(E)verything
Programming

Permalänk
Medlem
Skrivet av WebbkodsFrilansaren:

Mycket mustigt PHP-projekt må jag säga!

Tack så mycket för att du delar med dig. Det är mycket roligt att få hoppa in och kika på någon annans WebbKodProjekt med helt blinda ögon. Det blir som att hoppa in i någons skapade nivå för allra första gången där allt som är uppenbart för dig som skapat den är helt nytt för mig!

Några saker jag funderar på:

  • Databasskapandet härifrån: https://codeberg.org/airikr/Keizai/src/branch/main/database.s... Det verkar inte finnas några Foreign Keys(FKs)? Detta betyder då att det skulle gå att råka lägga in data för en användare som inte finns registrerad. Om du skapar FKs mellan `users` och `items` och även lägger till "ON DELETE CASCADE" för `items`-tabellen så behöver du bara radera en användare så raderas all deras data automatiskt istället för två separata DELETE-SQLs för det!

  • En rolig kontrast mellan ditt PHP-projekt och mitt JS-projekt är att du har inga kommentarer och det som slog mig då var hur klurigt det kan vara att få ett grepp om varför diverse kod ligger i de filer de ligger i, i vilken ordning, och så vidare. Eller så är jag bara "korkad"! Jag tänker att korta vägledande kommentarer kan ge mentalt stöd som snabbt förklarar kontexten för diverse "kodparagrafer" än att ytterligare mentala resurser ska läggas på att både läsa koden och lista ut varför den ligger där den ligger (varför var någonstans i filen och varför i just den filen, och så vidare). Vid "deployment" så kan man väl ändå ta bort kommentarerna? Vissa företag verkar dock ha policy att "förbjuda kommentarer" vilket jag tycker är konstigt: varför göra det mentalt mer ansträngande att läsa kod om man kan göra det enklare?

  • Din SQL() funktion här: https://codeberg.org/airikr/Keizai/src/branch/main/functions/... Räcker det med "Prepare" och loopande "bindValue" för att säkra mot SQL Injections & XSS? Jag är ljusår från Databasadmin så därför jag frågar om du själv vet! Annars kanske loopa igenom varje value med strip_tags & real_escape_string också som en extra säkerhetsimplementering?

Jag diggar att du har implementerat kryptering av data innan det lagras i databas. Det är något själv jag vill lära mig inom SQL för att ta "Databas-pelaren" inom Webbutveckling till en riktig branschstandardnivå!

Jag diggar också din användning av .htaccess vilket är en ytterligare sak som jag inte har fått lära mig än så länge i min pågående distansutbildning inom Webbutvecklingsprogrammet. Det är ju en sådan där liten detalj som borde finnas med i alla nybörjarkurser inom Webbutveckling så att man kan göra så mycket rätt som möjligt från början. Om jag tolkat rätt i din .htaccess-fil så går det INTE att surfa direkt till PHP-filernas namn om man känner till dem?

Om du vill så får du gärna kika på mitt motsvarande JS-projekt här och "såga/konstrukivt kritisera" det hur mycket du än vill (jag lägger ingen "stolthet" i mitt kodande än så länge då jag är student och söker efter branschmentor).

Kortfattat om mitt eget JS-projekt så är det som "ett förenklat HTML+CSS UI" där du skriver in HTML-element i olika nivåer (under HTML-flik) - dessa visas DOM-renderade under "OUTPUT", och sedan CSS-regler (under CSS-flik) till dem som sedan ska kunna styras med reglage istället för klassisk manuell skriftlig inmatning av värden. Det sistnämnda är den biten jag arbetar med nu då det är klurigt rent datastruktur- & algoritmmässigt talat. Just nu har jag några förskapade CSS-regler för p, nav, ul, li för testsyften.

Berätta gärna om du personligen upplever att "flitigt kommenterade" ger något mentalt stöd eller om det bara stör i kodläsandet. Kan mycket väl vara så att min hypotes om vägledande kommentarer i "kodparagrafer" inte är så mentalt stöttande utan snarare mentalt ansträngande!

Allt som allt i sin helhet: Mycket bra köttat, och bara kötta vidare!

Mvh,
WKL.

Tack, tack

  • Det där visste jag faktiskt inte. Får ta och kika närmare på det. Tack!

  • Valde att inte lägga in kommentarer i källkoden, då jag har planer till att skriva en wiki för Keizai Men jag håller med dig, kommentarer i en källkod är väldigt nödvändigt och bra. I projektet jag arbetade med innan Keizai, la jag till kommentarer i stort sett överallt. Till och med onödiga kommentarer så som "rubrik" xD

  • Har noll koll på sånt, tyvärr. En vän till mig knackade ihop den där funktionen för kanske 10 år sen. Kanske borde ta och förbättra den eller nått sånt

Hehe, ja, säkerhet är väldigt viktigt. Du kan se själva funktionen för krypteringen och avkrypteringen i functions/endecrypt.php.

Bara att läsa och lära då Stack Overflow är annars en väldigt bra läroplats (och PHP Portalen när den fanns under 00-talet). Det är främst där som jag har lärt mig nästan allt jag kan nu för tiden.

Du använder dig av const och liknande i din JavaScript-kod, något jag inte kör med och inte heller lärt mig än. Vet bara att const är motsvarigheten till var, men det är i stort sett det absolut enda xD Jag knackar mest i jQuery. Borde lära mig React, men orkar inte, även om det är typ samma som jQuery (vad jag minns från när jag kollade i en guide).

Enligt mig ska kommentarer vara överallt i en källkod. Men då gäller det även att uppdatera kommentarerna så fort man har flyttat/ändrat någonstans, vilket bara är extra-arbete. Det är främst därför jag valde att inte lägga in kommentarer i källkoden för Keizai Får se när jag skriver wikin för projektet.

Hehe, man tackar Och detsamma!

Visa signatur

Citera mig om du vill att jag ska hitta till ditt svar.
airikr.me. Andra projekt: Keizai, Koroth, Serenum & Enc.

Permalänk
Inaktiv
Skrivet av Airikr:

Tack, tack

  • Det där visste jag faktiskt inte. Får ta och kika närmare på det. Tack!

  • Valde att inte lägga in kommentarer i källkoden, då jag har planer till att skriva en wiki för Keizai Men jag håller med dig, kommentarer i en källkod är väldigt nödvändigt och bra. I projektet jag arbetade med innan Keizai, la jag till kommentarer i stort sett överallt. Till och med onödiga kommentarer så som "rubrik" xD

  • Har noll koll på sånt, tyvärr. En vän till mig knackade ihop den där funktionen för kanske 10 år sen. Kanske borde ta och förbättra den eller nått sånt

Hehe, ja, säkerhet är väldigt viktigt. Du kan se själva funktionen för krypteringen och avkrypteringen i functions/endecrypt.php.

Bara att läsa och lära då Stack Overflow är annars en väldigt bra läroplats (och PHPPortalen när den fanns under 00-talet). Det är främst där som jag har lärt mig nästan allt jag kan nu för tiden.

Du använder dig av const och liknande i din JavaScript-kod, något jag inte kör med och inte heller lärt mig än. Vet bara att const är motsvarigheten till var, men det är i stort sett det absolut enda xD Jag knackar mest i jQuery. Borde lära mig React, men orkar inte, även om det är typ samma som jQuery (vad jag minns från när jag kollade i en guide).

Enligt mig ska kommentarer vara överallt i en källkod. Men då gäller det även att uppdatera kommentarerna så fort man har flyttat/ändrat någonstans, vilket bara är extra-arbete. Det är främst därför jag valde att inte lägga in kommentarer i källkoden för Keizai Får se när jag skriver wikin för projektet.

Hehe, man tackar Och detsamma!

Är React samma som jQuery? 🤔
React är ett komponentbaserat bibliotek och jQuery är väl snarare ett utility-lib?

Permalänk
Medlem
Skrivet av anon320419:

Är React samma som jQuery? 🤔
React är ett komponentbaserat bibliotek och jQuery är väl snarare ett utility-lib?

Det såg liknande ut sist jag kikade på en guide (har tyvärr inte länken kvar, måste leta efter den för det var en bra guide). Eller så är jag helt ute och simmar som vanligt xD

Visa signatur

Citera mig om du vill att jag ska hitta till ditt svar.
airikr.me. Andra projekt: Keizai, Koroth, Serenum & Enc.

Permalänk
Medlem
Skrivet av Airikr:

Du använder dig av const och liknande i din JavaScript-kod, något jag inte kör med och inte heller lärt mig än. Vet bara att const är motsvarigheten till var, men det är i stort sett det absolut enda xD

Nja, motsvarigheten till var är let. const medför att variabeln blir en konstant och därmed inte kan omdefinieras.

En anledning till att man normalt sett inte längre använder var är för att sådana variabler utsätts för s.k. hoisting, vilket innebär att det går att komma åt variabeln innan den blivit definierad, vilket kan orsaka buggar.

Visa signatur

AMD Ryzen 7 1700X 3.8 GHz 20MB | ASUS PRIME X370-PRO | MSI GeForce GTX 1080 Gaming X 8GB | G.Skill 16GB DDR4 3200 MHz CL14 Flare X | Corsair RM650x 650W

Permalänk
Medlem
Skrivet av noMad17:

Nja, motsvarigheten till var är let. const medför att variabeln blir en konstant och därmed inte kan omdefinieras.

En anledning till att man normalt sett inte längre använder var är för att sådana variabler utsätts för s.k. hoisting, vilket innebär att det går att komma åt variabeln innan den blivit definierad, vilket kan orsaka buggar.

Oh. Tack för rättelsen Och tack för att du visade mig hur man sätter kod inom "kodfnuttar" (cmd-taggen). Har längtat efter en sådan här.

Visa signatur

Citera mig om du vill att jag ska hitta till ditt svar.
airikr.me. Andra projekt: Keizai, Koroth, Serenum & Enc.

Permalänk
Medlem

Kul projekt.
Jag har själv mycket kvar att lära och är relativt färdig med mitt nuvarande webbprojekt (version 1). Småpular bara lite på html och css just nu.
Men några kodförslag.

• Gällande kommentarer.
Jag själv skrev väldigt lite kommentarer när jag kom tillbaka till programmeringen. Det var ofta att jag knappt själv förstod vad min kod gjorde. Mestadels egentligen för att det var spaghettikod, men även för att jag inte hade några kommentarer.
Men så började jag följa en Twitch streamer (spelutvecklare) som nästan skriver noveller ibland när han kommenterar sin kod. Kan säga att det förändrade min syn på att skriva kommentarer och jag skriver nu mycket fler och mer genomtänkta kommentarer. Ibland på flera rader.
Jag skriver även båda PHPDoc och JSDoc för extra tydlighet.
JSDoc
PHPDoc

• Försök döpa om dina php dokument och funktioner så det blir mer tydligt vad de gör och vad de används till.

• Dela upp PHP och HTML så gott det går, blanda inte.Tänk template.
Lägg din PHP längst upp i dokumentet och där efter din HTML längst ned. HTML koden blir som en slags template där du sedan bara matar in variabler där det behövs.

Tog inspiration av din checkbox kod.
Här är tre andra sett att skriva på. Alla har sina för och nackdelar som du ser.

function checkbox($id, $desc = null, $variable = null, $disabled = false) { $cssDescClass = (!empty($desc) ? '' : ' nodesc'); $checked = ($variable == true ? ' checked' : null); $disabled = ($disabled == false ? null : ' disabled').'>'; $content = '<div class="checkbox'.$cssDescClass.'">'; $content .= '<input id="'.$id.'" type="checkbox" name="check-'.$id.'"'.$checked.$disabled; $content .= '</div>'; return $content; }

function checkbox($id, $desc = null, $variable = null, $disabled = false) { $cssDescClass = (!empty($desc) ? '' : ' nodesc'); $checked = ($variable == true ? ' checked' : null); $disabled = ($disabled == false ? null : ' disabled').'>'; $content = "<div class=\"checkbox{$cssDescClass}\">"; $content .= "<input id=\"{$id}\" type=\"checkbox\" name=\"check-{$id}\"{$checked}{$disabled}"; $content .= "</div>"; return $content; }

Mellanrummet i början av variablerna är flyttade.
All tre rader för $content variabeln är en enda lång sträng.

function checkbox($id, $desc = null, $variable = null, $disabled = false) { $cssDescClass = (!empty($desc) ? '' : 'nodesc'); $checked = ($variable == true ? 'checked' : null); $disabled = ($disabled == false ? null : 'disabled').'>'; $content = "<div class=\"checkbox {$cssDescClass}\"> <input id=\"{$id}\" type=\"checkbox\" name=\"check-{$id}\" {$checked} {$disabled} </div>"; return $content; }

Visa signatur

www.fckdrm.com - DRM år 2025? Ha pyttsan.

Permalänk

På tal om JS så är hela mitt eget hänvisade JS-projekt helt i vanilla JS då jag varken kan jQuery eller React. Kommer att få lära mig Vue nästa månad i min distansutbildning!

Skrivet av ELF:

Kul projekt.
Jag har själv mycket kvar att lära och är relativt färdig med mitt nuvarande webbprojekt (version 1). Småpular bara lite på html och css just nu.

Gällande kommentarer.
Jag själv skrev väldigt lite kommentarer när jag kom tillbaka till programmeringen. Det var ofta att jag knappt själv förstod vad min kod gjorde. Mestadels egentligen för att det var spaghettikod, men även för att jag inte hade några kommentarer.
Men så började jag följa en Twitch streamer (spelutvecklare) som nästan skriver noveller ibland när han kommenterar sin kod. Kan säga att det förändrade min syn på att skriva kommentarer och jag skriver nu mycket fler och mer genomtänkta kommentarer. Ibland på flera rader.
Jag skriver även båda PHPDoc och JSDoc för extra tydlighet.
JSDoc
PHPDoc

Kan även flika in med ett kodförslag om du vill.
Dela upp PHP och HTML så gott det går, blanda inte.Tänk template.
Lägg din PHP längst upp i dokumentet och där efter din HTML längst ned. HTML koden blir som en slags template där du sedan bara matar in variabler där det behövs.

Tog inspiration av din checkbox kod.
Här är tre andra sett att skriva på. Alla har sina för och nackdelar som du ser.

function checkbox($id, $desc = null, $variable = null, $disabled = false) { $cssDescClass = (!empty($desc) ? '' : ' nodesc'); $checked = ($variable == true ? ' checked' : null); $disabled = ($disabled == false ? null : ' disabled').'>'; $content = '<div class="checkbox'.$cssDescClass.'">'; $content .= '<input id="'.$id.'" type="checkbox" name="check-'.$id.'"'.$checked.$disabled; $content .= '</div>'; return $content; }

function checkbox($id, $desc = null, $variable = null, $disabled = false) { $cssDescClass = (!empty($desc) ? '' : ' nodesc'); $checked = ($variable == true ? ' checked' : null); $disabled = ($disabled == false ? null : ' disabled').'>'; $content = "<div class=\"checkbox{$cssDescClass}\">"; $content .= "<input id=\"{$id}\" type=\"checkbox\" name=\"check-{$id}\"{$checked}{$disabled}"; $content .= "</div>"; return $content; }

function checkbox($id, $desc = null, $variable = null, $disabled = false) { $cssDescClass = (!empty($desc) ? '' : ' nodesc'); $checked = ($variable == true ? ' checked' : null); $disabled = ($disabled == false ? null : ' disabled').'>'; // All tre rader är en enda lång strång. $content = "<div class=\"checkbox{$cssDescClass}\"> <input id=\"{$id}\" type=\"checkbox\" name=\"check-{$id}\"{$checked}{$disabled} </div>"; return $content; }

Det här med att separera PHP och HTML/CSS, tänker du då för att PHP är serverbaserad kod och är tänkt att sköta logik och sedan bara skicka iväg färdig HTML med applicerad logik?

Kommentarer har jag kommit in bra i tack vare kommentarskravet från utbildningen. Personligen tycker jag det underlättar en hel del eftersom det låter en skumma igenom koden likt att skumma igenom rubriker från en innehållsförteckning för att veta var saker och ting är som man är intresserad av. Det går också fortare då att se om det är irrelevant det man letar efter i takt med större kodbas.

En annan sak jag upptäckt hjälper åtminstone mig med kodstruktur:

if (input.dataset.attributetype == "class" && input.value == ""){ } if (input.dataset.attributetype == "class" && input.value != ""){ }

Koden ovan skulle kunna ha varit:

if(input.value == ""){ if (input.dataset.attributetype == "class"){ }} if(input.value != ""){ if (input.dataset.attributetype == "class"{ }}

Men den nedersta varianten blir snurrig om det är flera olika `input.dataset.attributetype` som ska kontrolleras för input.value == "" eller var det input.value != ""? Mer kod och man måste skrolla mer och se if-nivåerna för att veta vad det nu var för något än att bara ha två kontroller i samma if-sats. Det gör det mycket mer överskådligt tycker jag (av ren erfarenhet från igår! ).

Liknande går att applicera för PHP också för att underlätta nästlade if-satser.

Mvh,
WKL.

Visa signatur

(V)ulnerabilities
(I)n
(B)asically
(E)verything
Programming

Permalänk
Medlem
Skrivet av WebbkodsFrilansaren:

På tal om JS så är hela mitt eget hänvisade JS-projekt helt i vanilla JS då jag varken kan jQuery eller React. Kommer att få lära mig Vue nästa månad i min distansutbildning!

Det här med att separera PHP och HTML/CSS, tänker du då för att PHP är serverbaserad kod och är tänkt att sköta logik och sedan bara skicka iväg färdig HTML med applicerad logik?

Kommentarer har jag kommit in bra i tack vare kommentarskravet från utbildningen. Personligen tycker jag det underlättar en hel del eftersom det låter en skumma igenom koden likt att skumma igenom rubriker från en innehållsförteckning för att veta var saker och ting är som man är intresserad av. Det går också fortare då att se om det är irrelevant det man letar efter i takt med större kodbas.

En annan sak jag upptäckt hjälper åtminstone mig med kodstruktur:

if (input.dataset.attributetype == "class" && input.value == ""){ } if (input.dataset.attributetype == "class" && input.value != ""){ }

Koden ovan skulle kunna ha varit:

if(input.value == ""){ if (input.dataset.attributetype == "class"){ }} if(input.value != ""){ if (input.dataset.attributetype == "class"{ }}

Men den nedersta varianten blir snurrig om det är flera olika `input.dataset.attributetype` som ska kontrolleras för input.value == "" eller var det input.value != ""? Mer kod och man måste skrolla mer och se if-nivåerna för att veta vad det nu var för något än att bara ha två kontroller i samma if-sats. Det gör det mycket mer överskådligt tycker jag (av ren erfarenhet från igår! ).

Liknande går att applicera för PHP också för att underlätta nästlade if-satser.

Mvh,
WKL.

Kolla igenom den där kodsnutten igen och se ifall det inte finns ett bättre sätt att skriva den på (finns det något argument gemensamt för de två if-satserna?)

Visa signatur

AMD Ryzen 7 1700X 3.8 GHz 20MB | ASUS PRIME X370-PRO | MSI GeForce GTX 1080 Gaming X 8GB | G.Skill 16GB DDR4 3200 MHz CL14 Flare X | Corsair RM650x 650W

Permalänk
Medlem
Skrivet av WebbkodsFrilansaren:

[li]En rolig kontrast mellan ditt PHP-projekt och mitt JS-projekt är att du har inga kommentarer och det som slog mig då var hur klurigt det kan vara att få ett grepp om varför diverse kod ligger i de filer de ligger i, i vilken ordning, och så vidare. Eller så är jag bara "korkad"! Jag tänker att korta vägledande kommentarer kan ge mentalt stöd som snabbt förklarar kontexten för diverse "kodparagrafer" än att ytterligare mentala resurser ska läggas på att både läsa koden och lista ut varför den ligger där den ligger (varför var någonstans i filen och varför i just den filen, och så vidare). Vid "deployment" så kan man väl ändå ta bort kommentarerna? Vissa företag verkar dock ha policy att "förbjuda kommentarer" vilket jag tycker är konstigt: varför göra det mentalt mer ansträngande att läsa kod om man kan göra det enklare? [/li]

Kan inflika på den här kommentaren, nu när jag har några års erfarenhet av professionell utveckling. Kommentarer är bra och viktigt för nya utvecklare mer än det är för mer seniora, av olika skäl.

Många nybörjare får lära sig att man ska kommentera sin kod och får exempel som detta:

// Set active flag to "false" in each element in Results
for (const element of Results) {
element.Active = "false";
}

Denna sorts kommentarer omformulerar egentligen bara vad exakt det koden redan säger, fast på läsbar engelska. För en nybörjare kan det kanske vara behjälpligt, men efter man har kodat ett tag så kan man se på själva koden exakt vad den gör utan att behöva läsa en sammanfattande beskrivning, dvs så är kommentaren helt redundant.

Sen brukar oftast sådana kommentarer som ovan också snabbt bli utdaterade och kanske tillomed ljuga om vad som händer. Skulle man exempelvis lägga till att den också ändrar "lockedDate" fältet på elementet så kan det se ut såhär:

// Set active flag to "false" in each element in Results for (const element of Results) { element.Active = "false"; element.LockedDate = Date.now(); }

Om jag nu inte kommer ihåg att ändra kommentaren och lägga till att den också sätter LockedDate så kommer ju kommentaren vara fel. Du kan också själv ha missförstått vad en viss funktion eller bibliotek gör, så beskriver du den med egna ord på ett sätt som är felaktigt, så kanske nästa programmerare litar på dig och då introducerar en bugg när den använder sig av din kod. Den enda säkra sanningen om vad som faktiskt kommer hända när man koden är vad koden själv säger, inte en ev. kommentar.

Även kommentarer som beskriver en viss längre funktion kan vara lite redundant. Ta följande exempel:

// Gets the user info given an user id and all their permissions and access in the given group. Also logs this access to the db. function getInfo(id, group) { ... }

Här kanske en kommentar verkar vettig? Det kanske är 100 rader kod som gör saker och det är inte helt tydligt vad "getInfo" gör bara genom att läsa namnet. Och vad är id och group egentligen om man inte läser kommentaren? Här är lösningen inte heller nödvändigtvis att man lägger på en kommentar i många fall, utan snarare att man behöver vara tydlig med vad funktionen egentligen gör i redan i funktionsnamnet. Kanske behöver man dela upp funktionen i mindre funktioner för att få en bättre förståelse och översikt om vad som händer? Lösningen hade kanske därför varit något i stil med:

function getUserInfoAndGroupPermissions(userId, groupId) { const userInfo = getUserInfo(userId); const groupInfo = getUserPermissionInGroup(userId, groupId); logAccess(userId, groupId); return { userInfo, groupInfo }; }

Genom att köra på det andra sättet så får man dessutom mer hjälp av ens editor med vad som förväntas skickas in som parametrar när man skrivit klart funktionsnamnet. Sen går det ju förstås att göra det extra tydligt vad den gör med kommentarer också, iaf om man skriver ett bibliotek som andra kan tänkas använda som inte är införstådda i din kod. Men då behöver man oftast bara skriva kommentarer för de funktioner som exponeras för användarna, inte nödvändigtvis de som bara används internt av biblioteket.

När man ska använda
De tillfällen kommentarer kan vara riktigt bra dock är att beskriva VARFÖR man gjort på ett visst sätt, snarare än vad koden gör. Exempel skulle kunna vara:

.... const user = getUser(userId); // If user has many ongoing orders, we need to block them by adding them to CreditGroup: F0001 which corresponds to "blocked" in SAP if (user.pendingOrders > 10) { user.metatag["CreditGroup"] = "F0001" } ...

Här är det tydligt att man inte fattat vad F0001 betyder eller varför man gör som man gör utan en kommentar. När behovet av att öka antalet ordrar ändras, så behöver kommentaren inte uppdateras. Och skulle man inte behöva denna block längre så tar man bara bort kommentaren samtidigt som koden.

Sammanfattning
Det är nödvändigtvis inte dåligt med kommentarer, men ju mer erfaren du är och ju större och snabbt förändrande projekt du jobbar i så är många av dem redundanta och skapar mest trubbel när behoven ändras. Kommentarer som förklarar vad koden gör bör undvikas, men kommentarer som förklarar varför koden gör något kan vara mycket nyttigt.

Permalänk
Medlem
Skrivet av WebbkodsFrilansaren:

Det här med att separera PHP och HTML/CSS, tänker du då för att PHP är serverbaserad kod och är tänkt att sköta logik och sedan bara skicka iväg färdig HTML med applicerad logik?

Enda anledningen skulle jag säga är att det blir lättare att läsa.
Extra tydligt blir det om det är väldigt mycket kod.

Visa signatur

www.fckdrm.com - DRM år 2025? Ha pyttsan.

Permalänk
Skrivet av noMad17:

Kolla igenom den där kodsnutten igen och se ifall det inte finns ett bättre sätt att skriva den på (finns det något argument gemensamt för de två if-satserna?)

Tänker du att `input.dataset.attributetype` och dess värde ska lagras direkt i en variabel som bara kontrollerar om det då innehåller `class` eller annat? Eller tänker du någonting helt annat sätt att skriva det hela på?

En sak jag märkt med att skapa korta variabelnamn för saker och ting gör att jag ibland glömmer bort vad som är vad. Exempelvis har `input.value` ibland lagrats i `correctinput. I just detta JS-projekt så är det väldigt många olika dataset-variabler jag arbetar med så att vara tydlig med vilket jag lagrar/försöker komma åt.

Möjligen att man hade skrivit `DSattributetype` som en förkortning för dataset och sedan vilket. Dock har jag inte gjort det konsekvent nu så att blanda detta i efterhand blir lite tjorvigt!

Mvh,
WKL.

Visa signatur

(V)ulnerabilities
(I)n
(B)asically
(E)verything
Programming

Permalänk
Medlem

Det jag egentligen vill komma fram till är att det är bättre om du gör själva koden mer lättläslig från första början, än att lägga till kommentarer som försöker förklara din otydliga kod. Det kommer också att hjälpa dig hålla funktionerna korta och göra det lättare att refaktorera i framtiden.

Permalänk
Medlem

@WebbkodsFrilansaren kan för övrigt tipsa om denna ”artikel” om clean code. Den är förvisso om javascript, men många av koncepten kan appliceras på PHP och andra programmeringsspråk.

Länkar direkt till delen om kommentarer.
https://github.com/ryanmcdermott/clean-code-javascript#only-c...

Permalänk
Inaktiv
Skrivet av ELF:

Enda anledningen skulle jag säga är att det blir lättare att läsa.
Extra tydligt blir det om det är väldigt mycket kod.

Är ännu tydligare om man har ett API och en separat klient (skriven i TypeScript), men det är väl preferens antar jag. Procedural PHP är väl ökänt för att vara en enda stor röra typ, men gäller nog inte bara PHP dock antar jag.

Permalänk
Medlem
Skrivet av ELF:

Kul projekt.
Jag har själv mycket kvar att lära och är relativt färdig med mitt nuvarande webbprojekt (version 1). Småpular bara lite på html och css just nu.

Vad kul

Skrivet av ELF:

• Gällande kommentarer.
Jag själv skrev väldigt lite kommentarer när jag kom tillbaka till programmeringen. Det var ofta att jag knappt själv förstod vad min kod gjorde. Mestadels egentligen för att det var spaghettikod, men även för att jag inte hade några kommentarer.
Men så började jag följa en Twitch streamer (spelutvecklare) som nästan skriver noveller ibland när han kommenterar sin kod. Kan säga att det förändrade min syn på att skriva kommentarer och jag skriver nu mycket fler och mer genomtänkta kommentarer. Ibland på flera rader.
Jag skriver även båda PHPDoc och JSDoc för extra tydlighet.
JSDoc
PHPDoc

Ja, att ha kommentarer i ens källkod är ju egentligen det allra bästa. Då slipper man skriva en wiki-sida, som ett exempel. Kan försöka och göra detta, för egentligen vill jag ju ha kommentarer i källkoden, men det blir lätt rörigt i huvudet för mig; var ska denna vara, var fanns detta, och så vidare. Det är därför jag uteslöt kommentarer i källkoden för Keizai

Skrivet av ELF:

• Försök döpa om dina php dokument och funktioner så det blir mer tydligt vad de gör och vad de används till.

Vilka filer tänker du på som jag kan förtydliga? Tycker nämligen att jag har gjort filnamnen så tydliga som det bara går.

functions/validate.php tar hand om valideringen, functions/pw-random.php genererar slumpmässiga tecken för lösenord, functions/send-email.php skickar e-postmeddelanden, account-export.php exporterar ens kontodata, page-privacypolicy.php visar integritetspolicysidan.

Skrivet av ELF:

• Dela upp PHP och HTML så gott det går, blanda inte.Tänk template.
Lägg din PHP längst upp i dokumentet och där efter din HTML längst ned. HTML koden blir som en slags template där du sedan bara matar in variabler där det behövs.

När man högerklickar på keizai.se och väljer "Visa källkoden", så visas allt på en och samma rad. Detta gillar jag. Om man vill se allt så som det egentligen ska se ut, så kan man välja att inspektera något element, eller trycka på F12 (i Firefox) Men varför endast en rad? Inte på grund av att jag vill ha allt på en och samma rad när man väljer att visa källkoden i webbläsaren (det förstnämnda jag tog upp), men jag vill skriva så lite kod som det bara går. Att skriva följande ser bara för grötit för mig:

<p>En paragraf som visar användaragenten: <?php echo $_SERVER['HTTP_USER_AGENT']; ?></p>

Detta är dock en smaksak, om du frågar mig.

Skrivet av ELF:

Tog inspiration av din checkbox kod.
Här är tre andra sett att skriva på. Alla har sina för och nackdelar som du ser.

function checkbox($id, $desc = null, $variable = null, $disabled = false) { $cssDescClass = (!empty($desc) ? '' : ' nodesc'); $checked = ($variable == true ? ' checked' : null); $disabled = ($disabled == false ? null : ' disabled').'>'; $content = '<div class="checkbox'.$cssDescClass.'">'; $content .= '<input id="'.$id.'" type="checkbox" name="check-'.$id.'"'.$checked.$disabled; $content .= '</div>'; return $content; }

function checkbox($id, $desc = null, $variable = null, $disabled = false) { $cssDescClass = (!empty($desc) ? '' : ' nodesc'); $checked = ($variable == true ? ' checked' : null); $disabled = ($disabled == false ? null : ' disabled').'>'; $content = "<div class=\"checkbox{$cssDescClass}\">"; $content .= "<input id=\"{$id}\" type=\"checkbox\" name=\"check-{$id}\"{$checked}{$disabled}"; $content .= "</div>"; return $content; }

Mellanrummet i början av variablerna är flyttade.
All tre rader för $content variabeln är en enda lång sträng.

function checkbox($id, $desc = null, $variable = null, $disabled = false) { $cssDescClass = (!empty($desc) ? '' : 'nodesc'); $checked = ($variable == true ? 'checked' : null); $disabled = ($disabled == false ? null : 'disabled').'>'; $content = "<div class=\"checkbox {$cssDescClass}\"> <input id=\"{$id}\" type=\"checkbox\" name=\"check-{$id}\" {$checked} {$disabled} </div>"; return $content; }

Tack! Ja, mycket av källkoden för Keizai är rätt slarvigt skrivet. Har tänkt hur jag vill att det ska fungera, men inte tänkt på att förfina det hela efteråt.

Visa signatur

Citera mig om du vill att jag ska hitta till ditt svar.
airikr.me. Andra projekt: Keizai, Koroth, Serenum & Enc.

Permalänk
Medlem
Skrivet av Airikr:

Vilka filer tänker du på som jag kan förtydliga? Tycker nämligen att jag har gjort filnamnen så tydliga som det bara går.

functions/validate.php tar hand om valideringen, functions/pw-random.php genererar slumpmässiga tecken för lösenord, functions/send-email.php skickar e-postmeddelanden, account-export.php exporterar ens kontodata, page-privacypolicy.php visar integritetspolicysidan.

Codeberg verkar ligga nere. Kommer inte ihåg vad jag tänkte på.

Skrivet av Airikr:

Att skriva följande ser bara för grötit för mig:

<p>En paragraf som visar användaragenten: <?php echo $_SERVER['HTTP_USER_AGENT']; ?></p>

Om du har missat det så finns även shorthand echo att tillgå.

<p>En paragraf som visar användaragenten: <?=$_SERVER['HTTP_USER_AGENT']?></p>

Visa signatur

www.fckdrm.com - DRM år 2025? Ha pyttsan.

Permalänk
Medlem
Skrivet av anon320419:

Är ännu tydligare om man har ett API och en separat klient (skriven i TypeScript), men det är väl preferens antar jag. Procedural PHP är väl ökänt för att vara en enda stor röra typ, men gäller nog inte bara PHP dock antar jag.

Du syftar på att man skulle köra det client side istället?

Visa signatur

www.fckdrm.com - DRM år 2025? Ha pyttsan.

Permalänk
Inaktiv
Skrivet av ELF:

Du syftar på att man skulle köra det client side istället?

Ja, separat frontend och backend.
Mina filer såg också ut sådär som TS filer när jag började skriva kod, började med PHP och det var en enda stor kladdig röra med PHP, HTML, CSS, JS, SQL i samma filer. En mardröm. Sen går det ju att göra det snyggare även om man blandar allt, men är enligt mitt tycke bättre att separera.

Permalänk
Medlem
Skrivet av ELF:

Om du har missat det så finns även shorthand echo att tillgå.

<p>En paragraf som visar användaragenten: <?=$_SERVER['HTTP_USER_AGENT']?></p>

Nä, har inte missat det Men vad är egentligen fördelarna med att ha det så som du nämner?

Visa signatur

Citera mig om du vill att jag ska hitta till ditt svar.
airikr.me. Andra projekt: Keizai, Koroth, Serenum & Enc.

Permalänk
Medlem
Skrivet av Airikr:

Nä, har inte missat det Men vad är egentligen fördelarna med att ha det så som du nämner?

Lättare att läsa och skriva, med mindre tecken

Permalänk
Medlem
Skrivet av martengooz:

Lättare att läsa och skriva, med mindre tecken

Ok, så ungefär som en smaksak, främst när det kommer till att skriva koden Än så länge behåller jag mitt kodsätt.

Visa signatur

Citera mig om du vill att jag ska hitta till ditt svar.
airikr.me. Andra projekt: Keizai, Koroth, Serenum & Enc.

Permalänk
Medlem

Ja det kan du göra, även om jag inte ser varför du skulle vilja skriva fler tecken för samma resultat

Men kan vara värt att tänka på om du vill jobba med andra utvecklare. Då kan det vara bra att använda sig av vissa stilregler och sätt att skriva kod som gör det enklare för andra att läsa och förstå den.

Permalänk
Medlem
Skrivet av martengooz:

Ja det kan du göra, även om jag inte ser varför du skulle vilja skriva fler tecken för samma resultat

Men kan vara värt att tänka på om du vill jobba med andra utvecklare. Då kan det vara bra att använda sig av vissa stilregler och sätt att skriva kod som gör det enklare för andra att läsa och förstå den.

Så sant som du säger

Visa signatur

Citera mig om du vill att jag ska hitta till ditt svar.
airikr.me. Andra projekt: Keizai, Koroth, Serenum & Enc.

Permalänk
Medlem

Skulle vara smutt om man kunde välja ljust tema istället för det tråkiga svarta.

Visa signatur

CPU: 9800X3D
Moderkort: MSI Gaming Plus X670E
GPU: Powercolor RX 9070 XT Hellhound
OS: Bazzite

Permalänk
Medlem

Jag knackar mest C#.

Men gallande kommentarer sa undviker jag det sa mycket jag kan, jag ger hellre tydliga variabelnamn, gor inget om dem blir lite langre, forut var det mer begransat till 6 bokstaver sedan tillkom 2 till, men idag finns inte samma begransning, ej heller hardvarumassigt.

Anvander kommentarer endast dar det kan vara svart att satta sig in i koden aven med bra och tydliga variabelnamn.

Som andra har skrivit, om man anvander kommentarer sa maste man komma ihag att andra dessa, finns inget varre an nar en method eller liknande har andrats men inte kommentarerna.

Visa signatur

Profectus est bonus introductionem scitis quoniam coepit usquam

Permalänk
Medlem
Skrivet av Hakinger:

Skulle vara smutt om man kunde välja ljust tema istället för det tråkiga svarta.

Det kan du, men just nu endast som inloggad. Gå till inställningar co kryssa sen i "Använd ett ljust tema" under "Alternativ".

Skrivet av Mahkizmo:

Jag knackar mest C#.

Men gallande kommentarer sa undviker jag det sa mycket jag kan, jag ger hellre tydliga variabelnamn, gor inget om dem blir lite langre, forut var det mer begransat till 6 bokstaver sedan tillkom 2 till, men idag finns inte samma begransning, ej heller hardvarumassigt.

Anvander kommentarer endast dar det kan vara svart att satta sig in i koden aven med bra och tydliga variabelnamn.

Som andra har skrivit, om man anvander kommentarer sa maste man komma ihag att andra dessa, finns inget varre an nar en method eller liknande har andrats men inte kommentarerna.

Vill du berätta varför du vill undvika kommentarer så mycket som du kan?

Ja, helt klart, och det är ju en fin liten utmaning Jag lade till detaljerade kommentarer för 3 filer förut, men blev snabbt hjärntrött. Blev då påmind om varför jag skippade att lägga till kommentarer för Keizai :/ Får se om jag fortsätter lägga in kommentarer till de andra filerna. Kanske är bättre med en wiki som förklarar allt.

Lade till "just nu" då jag arbetar på att man ska kunna växla tema som utloggad på keizai.se
Visa signatur

Citera mig om du vill att jag ska hitta till ditt svar.
airikr.me. Andra projekt: Keizai, Koroth, Serenum & Enc.

Permalänk
Medlem
Skrivet av martengooz:

Intressant. Har ju förstått att kommentarer i källkoden inte är ett krav, men många skulle förstå koden mer, om det fanns kommentarer, främst som beskriver var till exempel en funktion kan hittas bland alla filer.

Skrivet av Hakinger:

Skulle vara smutt om man kunde välja ljust tema istället för det tråkiga svarta.

Har nu gjort så att det är enklare att byta tema, även när man är utloggad. Ändringarna sparas med hjälp av localStorage när man är utloggad. Så fort man loggar in, tas datan i localStorage bort, då den inte behövs då allt sparas då för sitt konto.

Ändringslogg: https://codeberg.org/airikr/Keizai/commit/0bfaa7fe144717ca43d...

@WebbkodsFrilansaren @ELF Lade till kommentarer i .htaccess, account-export.php, account-signout.php och index.php innan jag blev hjärntrött och lade ner det hela för i dag. Men som det ser ut nu, tycker ni det är enklare att förstå källkoden?

Visa signatur

Citera mig om du vill att jag ska hitta till ditt svar.
airikr.me. Andra projekt: Keizai, Koroth, Serenum & Enc.

Permalänk
Medlem
Skrivet av Mahkizmo:

Jag knackar mest C#.

Men gallande kommentarer sa undviker jag det sa mycket jag kan, jag ger hellre tydliga variabelnamn, gor inget om dem blir lite langre, forut var det mer begransat till 6 bokstaver sedan tillkom 2 till, men idag finns inte samma begransning, ej heller hardvarumassigt.

Anvander kommentarer endast dar det kan vara svart att satta sig in i koden aven med bra och tydliga variabelnamn.

Som andra har skrivit, om man anvander kommentarer sa maste man komma ihag att andra dessa, finns inget varre an nar en method eller liknande har andrats men inte kommentarerna.

I just C# använder jag /// och får då metodkommentarer, detta görs i huvudsak på metoder som inte är private för just klassen utan för att beskriva hur man använder en metod och en kortare beskrivning av de in / ut-parametrar man får.
Det tycker jag räcker långt som dokumentation. I övrigt brukar jag bara kommentera om jag själv anser att där är ett stycke viktig / komplicerad logik som nästa utvecklare kan behöva förstå.

Hobbyprojekt brukar jag istället skriva i javascript, node ihop med någon SPA. där är det sport att inte kommentera alls.