Kul discussion!
Alltid roligt att man så snabbt kan sortera vilka som läst Robert Martin och vilka som inte har det.
Jag tycker att det är viktigt att skilja på kommentarer och dokumentation - De är nämligen inte samma sak, även om man kanske kan klassa dokumentation man skriver till en function som en kommentar, så är ju syftet något helt annat.
Att dokumentera och beskriva ett API och liknande är ju otroligt viktigt för att underlätta integration för tredjepart, men det är ju en försvinnande liten del av koden som är en yta utåt, den mesta koden ligger ju mest troligtvis i domänen (koden som är specifik för din produkt). Eventuellt API är ju mest troligt bara en yttre som skickar vidare anrop mot andra servicar eller liknande.
Jag skriver enbart kommentarer när jag designar en metod eller ett test - Jag radar upp vad metoden eller klassen ska göra, sen börjar jag implementera - Oftast rakt upp och ner i en jätteklass eller jättemetod, varje funtion under varje rad kommentar.
Sen tar jag oftast all kod mellan två kommentarer, och bryter ut den. Metodernas namn ersätter kommentaren. Ungefär så här:
public class UserService
{
public User GetUser(Guid userId)
{
// validate access
// Get user from repository
// Get user data from data service
// Get user salary data
// Transform user
// Log that user has been fetched
}
}
public class UserService
{
public User GetUser(Guid userId)
{
_accessService.ValidateAccess(AccessType.Read, DataType.User, userId)
var userModel = _userRepository.GetUser(userId);
var userData = _userDataRepository.GetUserData(userId);
var salaryData = _userSalaryRespository.GetUserSalaryData(userId);
var user = _mapper.Map<User>(userModel, userData, salaryData);
_eventLogger.Log(EventLogType.GetUser)
return user;
}
}
Sen har ju kommentarer sin plats också - Jag tänkte vi kunde kolla på CyberVillans kodexempel på en till mesta delen utmärkt kod, man fattar ju direkt vad koden ska göra, men inte riktigt effekten av den - Mina kommentarer för att illustrera, kanske.
Han hade kunnat klargöra sin kod antingen med kommentarer, eller variabler/metoder - Ibland måste man ha en kommentar varför en sak är som den är, men metoden, eller variablen som sådan, bör vara namngiven på ett sånt sätt att man egentligen aldrig behöver fråga sig varför - Jag ser ju i koden att han skapar en rekyl på vapnet, mer än så behöver man ju nästan aldrig
// Composition over inheritance? - Food for thought!
public class TubeFedShotgun : InternalMagazineFirearm
{
protected override void Awake()
{
base.Awake();
// Immutable instead and from ctor?
Category = FirearmCategories.Primary;
UsesTouchpad = true;
}
public override bool TriggerReady(NVRButtonInputs trigger)
{
// Attach trigger as an injection on ctor?
return trigger.SingleAxisDown;
}
protected override void AddForceToCasing(Rigidbody casing)
{
// Here we are adding force to the left? and divide it by
// some arbitrary number because of reasons
casing.AddForce(-this.transform.right * 1.5f);
// Applying more physics using arbitrary numbers and we
// have no real idea why they are what they are
//
// Moving these numbers into variables and even a method in
//itself for the vector, might help explain why the numbers
// in question are what they are
casing.AddRelativeTorque(new Vector3(0.0005f, 0.001f * (5 + Random.value * 5), 0.0005f));
}
}
Att inte ha läst Robert Martin och jobba som programmerare är som att spela farmville på facebook och kalla sig gamer. Jag jobbar med miljoner rader kod, jag skiter i om du kan nya syntaxen för C# 7.2. Om din kod behöver kommentarer för att kunna förstås om 6 månader ligger du pyrt till. (Sen ska du givetvis också kunna nya C# 7.2 syntaxen, något annat vore ju tjänstefel! EHEH).
Näe grabbar, sluta jiddra och börja läsa mer böcker, sen applicerar man vad gudarna har kommit fram till, och gör om, gör rätt, varje dag, tills polletten trillar ner. Sen efter 10 år börjar man förstå hur otroligt jävla urusel man är och att man skriver riktigt jävla dålig kod, otroligt ovärdig, borde bli kycklingfarmare. Då är man på god väg att börja bli riktigt värdefull.
Man läser ju otroligt mycker mer kod än man skriver, det är absolut vitalt att koden man läser är lättläst - Ju mer likt naturligt språk, ju fortare kan man läsa den.