Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Option Strict är HELT onödigt!!!!!

Postades av 2005-04-14 10:16:47 - Mathias Thinsz, i forum vb.net, Tråden har 19 Kommentarer och lästs av 694 personer

Jag blir så trött! Jag bråkar dagligen med ett par kollegor som med bestämdhet hävdar att man inte alls behöver Option Strict i VB.net. "Det blir bara en massa onödig kod", hävdar de.

Jag har inte brytt mig så mycket, men nu ska jag hjälpa till i ett projekt och drabbas av detta.

Ge mig lite BRA argument varför man SKA har Option Strict påslaget!


Svara

Sv: Option Strict är HELT onödigt!!!!!

Postades av 2005-04-14 11:18:15 - Morgan Persson

Typsäkerhet, du får inga implicita (omedvetna) typkastningar som VB annars gör.
Ex:
<code>
Dim s As String = "Nu skiter det sig"
Dim i As Integer

i = s
</code>
med Option Strict Off så "funkar det" tills du kör programmet.med Option Strict On så kan du inte ens kompilera, du måste isåfall andra koden till i=Integer.Parse(s) och då är du medveten om att du gör en typomvandling, och kanske tänker du på att s är en sträng och kan innehålla skräp och lägger då till en kontroll av strängen innan den omvandlas.
Så du kommer (förmodligen) att få färre buggar i koden med Option Strict On.


Svara

Sv:Option Strict är HELT onödigt!!!!!

Postades av 2005-04-14 11:30:52 - Mathias Thinsz

Ledsen Morgan, de där argumenten håller inte.

Det är ju ingen skillnad på dessa:

Option Strict = Off

Dim s As String = "Nu skiter det sig"
Dim i As Integer

i = s



Option Strict = On
Dim s As String = "Nu skiter det sig"
Dim i As Integer

i = cInt(s)


Säg att s hade varit innehållet i en textbox som man bara får skriva tal i:

s = Textbox1.Text

Då hade man fått samma problem oavsett vilket av exemplena som man använt. Alltså får man - som de hävdar - bara mer kod. I detta fallet visserligen bara "cInt(...)".


Svara

Sv: Option Strict är HELT onödigt!!!!!

Postades av 2005-04-14 13:06:37 - Mikael Wedham

i = s

Betyder : Jag är dum i huvvet och fattar inte att det kan bli fel.

i = CInt(s)

Betyder : Jag är lite smart och fattar att det KAN bli fel här...
Det jag KANSKE gör då är att jag skiter i Option Strict och kodar min felhantering ändå. och då är jag lite smartare. Men man riskerar att missa ställen där det kan bli fel.
Det smartaste är att köra Option Strict OCH koda felhanteringen. Visst, det blir mer kod, men bra kod...
INGEN är perfekt, man missar alltid något. Detta är en hjälp att hitta felen (visa av dem)

Dessutom heter det Integer.Parse(s) - CInt ligger i VisualBasic - Namespacet och är följdaktligen OND!

/micke


Svara

Sv:Option Strict är HELT onödigt!!!!!

Postades av 2005-04-14 14:34:23 - Per Hultqvist

Det klassiska exemplet är väl just när man använder plustecknet i stället för &-tecknet för att konkatenera strängar:
<code>
Dim s As String = "1"
Dim i As Integer = 0

MessageBox.Show(s + i)
</code>
I detta läget är det inte lätt att veta vad kodarens intentioner var. Ville han slå ihop strängarna "1" och "0" och därmed få ut "10"? Eller ville han summera talen 1 + 0 och få ut siffran 1?

Jag var tvungen att testköra exemplet för att veta vad VB skulle skriva ut, och det visade sig att det blev "1" och inte "10". Detta är ett typexempel på hur fel det kan gå utan Option Strict On.

Det blir ju även "mer kod" att skriva om man har långa beskrivande variabel- och funktionsnamn. Och gillar man inte att skriva mycket kod så skall man ju dessutom inte koda VB överhuvudtaget eftersom det är jobbigare att skriva END IF i stället för }.

Det handlar om att skriva TYDLIG, BUGGFRI och LÄTTUNDERHÅLLEN kod. Det gör man genom att visa tydligt vad man vill. På samma sätt skulle jag aldrig deklarera en variabel utan datatyp och inte heller strunta i public/private framför funktioner. Jag har inte ens lärt mig vilket som är default...jag skriver helt enkelt inte kod som förutsätter att man vet att vilken typkonvertering som kommer att ske, eller vilket scope som är default, eller vilken datatype som är default om man inte anger en typ.

Säg åt dina kollegor att sluta tracka dig och stå på dig. Det är direkt oansvarigt att skriva fulkod när man vet att andra programmerare skall underhålla skiten i framtiden...Det är lika omoraliskt som att parkera på handikapplatser, rycka vingarna av små insekter och att klubba sälar. Kort sagt förkastligt...

Puuh! Ok, jag har lugnat ner mig nu... :-)


Svara

Sv: Option Strict är HELT onödigt!!!!!

Postades av 2005-04-14 15:27:01 - Mikael Sand

Tala bara om var du jobbar Mathias, så ska jag undvika stället som pesten.
Att arbeta med INKOMPETENTA kollegor är det värsta jag vet.

Att inte använda option strict är att be om problem.
End of story


Svara

Sv: Option Strict är HELT onödigt!!!!!

Postades av 2005-04-14 20:26:40 - Morgan Persson

Jovisst.
Men med Option Strict ON på den första så blir det kompileringsfel och det uppmärksammar iallafall utvecklaren på att det behövs en typomvandling, och förhoppningsvis så lägger han/hon också till kod som kontrollerar att man kan göra omvandlingen innan man försöker göra den.
Men som sagt, det går ju inte att hindra någon från att göra korkade/fel saker i koden så länge man följer syntaxen.


Svara

Sv: Option Strict är HELT onödigt!!!!!

Postades av 2005-04-14 22:23:29 - Göran Andersson

Ifall man vill ha ett leksaks-språk så ska man naturligtvis inte ha Option Strict påslaget.

Ifall man däremot vill att VB.NET ska bete sig som ett riktigt kompilerat språk, och utnyttja kompilatorns finesser för att skriva bättre kod, då ska man ha Option Strict och Option Explicit påslagna.

De riktigt hårda grabbarna ställer även in så att alla varningar behandlas som fel. :)


Svara

Sv:Option Strict är HELT onödigt!!!!!

Postades av 2005-04-14 22:44:53 - Patrik Löwendahl

Option Strict är en kompileringsflagga. Hjälpen den ger är helt enkelt att den redan vid kompileringstilfället talar om när en typkonvertering behövs. Det innebär att man förhoppningsvis inte får för många runtime cast fel.

Det här är det enda den är till för. Information vid kompilering.


Svara

Sv:Option Strict är HELT onödigt!!!!!

Postades av 2005-04-15 08:48:09 - Mathias Thinsz

> Dessutom heter det Integer.Parse(s) - CInt ligger i VisualBasic

Jaha, och hur mycket mer kod blir inte DET! :)


Svara

Sv: Option Strict är HELT onödigt!!!!!

Postades av 2005-04-15 09:26:07 - Andreas Håkansson

Mathias,

Skillnaden är att du har lite olika beteende med att använda de olika converterings möjligheterna så som Integer.Parse och Convert.ToInt32 .. detta kan du inte mappa till CInt och känner man inte till de underliggande skillnaderna så kan man heller inte kontrollera beteende i koden.


Svara

Sv: Option Strict är HELT onödigt!!!!!

Postades av 2005-04-15 10:48:16 - Mikael Wedham

>> Dessutom heter det Integer.Parse(s) - CInt ligger i VisualBasic

>Jaha, och hur mycket mer kod blir inte DET! :)


Det var inte mer kod som var syftet här. Det var att Namespacet VisualBasic är OND som var det viktiga. MEN det är ju ett känt faktum att VB-programmerare över lag är lata och slöa, vill inte skriva kod och bryr sig inte om hur det funkar - bara det finns en wizard som löser det med minsta möjliga skrivinsats.

En bra programmerare återanvänder mycket kod.
En dålig programmerare skriver lite kod många gånger.

/micke (VB-programmerare)


Svara

Sv: Option Strict är HELT onödigt!!!!!

Postades av 2005-04-16 04:40:25 - Göran Andersson

>> Dessutom heter det Integer.Parse(s) - CInt ligger i VisualBasic
>
> Jaha, och hur mycket mer kod blir inte DET! :)

Det blir faktiskt mindre kod. Eftersom CInt använder Integer.Parse så blir det mindre kod som körs om man anropar Integer.Parse direkt.

Ju mer man vet om vad som egentligen händer med den kod man skriver, desto effektivare kod kan man skriva.

Om man till exempel vet hur inkapsling (boxing) fungerar, så vet man varför den här koden:

name = "Lag " & i.ToString()

är effektivare än den här:

name = "Lag " & i

(där i är en Integer.)


Svara

Sv:Option Strict är HELT onödigt!!!!!

Postades av 2005-04-16 07:38:58 - Mikael Wedham

Du har ju helt rätt Göran - Men all kod som genereras automatiskt är (enligt Mattias kollegor) bra kod. Det är skrivandet som skall minimeras.

Tangentbordsskräck?

/micke


Svara

Sv: Option Strict är HELT onödigt!!!!!

Postades av 2005-04-16 09:35:59 - Andreas Håkansson

För det första så är inte automatgenererad kod autoamtiskt av ondo, oavsett om det sker i VB.NET, C# eller något annat språk. Om man undviker det av den anledningen så går man miste om väldigt många bra saker med med största sannolikhet kostar man sin arbetsgivare och/eller kund väldigt mycket pengar eftersom man är naiv och föredrar att skriva allt för hand. Men nog om det, tillbaka till <b>CInt</b>

CInt mappar inte alls till <b>Integer.Parse</b> som det sagts. VB.NET kompilatorn mappar om det till en metod vid namnet <b>FromString</b> som är en statisk (<b>Shared</b>) metod i klassen <b>IntegerType</b> och återfinns i namnrymden Microsoft.VisualBasic.CompilerServices

Tar vi oss sedan en titt på implementationen av FromString så ser vi följande

[VB.NET]

Public Shared Function FromString(ByVal Value As String) As Integer
      Dim num1 As Integer
      If (Value Is Nothing) Then
            Return 0
      End If
      Try 
            Dim num2 As Long
            If StringType.IsHexOrOctValue(Value, num2) Then
                  Return CType(num2,Integer)
            End If
            num1 = CType(Math.Round(DoubleType.Parse(Value)),Integer)
      Catch exception1 As  FormatException
            Throw New InvalidCastException(Utils.GetResourceString("InvalidCast_FromStringTo", Strings.Left(Value, 32), "Integer"), exception1)
      End Try
      Return num1
End Function


Vad händer här då. Det första som görs är en kontroll av null (Nothing) värde varpå man retunerar noll. Detta är samma beteende som metoden <b>Convert.ToInt32</b> har. Nästa sak som sker är en kontroll om det inskickade värdet är hexadecimalt eller en octet. Nästa bit är den intressanta.

Först konverteras värdet till en double, varpå man rundar av för att sedan typkonvertera tillbaka till ett heltal. Kontentan är, enligt mig, inte att själva importen eller utnyttjandet av Microsoft.VisualBasic assemblyn som är så farligt - tvärt om så finns det många gobitar i den. Nä, problemet med CInt är att den gång en del omvägar för att lista ut vad man som programmerare vill göra vilket blir en prestanda post vid upprepad användning.

Användande av Integer.Parse och Convert.ToInt32 ger bättre kontroll till en effektivare implemnatation. Sen vill jag påpeka att den största "faran" med Microsoft.VisualBasic är ett den har många saker som ovan som gör att programmerare (speciellt eftersom t.ex CInt markerar som ett keyword i VB.NET editorn) inte känner till den underliggande implementationen och kan avgöra hur det fungerar, samt att eftersom CInt finns varför skulle man använda Integer.Parse eller Convert.ToInt32? Man uppmuntras inte att utforska ramverket när för mycket kaplas in i idiotsäkra wrappers.

Allt är inte av ondo för känner man till hur sakerna i Microsoft.VisualBasic fungerar så kan (och ibland bör) man använda sig av dessa för att minimera utvecklingstiderna, samt att det inte alltid är så avgörande om det tar några millisekunder längre då det kanske inte är en applikation som kräver väldigt god prestanda - och nej jag säger inte att genom att använda CInt och company så får man alltid applikationer med lägreprestanda, vanligtvis finns det andra mer intensiva moment i en applikation som man tjänar på att optimera än att plocka bort lite CInt och andra wrappade uppgifter.


Svara

Sv:Option Strict är HELT onödigt!!!!!

Postades av 2005-04-16 17:25:10 - Göran Andersson

Där ser man... mycket värre än jag befarade...


Svara

Sv: Option Strict är HELT onödigt!!!!!

Postades av 2005-04-16 23:12:27 - Andreas Håkansson

Göran,

Vill bara påpeka en sak angående en av de saker du skrev i ett tidigare inlägg

<b>Ju mer man vet om vad som egentligen händer med den kod man skriver, desto effektivare kod kan man skriva.</b>

Skulle vilja påstå att detta inte är sant. Om du inte har någon som helst aning hur det du anropar är implementerat, samt har lite kolla på den MSIL som genereras så är det även svårt att snacka om effektivare kod. Givetvis kan man också profilera koden och få ut lite mätvärden för att påvisa att något är effektivare.

Mindre kod betyder inte alltid effektivare kod. Ta bara en så enkel sak som sammanslagningen av strängar som har betydligt bättre prestanda om man går via en <b>StringBuilder</b> än att bara slå samman dem.

För att kunna diskutera effektivitet så måste man även ange vad man mäter. Är det prestanda, dvs. tiden det tar att exekvera, eller är det utnyttjtandet av resurser mm. Inte helt trivialt när det inte är i ett sammanhang (japp, är medveten om att det på tal om CInt här).


Svara

Sv:Option Strict är HELT onödigt!!!!!

Postades av 2005-04-17 09:26:16 - Göran Andersson

> Vill bara påpeka en sak angående en av de saker du skrev i ett tidigare inlägg
>
> <b>Ju mer man vet om vad som egentligen händer med den kod man skriver, desto effektivare
> kod kan man skriva.</b>
>
> Skulle vilja påstå att detta inte är sant. Om du inte har någon som helst aning hur det du anropar är
> implementerat, samt har lite kolla på den MSIL som genereras så är det även svårt att snacka om
> effektivare kod.

Jag förstår inte ditt resonemang. Skulle det vara helt ovesäntligt med kunskap om vad som händer när koden körs för att skriva effektivare kod?

Jag måste säga att jag inte riktigt förstår din meningsbyggnad heller. Kan du formulera om det där?

> Givetvis kan man också profilera koden och få ut lite mätvärden för att påvisa att något är effektivare.

Bygger ditt resonemang på att mitt påstående är falskt därför att det inte är den enda metod som finns för att avgöra ifall koden är effektiv eller inte?

> Mindre kod betyder inte alltid effektivare kod.

Det har jag heller aldrig sagt. Tvärtom så visade jag i mitt inlägg ett exempel på raka motsatsen.


Svara

Sv: Option Strict är HELT onödigt!!!!!

Postades av 2005-04-18 16:43:55 - Andreas Håkansson

Göran,

Jag ber ödmjukast om ursäkt. Klockan var "mycket" (vilket vi också kan se på skriftspråket, hehe) och jag läste helt enkelt fel på meningen som jag så snyggt själv citerade :-D


Svara

Nyligen

  • 21:41 Automotive Services UK
  • 20:44 Erfarenhet av CBD-olja mot sömnpro
  • 12:13 Sex Dolls for Sale
  • 19:42 Online Casinos for Haitian Players
  • 19:38 Rekommendera något intressant
  • 19:13 Международная перевозка грузов
  • 00:01 DL Van Tuning | Exclusive Body Kit
  • 12:08 Indian casino

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 887
27 965
271 776
543
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies