2009-09-11 6 views

risposta

23

Non c'è nulla di intrinsecamente sbagliato nell'usare i due punti per combinare le istruzioni. Dipende davvero dal contesto, ma finché non riduce la leggibilità, non c'è nulla di sbagliato in esso.

Come regola generale, evito di usare il colon per questo scopo. Trovo più leggibile avere una dichiarazione per riga. Tuttavia questo non è un problema specifico del colon. Evito di fare lo stesso con un punto e virgola in C# o C++. È solo una preferenza personale.

+6

+1 concordato. Ho fatto VB per più di 10 anni, e non sapevo nemmeno * che potessi inserire affermazioni sulla stessa linea separate da un punto e virgola. Non lo farei se le barre di scorrimento verticali sul mio computer non fossero rotte. – MusiGenesis

9

Prenderò l'altro lato. Non mi piacciono le linee di codice denso. È più semplice scremare il codice quando le linee non sono combinate.

La combinazione di istruzioni semplifica anche la creazione di funzioni lunghe che si adattano ancora a una singola schermata.

Non è un peccato grave, semplicemente non mi piace.

Anche a me non piace una riga Se le istruzioni sono.

11

In generale, sconsiglio di farlo, in quanto rende il codice più occupato.

Tuttavia, per compiti semplici, non c'è niente di sbagliato in questo. Ad esempio:

Penso che una linea di questo tipo sia abbastanza breve da non causare confusione.

4

E è considerato una cattiva pratica nella maggior parte dei siti in cui ho lavorato. E dalla maggior parte degli sviluppatori di VB con cui ho lavorato. E nella mia testa. Se lo vedo, ammetto che lo cambierei quasi certamente. Dico "quasi" perché ammetto che c'è la possibilità di trovare un pezzo di codice che appaia meglio in quel modo. Non mi aspetto di vederlo nella mia vita, però.

Inoltre, non mi piace neanche una linea ** If ** s.

Entrambi sono probabilmente postumi di una sbornia dai giorni dei monitor VGA (640x480); non ci sono scuse in questi giorni.

3

Non ho mai visto questo menzionato in qualità di funzionario in nessuna delle aziende in cui ho lavorato. Ma penso che usare eccessivamente i due punti possa iniziare a rendere il tuo codice meno leggibile e più doloroso da mantenere.

Io tendo ad usare questi me stesso, a volte, ad esempio quando si verifica di annullare in uno dei miei progetti più recenti:

If _bCancel Then Status = CancelProcess() : Return Status 

Mettendo questo in mantenuto il mio codice leggibile rispetto all'alternativa blocco IF.

Ma può essere preso troppo lontano, ho recentemente ereditato un progetto che è piena di esempi di utilizzo di prendere due punti troppo:

Select Case GetStringValue(Index).Trim.ToLower 
     Case "yes", "y" : GetBooleanValue = True 
     Case "no", "n" : GetBooleanValue = False 
     Case Else : GetBooleanValue = Nothing 
    End Select 

Personalmente trovo quanto sopra per essere un po 'troppo.

+2

Penso che si potrebbe andare peggio, almeno che si inserisce sullo schermo come una linea – Coops

+0

http://dilbert.com/strip/1994-06-08;) – cxw

1

l'ho visto usato in dichiarazioni di classe quando si utilizza l'ereditarietà o implementazione di un'interfaccia:

Public Class DerivedClass : Inherits BaseClass 
    ... 
End Class 

Ma come gli altri, ho anche scoraggiare l'uso.

Chris

+1

che è vb.net naturalmente. E penso che abbia l'invidia C#, motivo per cui Inherits è sulla stessa linea della Classe – MarkJ

17

E 'una buona pratica con moderazione, perché a volte la leggibilità è esaltata dalla concatenazione di due linee:

  • quando le linee sono brevi e intimamente relativi
  • quando le linee sono brevi e banale

    Option Compare Database: Option Explicit ''My favorite! 
    rsDataSet.Close:   Set rsDataSet= Nothing 
    

Non farlo se:

  • fa male la leggibilità.
  • complica il debug. Strutture di controllo come If...Then devono rimanere pulite. Sarai felice di averlo mantenuto semplice quando è ora di impostare un punto di interruzione.
  • compromette l'editing futuro. Spesso si desidera mantenere le sezioni portatili. Spostare o ristrutturare un blocco di codice è facilmente ostacolato dai tentativi di minimizzare il codice.
5

che io abbia mai usato solo quando sto clsoing un set di record e impostando la variabile a nulla. Immagino che una riga anziché due mi dia più linee di codice sullo schermo e non toglie nulla alla leggibilità.

L'ho visto usato in casi di selezione semplici come il seguente, ma sarebbe il massimo che potrei fare.

Select Case success 
     Case ERROR_FILE_NO_ASSOCIATION: msg = "no association" 
     Case ERROR_FILE_NOT_FOUND: msg = "file not found" 
     Case ERROR_PATH_NOT_FOUND: msg = "path not found" 
     Case ERROR_BAD_FORMAT:  msg = "bad format" 

da http://vbnet.mvps.org/index.html?code/system/findexecutable.htm

E anche allora avrei schierato il "msg =" porzione.

+2

. Non pensi mai alla persona che erediterà il tuo codice? Avete considerato che non posso inserire un punto di interruzione nell'IDE VBE sulla riga msg = "nessuna associazione" senza causare la modalità di interruzione in * ogni * caso? – onedaywhen

+1

Il tuo commento è irrilevante negli unici due casi in cui ho mai piazzato due posizioni sulla stessa riga. –

+1

È del tutto pertinente per il codice che hai postato qui! – onedaywhen

8

Per me non dovresti dire "non farlo mai così", dovresti solo dire "Se lo fai, un possibile problema è tale e così". Quindi basta valutare i pro ei contro per te stesso. Il pro è brevità/poche righe di codice. A volte questo può aiutare la leggibilità. Per esempio, alcune persone lo utilizzano per fare dichiarazioni VB.NET:

Dim x As Long: x = 1 

O aspettare loop:

Do Until IE.ReadyState = READYSTATE_COMPLETE: DoEvents: Loop 

Ma ovviamente si può davvero fare la vita molto su qualcuno troppo:

Public Sub DoYouKnowWhatThisDoes() 
    MsgBox Example 
End Sub 

Private Function Example() 
    Const s$ = "078243185105164060193114247147243200250160004134202029132090174000215255134164128142" 
    Const w% = 3: Const l% = 42: Dim i%, r$: For i = 1 To l Step w: r = r & ChrW$(Mid$(s, i, w) Xor Mid$(s, i + l, w)): Next: Example = r 
End Function 

Un altro motivo pratico per cui potresti non voler utilizzare questo approccio sono i breakpoint. I punti di interruzione possono essere impostati solo dalla linea. Quindi se hai diverse cose che si eseguono sulla stessa linea non puoi isolare la seconda cosa. Si fermerà sulla prima affermazione. (Questo è anche uno dei motivi per cui alcune persone non amano i single-line ifs.) Complicano solo il debugging un po '.

Io di solito non uso i due punti nel codice di produzione per questo motivo. Comunque li uso per migliorare la brevità del codice "copia/incolla" che pubblico nei forum e altrove. YMMV :)

+0

+1 per l'esempio :) – Deanna

1

Mi piace questo

Using pro As New Process() : With pro 

     ... 

    End With 
End Using 
5

Mi rendo conto che questa è una domanda molto vecchio, ma è stato il primo risultato sulla mia ricerca di Google, quindi spero di poter essere perdonato per rintocchi qui.

C'è una situazione (esattamente ciò che mi ha portato qui di fatto) in cui questo approccio non è solo utile, è l'unico modo per ottenere il risultato desiderato: la finestra Immediata. Tutti i codici che si desidera eseguire nella finestra Immediata devono essere tutti su un'unica riga. Pertanto, per utilizzare qualsiasi forma di Do, Case, For, While o With nella finestra Immediata, sarà necessario utilizzare i due punti.

+1

Ancora una vecchia domanda, ma poiché questa è una nuova risposta, pubblicherò un nuovo commento.Uso raramente ':' nel codice ma ho trovato che era molto utile per gestire questo bug: http://support.microsoft.com/kb/327244 Ho usato ':' nel modo seguente: 'Me. ComboBox.SelectedItem = Nothing: Me.ComboBox.SelectedItem = Nothing' Avrei potuto metterlo su due righe, ma ha reso più semplice leggere tutto su una riga e aveva senso poiché era solo un'istruzione ripetuta. –

-1

La risposta alla domanda è No. Qualunque cosa al di là di No è ​​puramente soggettiva e dispendiosa indipendentemente dalla risposta al di fuori di un semplice numero. Di seguito è il mio spreco di battitura.

Sei una specie di schiavo? Fai come vuoi. Tu sei il centro del tuo universo, non un estraneo di StackOverflow. Se lavori per un'azienda, la domanda è muta perché lo stile di codifica sarebbe già stato definito e completamente fuori dal tuo controllo. Per quanto riguarda te stesso, chi in questo universo sta andando sempre e per sempre a guardare il tuo codice.

mi avrebbe scelto uno più di B. Come evidente questo dimostra lo scopo di due punti senza l'uso di due punti. È per risparmiare spazio. Qui di seguito consente di risparmiare spazio e rende il codice molto più leggibile. Mantiene semplice stupido. Lo stesso per ternario? : uso Quando il codice è intrinsecamente complesso, non si dovrebbe prendere in considerazione un punto, una riga se non altro, o un ternario.

'================================================================ 
'A 
If somevalue1 = 0 Then AddLogTry("True") Else AddLogFalse("False") 
If somevalue2 = 0 Then AddLogTry("True") Else AddLogFalse("False") 
If somevalue3 = 0 Then AddLogTry("True") Else AddLogFalse("False") 
'================================================================ 

'================================================================ 
'B 
If somevlaue1 = 0 Then 
    AddLogTrue("True") 
Else 
    AddLogFalse("False") 
EndIf 

If somevlaue2 = 0 Then 
    AddLogTrue("True") 
Else 
    AddLogFalse("False") 
EndIf 

If somevlaue3 = 0 Then 
    AddLogTrue("True") 
Else 
    AddLogFalse("False") 
EndIf 
'================================================================