<info>Tillsammans med chefen så har vi bestämt att vi skall kontrollera varandras källkod mellan varven och det är toppen för då kan vi finna problem mycket snabbare. I morgon skall vi göra en ny kodgranskning enligt chefen och jag är lite fundersam på följande kod. Denna är tydlig, men går att göra kortare om man vill... Sitter med VB.NET så därför bli min lösning. Effektivaste är väl att skriva: Lars, har du testat den? Trodde inte .Net tillät konvertering från boolean till int...Annars var min första tanke också något liknande: Jag gör det i smyg! (ang. vad dot.net tillåter) ;-)Utmaningen v22
Vi har två checkboxar och beroende på vad vi väljer så skall olika värden skrivas till en fil. Väljs ingen är värdet 0. Väljs den första är värdet 1. Väljs den andra är värdet 2. Väljs båda är värdet 3. Jag tycker inte att det är riktigt optimalt så utmaningen är att skriva den kortaste och effektivaste motsvarigheten för samma problem.
</info>
// Kontrollera vilken av de 2 som är valda
if (chkConsolidation1.Checked == true && chkConsolidation2.Checked == true) {
w.IniWriteValue("Plan_LogiX", "Consolidation", "3");
}
else if (chkConsolidation1.Checked == true && chkConsolidation2.Checked == false) {
w.IniWriteValue("Plan_LogiX", "Consolidation", "1");
}
else if (chkConsolidation1.Checked == false && chkConsolidation2.Checked == true) {
w.IniWriteValue("Plan_LogiX", "Consolidation", "2");
}
else if (chkConsolidation1.Checked == false && chkConsolidation2.Checked == false) {
w.IniWriteValue("Plan_LogiX", "Consolidation", "0");
}
Obs! Posta era förslag i denna tråd.
Sv: Utmaningen v22
int value = 0;
value += chkConsolidation1.Checked ? 1 : 0;
value += chkConsolidation2.Checked ? 2 : 0;
w.IniWriteValue("Plan_LogiX", "Consolidation", value.ToString());
Sv: Utmaningen v22
Dim ValueInteger As Integer = 0
ValueInteger += IIf(chkConsolidation1.Checked, 1, 0)
ValueInteger += IIf(chkConsolidation2.Checked, 2, 0)
w.IniWriteValue("Plan_LogiX", "Consolidation", ValueInteger.ToString)Sv:Utmaningen v22
Dim ValueInteger As Integer = IIf(chkConsolidation1.Checked, 1, 0) + IIf(chkConsolidation2.Checked, 2, 0)
w.IniWriteValue("Plan_LogiX", "Consolidation", ValueInteger.ToString)
En kortare variant...
Sv: Utmaningen v22
if (chkConsolidation1.Checked)
{
if (chkConsolidation2.Checked)
w.IniWriteValue("Plan_LogiX", "Consolidation", "3");
}
else
{
w.IniWriteValue("Plan_LogiX", "Consolidation", "1");
}
}
else
{
if (chkConsolidation2.Checked)
w.IniWriteValue("Plan_LogiX", "Consolidation", "2");
}
else
{
w.IniWriteValue("Plan_LogiX", "Consolidation", "0");
}
}
Innebär bara två conditional jumps, eller nåt. ;-)
Däremot är det lätt att göra fel i koden.
Vill man skriva det kort:
string x = chkConsolidation1.Checked ? (chkConsolidation2.Checked ? "3" : "1") :
(chkConsolidation2.Checked ? "2" : "0");
w.IniWriteValue("Plan_LogiX", "Consolidation", x);
Men man förlorar nog mycket läsbarhet.
Den lösning jag gillar bäst är nog:
int x = 0;
if (chkConsolidation1.Checked)
x+=1;
if (chkConsolidation2.Checked)
x+=2;
w.IniWriteValue("Plan_LogiX", "Consolidation", x.ToString());
Vilket i bästa fall kan spara in bägge additionerna.
Jag ifrågasätter behovet av att optimera, då detta är kod som troligen bara spara av någon inställning.
Skillnaden mellan original koden och den förändrade koden kommer inte uppmärksammas av användaren på något sätt.
Då koden anropas en gång i samband med sparning och det sker antagligen ingen iteration.
Därför handlar det mer om att åstadkomma lättläst kod som är enkel att underhålla.
Sv: Utmaningen v22
[Flags]
public enum FileType {
None = 0x00,
Consolidation1 = 0x01,
Consolidation2 = 0x02
};
FileType filtyp = FileType.None;
if (chkConsolidation1.Checked) filtyp |= FileType.Consolidation1;
if (chkConsolidation2.Checked) filtyp |= FileType.Consolidation2;
w.IniWriteValue("Plan_LogiX", "Consolidation", ((int)filtyp).ToString());
Sv: Utmaningen v22
w.IniWriteValue("Plan_LogiX", "Consolidation", (Math.Abs(chkConsolidation1.Checked + (chkConsolidation2.Checked * 2))).ToString)
Sv:Utmaningen v22
(int)chkConsolidation1.Checked + ((int)chkConsolidation2.Checked * 2))
Men som sagt jag trodde inte den skulle fungera och orkade inte testa.Sv: Utmaningen v22
den är ful, men den funkar......