A különbőző névadási, kódolási konvenciók betartása létfontosságú, ha ugyanazon a codebase-en többen is dolgoznak. Más kódjának megértése amúgy se tartozik a legtriviálisab feladatok közé, ha pedig még a "közös nyelv" sincs meg, akkor igazi PITA. Egy baj van a dologgal, hogy a betartatása igazi robotmunka - akkor viszont nosza, csináltassuk robotokkal!
Több tool is elérhető a témakörben, például az FxCop, ami a már lefordított assembly-t elemezve ömleszti ránk a jótanácsokat, de ma nem róla lesz szó, hanem a testvéréről, a StyleCop-ról. Ő a forráskódot analizálja, ennélfogva némileg más szempontok szerint tudja segíteni a munkánkat.
Csináltam egy gyors teszet: letöltöttem az install .msi-t, a Visual Studio-ban csináltam egy új konzol alkalmazást, és az automatikusan legenerált alkalmazás-vázat egy magas színvonalú "Hello, World!" applikációvá bővítettem ki:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace StyleCopTest { class Program { static void Main(string[] args) { Console.WriteLine("Hello, StyleCop!"); } } }Ezután elindítottam a Tools menübe beépülő StyleCop-ot (Run StyleCop), ami megvizsgálta a kódot, és a standard Error list ablakban (amiben a fordításkor az Error-ok, Warningok jelennek meg), néhány Warning képépben materializálódott a végeredmény.
Ezután átszabtam úgy a kódot, hogy megfeleljek az alapból beállított szabályok mindegyikének.
Ezek között voltak olyanok, amikkel nagyon egyetértettem (pl. minden osztályon, metóduson legyen XML komment), valamire azt mondtam, hogy hát végülis jó, legyen (mindenképp legyen kiírva az access modifier az class-ok elé), valamit kimondottam furcsálltam (a using-okat hozzuk be a namespace alá).
A file elejére egy copyright note-ot reklamált, amit saját kútfőből nem is tudtam összehozni, szerencsére az adott warning kódja (SA1634) alapján a SyleCop doksiból kiderült, hogy pontosan milyenre vágyik. Végül ez lett a "Hello, StyleCop!" alkalmazásból:
// <copyright file="Program.cs" company="Öt Perc DotNet"> // Copyright (C) 2010 http://otperc.net // </copyright> namespace StyleCopTest { using System; using System.Collections.Generic; using System.Linq; using System.Text; /// <summary> /// A summary for the Program class. /// </summary> internal class Program { /// <summary> /// A comment for the Main method. /// </summary> /// <param name="args">A comment for the args parameter.</param> public static void Main(string[] args) { Console.WriteLine("Hello, StyleCop!"); } } }
Szerencsére ott, ahol nem értünk egyet beépített stílusrendőrünkkel, ott lehetőség van a konfigurálásra, vagy akár új szabály létrehozására. A StyleCop a build folyamatba is bepíthető, így akár automatikus visszajelzést kaphatunk, ha valaki a csapatunkból partizánakciókba kezd kódolási stílus terén.


4 megjegyzés:
Eh, reSharper a király, mert nem warningokat dobál, hanem az arcodba tolja a problémákat aláhúzásokkal. Halálba lehet konfigurálni, és billentyűkombókkal azonnal javítani a hibát vagy stílusbeli problémákat.
My 50c, mondaná MolnárG.
...vagy 2c? :)
My 50 cent-et Eminem mondana... :)
Vicces, hogy most hozod fel a ReSharpert - pár napja vásároltunk licenceket, 9 db-ot a 12 fős teamnek, úgyhogy mondhatom, elég nagy nálunk a ReSharper társadalmi beágyazottsága.
Ennek ellenére azt mondom, hogy van létjogosultsága a StyleCop-nak, mert másra jó a kettő. Bár igaz, hogy a fenti példa a "kliensoldali" felhasználást mutatja be (ez a triviális, "next-next-finish-használom" módszer), a StyleCop igazi erőssége nem ez, hanem hogy beköthető a checkin/build folyataba. Szépen kiegészíthetik egymást az FxCop-pal.
A ReSharper segít, hogy szép kódót írj, a zsaru meg kiszúrja, ha esetleg mégis sumákolni akarnál, és nem rakod rendesen a kapcsoszárójelet.
Gergő! Ennél jobb blogot még életemben nem láttam, gratulálok hozzá! Fél éve tanulok csupán C#-ot, és utoljára akkor örültem valaminek ennyire amikor rátaláltam az első apress-es Pro C# könyvemre :) Ebben a világban, ahol a singleton osztályt egykének fordítják, nehéz normális irkálmányokat találni. Csak így tovább, szerintem ezt még ma végigbogarászom a végétől az elejéig :D
Megjegyzés küldése