Follow along with the video below to see how to install our site as a web app on your home screen.
Huomio: This feature may not be available in some browsers.
TechBBS-foorumin Piparkakkutalokisa 2024 -äänestys käynnissä! Käy äänestämässä 22 osallistujan joukosta kolme mielestäsi hienointa kilpailutyötä ja osallistu arvontaan! Linkki äänestykseen >>>
Mitähän se herjaa? Siitä varmaan voisi päätellä mikä on vikana.
Mikä tuossa pielessä? Herjaa console.log osiota.
Mitähän se herjaa? Siitä varmaan voisi päätellä mikä on vikana.
Yleisesti, kannattaa varmaan laittaa itse virheilmoitus näkyville kun kysyy apua. Samoin koodin voisi laittaa ihan tekstinä, vaikka code-tagien sisään eikä kuvana niin auttajien olisi helpompi tutkia syytä.
const laskeNelio = () => {
const numero = parseInt(document.querySelector('#numero').textContent);
if (isNaN(numero)) {
throw Error('Epäkelpo numero');
}
console.log(`Luvun ${numero} neliö on ${Math.pow(numero, 2)}`);
};
Eiköhän tuossa ole tarkoitus oppia vain tuo onclick handler ja esim. soveltaa jotain aikaisemmin opittua, kuten muuttujien ja stringien yhdistämistä. Jos ihan ummikkoja kyseessä, niin vähän turhaa että heti pitäisi sisäistää validoinnit ja muut jutut. Parempi mennä pienin askelin eteenpäin niin tulee onnistumisen tunteita ja ei ala ahdistamaan kun ei ymmärrä kaikkea.On se JS vaan ihmelaitos, kun osaa laskea kertolaskutkin stringeistä (tekee toki type conversionin, kun kertolasku). Esim. plussalaskuna homma ei toimisi.
Koodi voisi näyttää pikemminkin tältä:
JavaScript:const laskeNelio = () => { const numero = parseInt(document.querySelector('#numero').textContent); if (isNaN(numero)) { throw Error('Epäkelpo numero'); } console.log(`Luvun ${numero} neliö on ${Math.pow(numero, 2)}`); };
Tuossa itse tehtävänannossa (ja esimerkkikoodissa) on valitettavasti useita epäkelpoja oletuksia enkä edes ymmärrä, miksi tällaista opetetaan. Tehtävän tarkoitus lienee ratkaista typerä ongelma typerällä tavalla. Vaikka suoraan voitaisiin opettaa itse ongelman ratkaisemista. Ilman, että tarvitsee mennä edes syvään päätyyn. Noh, toivottavasti myöhemmin "päästään eteenpäin" tuolla tasolla. Mutta IMO sekä opettajan että opiskelijoiden ajantuhlausta tuollainen...
Juu, ymmärrän kyllä oppimisen tavoitteet sinänsä. Itsekin ollut joskus ummikkona koulun penkillä. Mutta se, että lähestytään hieman vanhakantaisella ajattelulla ja jätetään paljon mahdollisuuksia virheille, ei ole mielestäni kovin loppuun asti ajateltua. Melkein samalla vaivalla, kun saisi opetettua asiat oikein.Eiköhän tuossa ole tarkoitus oppia vain tuo onclick handler ja esim. soveltaa jotain aikaisemmin opittua, kuten muuttujien ja stringien yhdistämistä. Jos ihan ummikkoja kyseessä, niin vähän turhaa että heti pitäisi sisäistää validoinnit ja muut jutut. Parempi mennä pienin askelin eteenpäin niin tulee onnistumisen tunteita ja ei ala ahdistamaan kun ei ymmärrä kaikkea.
Edit: ja täytyy myöntää, että ponnistelin tämän kanssa aikasen pitkään ennen kuin sain ratkaistua tehtävän (tulokset näkyvät siis konsolissa):
Todellakin. Jäi vain askarruttamaan että mitä kaikkea pitää yksinkertaisessakin toteutuksessa ottaa huomioon, jotta se toimisi kuin junan vessa :|Koodisi tähän tehtävään löytyy sanakirjan kohdasta "over-engineering".
Juu, ehkä koulutehtävässä voi hieman oikoa joissakin asioissa (joka ei välttämättä tulevaisuuden kannalta ole fiksua) mutta tosielämässä on tullut monesti huomattua että ensin on joku noin 10 rivin pieni skriptinpätkä ja kun rupeaa ottamaan huomioon vähän asioita niin yhtäkkiä tuon 10 rivin lisäksi onkin 100 riviä syötteen sanitointia, validointia ja kaikenmaailman virhekäsittelyä.Todellakin. Jäi vain askarruttamaan että mitä kaikkea pitää yksinkertaisessakin toteutuksessa ottaa huomioon, jotta se toimisi kuin junan vessa :|
Itse kun nakuttelee React Nativea, niin tuotannossa sovellus vain kaatuu. Siitä sitten käyttäjäpalautteen myötä crashlyticsistä ihmettelemään, että miksi käyttäjät syöttävät desinaali-erottimeksi pisteen sijaan pilkun.
const laskeNelio = (): void => {
const value: string = document.querySelector("#numero").value.replace(",", ".");
if (isNaN(value) || !value){
console.log(`Syöte ${value} ei ole kelvollinen`);
return;
}
console.log(`Luvun ${value} neliö on ${Math.pow(value, 2)}`);
};
document.querySelector("#painike").addEventListener("click", laskeNelio);
const ajaTestit = () => {
// save original values
const [savedClog, savedFromValue] = [console.log, document.querySelector("#numero").value];
// set testing values
let testResult: number = null;
console.log = (value: string): void => testResult = value;
const testitLaskeNelio: {input: any, result: string}[] = [
{ input: 2, result: "Luvun 2 neliö on 4"},
{ input: 1.5, result: "Luvun 1.5 neliö on 2.25"},
{ input: "2", result: "Luvun 2 neliö on 4"},
{ input: "1,5", result: "Luvun 1.5 neliö on 2.25"},
{ input: "beep", result: "Syöte beep ei ole kelvollinen"},
{ input: null, result: "Syöte ei ole kelvollinen"},
];
const tuloksetLaskeNelio = testitLaskeNelio.every((testi) => {
document.querySelector("#numero").value = testi.input;
document.querySelector("#painike").click();
const result = testResult === testi.result;
console.info(`TESTI: aja laskeneliö arvolla: ${testi.input}, tulos: ${result ? "onnistui" : "epäonnistui"}`);
// nullify test result to not mix up the next test
testResult = null;
return result;
});
// reset original values
[console.log, document.querySelector("#numero").value] = [savedClog, savedFromValue];
if (tuloksetLaskeNelio) {
console.log("%cTestit laskeNelio() menevät läpi", "color:green");
return;
}
console.error("Testit laskeNelio() eivät mene läpi");
};
document.querySelector("#testit").addEventListener("click", ajaTestit);