WN  

Gå tillbaka   WN > Allmänt > Nyheter

Svara
 
Ämnesverktyg Visningsalternativ
Gammal 2016-08-22, 11:21   #31
jayzee
Har WN som tidsfördriv
 
Reg.datum: Aug 2008
Inlägg: 1 071
Standard

Citat:
Ursprungligen postat av webtigerteam Visa inlägg
Kan du rekommendera några verktyg som hittar buggar i JavaScript?
Lycka till att hitta sånt till ett otypat och direkt tolkat programmeringsspråk.
Lint/hint är bara ämnade för kodkvalité.
Gammal 2016-08-22, 18:44   #32
Nerix
Flitig postare
 
Reg.datum: Oct 2010
Inlägg: 393
Standard

Citat:
Ursprungligen postat av webtigerteam Visa inlägg
En linter kan vara bra om man arbetar i ett team, och kommit överens om att koden ska se ut på ett speciellt sätt.
Nej, de primära syftet är att hitta kod som rent semantiskt är rätt, alltså där kompilatorn säger ok, men där chansen är stor att du och interpretatorn har delade meningar. Te.x semikolon och den icke-determinism som avsaknaden kan innebära.

Citat:
Ursprungligen postat av webtigerteam Visa inlägg
Jag tycker dock det läggs allt för mycket tid på meta-programmering, till exempel omstrukturering av koden för att hålla raderna under 80 tecken, vilket ibland kan kräva kluriga lösningar som gör koden svårare att förstå.
Meta-programmering har inget med struktur att göra.

Förstår du de statistiska sambandet mellan buggar och kodkomplexitet?

Citat:
Ursprungligen postat av webtigerteam Visa inlägg
importering i headern uppmanar till att använda globala variabler! Jag försöker undvika globala variabler så långt som möjligt.
Nej. Importering av extern kod i de flesta Javascript-JIT är blockerande. Gör du en import mitt i koden så blockar detta hela eventloopen och då även gränssnittet.

För att inte nämna de optimeringsproblem din JIT utsätts för när kod med sidoeffekter laddas in under körning. Har du te.x koll på hur icke-deterministisk kod påverkar din prestanda?

Citat:
Ursprungligen postat av webtigerteam Visa inlägg
En unik grej med modul-systemet common-js är att man kan importera moduler lokalt!! Koden blir så mycket lättare att förstå då.
Så vitt jag vet så tillåter alla importeringssystem detta.

Citat:
Ursprungligen postat av webtigerteam Visa inlägg
'==' istället för '===' ... Om jag skulle skriva if(foo===undefined) skulle jag även behöva lägga till if(foo===null). Så det är lite av en bekvämlighet, jag fångar två flugor i en smäll.
I de fallet är `if(foo)` att rekommendera. Att du försöker jämföra med undefined och null tyder på att du har andra, mer fundamentala problem, i din implementering. Fråga dig själv varför dessa världen introducerades från första början- Odefinderade världen representerar ett odefinerat tillstånd, alltså en bugg.

Citat:
Ursprungligen postat av webtigerteam Visa inlägg
Man bör dock undvika att jämföra olika typer. Ex: if("42"==42) . Men vad hjälper det om det blir false i stället för true !? Eventuella buggar kvarstår ändå. Man bör i stället konvertera alla nummer till den typ man vill ha. Ex: var age=parseInt(request.form.age) för att vara på den säkra sidan.
Tvetydlig kod är vad som skapar buggar (och i de här fallet även prestandaproblem). På samma vis som `==` operatorn inte ska användas så ska `++` inte användas.

Om vi bortsätt från koden du postade så är de största misstaget du gör att tro att du är smartare än miljön du befinner dig i. För att kunna avgöra huruvida felen lintern påpekade är värt att fixa eller ej så behöver du grundläggande kunskap inom bl.a beräkningsmodeller, kompilatorer, typsystem, matematisk statistik och miljön koden ska köras i, te.x Googles V8-motor.

Varför inte bygga upp nödvändig kunskap parallellt och förlita dig på de verktyg som finns?

Citat:
Ursprungligen postat av jayzee Visa inlägg
Lycka till att hitta sånt till ett otypat och direkt tolkat programmeringsspråk.
Lint/hint är bara ämnade för kodkvalité.
FlowType (https://flowtype.org/) hjälper till med de här. Den kan, utan annoteringar, härleda typer och fel i din kod. Te.x `function(x) {x.length}(null) // => Error: null is not a string;

Senast redigerad av Nerix den 2016-08-22 klockan 18:47
Gammal 2016-08-22, 19:10   #33
Lindalicious
Mycket flitig postare
 
Reg.datum: Oct 2013
Inlägg: 746
Standard

Vet inte om gratis är bra och går att lita på i längden. Själv köpte jag en certifikat från Namecheap https://www.namecheap.com/security/s...tificates.aspx finns för $10 dollar per år och dyrare beroende på vad man behöver.
Gammal 2016-08-23, 11:02   #34
webtigerteam
Nykomling
 
Reg.datum: Aug 2016
Inlägg: 27
Standard

Citat:
Nej. Importering av extern kod i de flesta Javascript-JIT är blockerande. Gör du en import mitt i koden så blockar detta hela eventloopen och då även gränssnittet.

För att inte nämna de optimeringsproblem din JIT utsätts för när kod med sidoeffekter laddas in under körning. Har du te.x koll på hur icke-deterministisk kod påverkar din prestanda?
Moduler cachas i NodeJS. Och lokala variabler går ofta lite fortare att hämta! Men även om det gjorde koden segare så är det onödigt att optimera utan att mäta först!


Citat:
I de fallet är `if(foo)` att rekommendera. Att du försöker jämföra med undefined och null tyder på att du har andra, mer fundamentala problem, i din implementering.
Fråga dig själv varför dessa världen introducerades från första början- Odefinderade världen representerar ett odefinerat tillstånd, alltså en bugg.
Det bästa är if(foo === undefined || foo === null)

Det näst bästa är if(foo == undefined)

Men det sämsta är if(!foo) för att det finns för många "false-positive", det skulle även trigga false, noll, strängen noll, tom sträng, tom array, eller array med noll, vilket ibland är ett godtagbart värde.

Du har rätt i att undefined ofta tyder på en bugg ...

Ta följande kod som exempel:

Kod:
function test(a, b) {
	console.log(a + b);
}
test(1);
Lintern klagar på följande:

1:1 - Expected a function expression.
1:1 - Missing JSDoc comment.
1:1 - Use the global form of 'use strict'.
1:14 - Missing space before function parentheses.
1:15 - Identifier name 'a' is too short (< 2).
1:18 - Identifier name 'b' is too short (< 2).
1:21 - Block must be padded by blank lines.
2:2 - Expected indentation of 4 space characters but found 0.
2:2 - Unexpected console statement.
3:1 - Block must be padded by blank lines.
4:2 - Newline required at end of file but not found.
4:6 - No magic number: 1. (no-magic-numbers)


OMG! 12 fel!! Bäst att fixa dem ...


Kod:
"use strict";

var ett = 1;

/**
 * Plussa två tal
 * @param {number} tal1 - Första talet.
 * @param {number} tal2 - Andra talet.
 * @returns {number} Summan av de två talen
 */
var test = function test (tal1, tal2) {

    return tal1 + tal2;
	
};

test(ett);

Men ända felet med första koden är att vi hade glömt andra argumentet (b), vilket är en ganska vanlig orsak till buggar. Felet kvarstår dock efter att vi fixat alla "fel" som Lintern hittade.

Här har du ett exempel på varför jag jämför med undefined:

Kod:
if(arg1 == undefined) throw new Error("arg1=" + arg1 + " saknas!")

Jag rekommenderar denna video: https://www.youtube.com/watch?v=wf-BqAjZb8M (Raymond Hettinger - Beyond PEP 8 -- Best practices for beautiful intelligible code - PyCon 2015)

Senast redigerad av webtigerteam den 2016-08-23 klockan 11:06
Gammal 2016-08-23, 13:58   #35
jayzee
Har WN som tidsfördriv
 
Reg.datum: Aug 2008
Inlägg: 1 071
Standard

Kanske dags att starta egen tråd om ECMAscript best practices?
Gammal 2016-08-23, 21:20   #36
Nerix
Flitig postare
 
Reg.datum: Oct 2010
Inlägg: 393
Standard

Citat:
Ursprungligen postat av webtigerteam Visa inlägg
Moduler cachas i NodeJS. Och lokala variabler går ofta lite fortare att hämta! Men även om det gjorde koden segare så är det onödigt att optimera utan att mäta först!




Det bästa är if(foo === undefined || foo === null)

Det näst bästa är if(foo == undefined)

Men det sämsta är if(!foo) för att det finns för många "false-positive", det skulle även trigga false, noll, strängen noll, tom sträng, tom array, eller array med noll, vilket ibland är ett godtagbart värde.

Du har rätt i att undefined ofta tyder på en bugg ...

Ta följande kod som exempel:

Kod:
function test(a, b) {
	console.log(a + b);
}
test(1);
Lintern klagar på följande:

1:1 - Expected a function expression.
1:1 - Missing JSDoc comment.
1:1 - Use the global form of 'use strict'.
1:14 - Missing space before function parentheses.
1:15 - Identifier name 'a' is too short (< 2).
1:18 - Identifier name 'b' is too short (< 2).
1:21 - Block must be padded by blank lines.
2:2 - Expected indentation of 4 space characters but found 0.
2:2 - Unexpected console statement.
3:1 - Block must be padded by blank lines.
4:2 - Newline required at end of file but not found.
4:6 - No magic number: 1. (no-magic-numbers)


OMG! 12 fel!! Bäst att fixa dem ...


Kod:
"use strict";

var ett = 1;

/**
 * Plussa två tal
 * @param {number} tal1 - Första talet.
 * @param {number} tal2 - Andra talet.
 * @returns {number} Summan av de två talen
 */
var test = function test (tal1, tal2) {

    return tal1 + tal2;
	
};

test(ett);

Men ända felet med första koden är att vi hade glömt andra argumentet (b), vilket är en ganska vanlig orsak till buggar. Felet kvarstår dock efter att vi fixat alla "fel" som Lintern hittade.

Här har du ett exempel på varför jag jämför med undefined:

Kod:
if(arg1 == undefined) throw new Error("arg1=" + arg1 + " saknas!")

Jag rekommenderar denna video: https://www.youtube.com/watch?v=wf-BqAjZb8M (Raymond Hettinger - Beyond PEP 8 -- Best practices for beautiful intelligible code - PyCon 2015)
Så vilken slutsats drar du från ovanstående inlägg och varför?

Citat:
Ursprungligen postat av jayzee Visa inlägg
Kanske dags att starta egen tråd om ECMAscript best practices?
De hade varit bra. Om någon moderator vill bryta ut våra inlägg så vore de toppen. Är dock osäker på titeln då ämnet är ganska brett.
Gammal 2016-08-23, 22:07   #37
Nerix
Flitig postare
 
Reg.datum: Oct 2010
Inlägg: 393
Standard

Citat:
Ursprungligen postat av webtigerteam Visa inlägg
Kod:
function test(a, b) {
	console.log(a + b);
}
test(1);
Lintern klagar på följande:

1:1 - Expected a function expression.
1:1 - Missing JSDoc comment.
1:1 - Use the global form of 'use strict'.
1:14 - Missing space before function parentheses.
1:15 - Identifier name 'a' is too short (< 2).
1:18 - Identifier name 'b' is too short (< 2).
1:21 - Block must be padded by blank lines.
2:2 - Expected indentation of 4 space characters but found 0.
2:2 - Unexpected console statement.
3:1 - Block must be padded by blank lines.
4:2 - Newline required at end of file but not found.
4:6 - No magic number: 1. (no-magic-numbers)


OMG! 12 fel!! Bäst att fixa dem ...


Kod:
"use strict";

var ett = 1;

/**
 * Plussa två tal
 * @param {number} tal1 - Första talet.
 * @param {number} tal2 - Andra talet.
 * @returns {number} Summan av de två talen
 */
var test = function test (tal1, tal2) {

    return tal1 + tal2;
	
};

test(ett);

Glömde posta vad min linter säger.

Fick ett fel; indenteringen. Har kopplat cmd-ä till --fix i eslint så den fixar automatiskt till en majoritet av alla fel direkt i editorn. Använder Googles regler med 2 undantag och några extra regler. Har bl.a stängt av jsdoc.
Gammal 2016-08-29, 09:35   #38
elitasson
Mycket flitig postare
 
elitassons avatar
 
Reg.datum: Aug 2007
Inlägg: 810
Standard

Citat:
Ursprungligen postat av Lindalicious Visa inlägg
Vet inte om gratis är bra och går att lita på i längden. Själv köpte jag en certifikat från Namecheap https://www.namecheap.com/security/s...tificates.aspx finns för $10 dollar per år och dyrare beroende på vad man behöver.
Har du kollat vilka sponsorer Lets encrypt har?
Gammal 2016-08-29, 15:18   #39
eliasson
Bara ett inlägg till!
 
Reg.datum: Dec 2005
Inlägg: 1 856
Standard

Citat:
Ursprungligen postat av Lindalicious Visa inlägg
Vet inte om gratis är bra och går att lita på i längden. Själv köpte jag en certifikat från Namecheap https://www.namecheap.com/security/s...tificates.aspx finns för $10 dollar per år och dyrare beroende på vad man behöver.
För att få lite "peace of mind" så kan du titta närmare på deras sponsorer och deras senaste inlägg om Mozilla Root Certificate. Jag tror att Let's Encrypt kan bli en betydande spelare inom säkerhet när deras egna Root CA finns i de större webbläsarna osv.
Gammal 2016-09-16, 13:06   #40
webtigerteam
Nykomling
 
Reg.datum: Aug 2016
Inlägg: 27
Standard

Letsencrypt verkar rätt stabilt och kommer förhoppningsvis existera i flera år framöver.

Funderar dock på eventuella problem om man hårdlänkat adresser med httpS:// (S på slutet som i SSL/TSL) och Letsencrypt skulle stänga ner eller börja ta ordentligt betalt.
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 
Ämnesverktyg
Visningsalternativ

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 14:05.

WN - Topp

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson