È considerato una cattiva pratica utilizzare i due punti per inserire due istruzioni sulla stessa riga in Visual Basic?Utilizzo di due punti per mettere due istruzioni sulla stessa riga in Visual Basic
risposta
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.
+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
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.
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.
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.
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.
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
che è vb.net naturalmente. E penso che abbia l'invidia C#, motivo per cui Inherits è sulla stessa linea della Classe – MarkJ
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.
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.
. 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
Il tuo commento è irrilevante negli unici due casi in cui ho mai piazzato due posizioni sulla stessa riga. –
È del tutto pertinente per il codice che hai postato qui! – onedaywhen
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 :)
+1 per l'esempio :) – Deanna
Mi piace questo
Using pro As New Process() : With pro
...
End With
End Using
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.
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. –
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
'================================================================
Ho usato per farlo in vb6 per posizionare la dichiarazione e l'inizializzazione sulla stessa riga, ma quel problema è stato risolto in vbn. –