For those who spend an affordable period of time programming, you’re positive to come across code feedback. You might have even written some your self. These tiny items of textual content are embedded inside the program, however they’re ignored by the compiler or interpreter. They’re meant for the people who work with the code, and so they have many functions. They could even reshape your code or create documentation for others mechanically. Need to know tips on how to use them correctly? Then you definitely’re in the best place!
Time to discover feedback, tips on how to use them and in addition how not to make use of them.
What You’ll Be taught:
By studying this text, you’ll study:
- What a remark is, sorts and tips on how to use them.
- The place they started and the place they’re now.
- The distinction between good and unhealthy feedback.
- Sensible functions from the previous and current.
By the top of the article, you’ll know why code feedback are essential, greatest practices for writing efficient feedback, some frequent pitfalls and errors to keep away from and the instruments and assets you need to use to optimize your code commenting course of, together with automated documentation mills, remark linters and code assessment platforms.
You’ll begin with an in-depth take a look at what code feedback are.
What Are Code Feedback?
Feedback inside a software program program are human-readable annotations that programmers add to supply details about what the code is doing. Feedback take many types, relying on the programming language and the intent of the remark.
They’re categorized into two sorts: block feedback and line feedback.
-
Block feedback delimit a area inside the code through the use of a sequence of characters initially of the remark and one other character sequence on the finish. For instance, some use
/*
initially and*/
on the finish. -
Line feedback use a sequence of characters to ask the compiler to disregard all the pieces from the beginning of the remark till the top of the road. For instance:
#
,–
or//
. Tips on how to point out line feedback is determined by the programming language you’re utilizing.
Right here’s an instance of how every sort of remark seems to be in Swift:
struct EventList: View {
// THIS IS A LINE COMMENT @EnvironmentObject var userData: UserData
@EnvironmentObject var eventData: EventData
/* THIS IS A BLOCK COMMENT
@State personal var isAddingNewEvent = false
@State personal var newEvent = Occasion()
*/
var physique: some View {
...
}
}
Some programming languages solely help one sort of remark sequence, and a few require workarounds to make a sequence work. Right here’s how some languages deal with feedback:

Take into consideration the way you’d use a sticky word. For programmers, a remark is a sticky word with limitless makes use of.
Feedback have taken on extra significance over time as their makes use of have expanded and standardized. You’ll find out about many of those makes use of on this article.
A Temporary Historical past of the Remark
Not so way back, computer systems weren’t programmed utilizing a display and a keyboard. They had been programmed utilizing punch playing cards: small items of stiff paper with holes punched in a sequence to point directions for a pc. These would change into big stacks that had been fed right into a reader, and the pc would run this system.
It was arduous to know at a look what every card or a set of playing cards did. To unravel this, programmers would write notes on them. These notes had been ignored by the machine reader as a result of it solely learn the holes on the cardboard. Right here’s an instance:
Right now, most feedback serve the identical objective: to help in understanding what code does.
Code With out Feedback
A typical saying amongst programmers is, “Good code doesn’t want a proof”. That is true to a sure extent, and a few programmers don’t write feedback of their code.
However what occurs when that code will get actually massive? Or it incorporates a number of enterprise guidelines and logic? Or different individuals want to make use of it? It will be doable to decipher the uncommented code, however at what price in effort and time?
When our focus is consistently on writing code, we overlook that a number of months — even a number of weeks — after writing mentioned code, lots of the logic has left our reminiscence. Why did we make sure selections? Why did we use sure conventions. With out feedback, we should undergo the costly train of determining what we had been pondering.
Feedback are extremely helpful, and good builders ought to use them. Nevertheless, all feedback usually are not created equal. Right here’s a take a look at what makes feedback good, ineffective and even counterproductive.
Good Feedback
Good feedback are easy and simple to learn. They make clear or point out a prepare of thought versus how the code works.
They take many types, corresponding to annotations, hyperlinks and citations to sources, licenses, flags, duties, instructions, documentation, and many others.
Ineffective Feedback
Feedback are good, however you don’t want to make use of them in all places. A typical pitfall is utilizing feedback to explain what code is doing, when that’s already clear.
For instance, when you have code that’s iterating by an array and incrementing every worth, there’s no want to clarify that — it needs to be apparent to the programmer who’s reviewing the code. What isn’t apparent, although, is why you’re doing that. And that’s what a great remark will clarify.
Describing the plain is a standard pitfall… and feedback that do that are simply taking on house and doubtlessly inflicting confusion.
Unhealthy Feedback
Unhealthy feedback are extra harmful than ineffective. They trigger confusion, or worse, attempt to excuse convoluted or badly written code. Don’t attempt to use feedback as an alternative to good code. For instance:
var n = 0 // Line quantity
As an alternative, do:
var lineNumber = 0
Abusing feedback, corresponding to cluttering code with TODO, BUG and FIXME feedback, is unhealthy observe. The very best resolution is to resolve these previous to committing code when engaged on a workforce — or just create a problem in a ticketing system.
Since feedback are free-form, it’s useful to have some conventions or templates to find out what a remark ought to appear like, however mixing conventions falls into the class of unhealthy feedback.
Did you touch upon code throughout growth? Don’t commit it — resolve the issue and take out the remark earlier than you confuse others within the workforce.
Past Annotations
Up thus far, you’ve realized about utilizing feedback as annotations. Nevertheless, since feedback haven’t any predefined format, you possibly can prolong their use by remodeling your humble remark annotation into a knowledge file or specialised doc. Listed below are some good examples.
LICENSE Feedback
LICENSE is a sort of remark that signifies phrases and circumstances for the code. You’ll see these particularly typically in open-source code. Right here’s an instance from the MIT LICENSE:
/*
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
Since feedback are free-form, the best way the remark is typed can take many shapes. Right here’s an instance from Apple:
//===---------------------------------------------------------------===//
//
// This supply file is a part of the Swift open supply challenge
//
// Copyright (c) 2015-2016 Apple Inc. and the Swift challenge authors
// Licensed below Apache License v2.0 with Runtime Library Exception
//
// See http://swift.org/LICENSE.txt for license data
// See http://swift.org/CONTRIBUTORS.txt for the checklist of Swift challenge authors
//
//===---------------------------------------------------------------===//
TEMPORARY CODE-OUT Feedback
Programmers use the TEMPORARY CODE-OUT remark as a device for debugging. By taking a block or line of code out of the compile course of, you possibly can alter which code executes and which doesn’t. This technique is usually used when doing a process-of-elimination debug. For instance (solely constructing for iOS):
let bundle = Bundle(
title: "CommentOut",
platforms: [
.iOS(.v14), /* .tvOS(.v14), .watchOS(.v7), .macOS(.v11) */
],
merchandise: [
.library(name: "CommentOut", targets: ["CommentOut"])
],
targets: [
.target(name: "CommentOut")
]
)
DECORATIVE Feedback
A DECORATIVE or SEPARATOR remark can separate a file or blocks of code by some class or operate. This helps customers discover code extra simply. Right here’s an instance:
/**************************************************
* Huffman Implementation Helpers *
**************************************************/
LOGIC Feedback
LOGIC feedback doc the rationale you selected when creating the code. This goes past what the code reveals, like “What was that worth assigned?”
For instance (from swift-package-manager/Sources/Instructions/SwiftRunTool.swift, strains 287-288):
personal func execute(path: String, args: [String]) throws -> By no means {
#if !os(Home windows)
// On platforms aside from Home windows, sign(SIGINT, SIG_IGN) is used for dealing with SIGINT by DispatchSourceSignal,
// however this course of is about to get replaced by exec, so SIG_IGN have to be returned to default.
sign(SIGINT, SIG_DFL)
#endif
attempt TSCBasic.exec(path: path, args: args)
}
On this case, the execute
operate incorporates compile conditional directions that can both embrace or skip the sign name. The remark incorporates the reason as to why it does this.
Superior Types of Feedback
Feedback can maintain specialised content material, sometimes formatted identical to a knowledge file can be: a file inside the code. They can be easy flags, which supply code parser instruments can reply to in numerous methods.
Flag Feedback
Flag feedback are sometimes utilized by linters; they allow or disable options. Right here’s how SwiftLint disables options utilizing flag feedback:
struct GitHubUserInfo: Content material {
let title: String
// swiftlint:disable identifier_name
let avatar_url: String?
// swiftlint:allow identifier_name
}
Compilers themselves additionally use flag feedback as a type of setup. Within the instance beneath, you see a Python script run as a CLI script and in UTF-8 format:
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
Be aware: The primary remark line in scripts has a proper title: the shebang. Its objective is to point which interpreter the working system ought to use when it executes the script. It all the time begins with a #!.
TASK Feedback
Built-in growth environments (IDEs), textual content editors and a few CLI instruments are capable of learn TASK feedback left by programmers in a format that signifies an motion to be carried out by the programmer sooner or later, corresponding to TODO:
// TODO: Change Mannequin permissions
// FIXME: Convert strings to Enum
DOCUMENT GENERATION Feedback
DOCUMENT GENERATION feedback permit a device to parse the supply code and output a formatted doc — sometimes HTML — that finish customers can use to browse lessons, strategies, and many others. Right here’s an instance from JavaDoc:
/**
* @param string the string to be transformed
* @param sort the kind to transform the string to
* @param <T> the kind of the aspect
* @param <V> the worth of the aspect
*/
<T, V extends T> V convert(String string, Class<T> sort) {
}
Different instruments can generate documentation that’s seen by IDEs and proven to the consumer inside the code. One such device is Documentation Markup (DocC). That is notably helpful for APIs Apple makes use of with its personal libraries. Right here’s an instance from the open-source SwiftGD challenge:
/// Exports the picture as `Knowledge` object in specified raster format.
///
/// - Parameter format: The raster format of the returning picture information (e.g. as jpg, png, ...). Defaults to `.png`
/// - Returns: The picture information
/// - Throws: `Error` if the export of `self` in specified raster format failed.
public func export(as format: ExportableFormat = .png) throws -> Knowledge {
return attempt format.information(of: internalImage)
}
CDATA Feedback
CDATA feedback embed formatted information inside XML and XHTML recordsdata. You should use a number of differing kinds with these feedback, corresponding to photos, code, XML inside XML, and many others.:
<![CDATA[<sender>John Smith</sender>]]>
From Wikipedia’s article on Pc Programming Feedback, you’ve the RESOURCE inclusion sort of remark: “Logos, diagrams, and flowcharts consisting of ASCII artwork constructions might be inserted into supply code formatted as a remark”. For instance:
<useful resource id="ProcessDiagram000">
<![CDATA[
HostApp (Main_process)
|
V
script.wsf (app_cmd) --> ClientApp (async_run, batch_process)
|
|
V
mru.ini (mru_history)
]]>
</useful resource>
Having Enjoyable With Feedback
Simply because feedback aren’t included with an app doesn’t imply you possibly can’t have enjoyable with them. Life classes, jokes, poetry, tic-tac-toe video games and a few coworker banter have all made it into code feedback. Right here’s an instance from py_easter_egg_zen.py:
import this
# The Zen of Python, by Tim Peters
# Stunning is healthier than ugly.
# Express is healthier than implicit.
# Easy is healthier than complicated.
# Advanced is healthier than sophisticated.
# Flat is healthier than nested.
# Sparse is healthier than dense.
# Readability counts.
# Particular circumstances aren't particular sufficient to interrupt the foundations.
# Though practicality beats purity.
# Errors ought to by no means move silently.
# Except explicitly silenced.
# Within the face of ambiguity, refuse the temptation to guess.
# There needs to be one-- and ideally just one --obvious strategy to do it.
# Though that means will not be apparent at first until you are Dutch.
# Now could be higher than by no means.
# Though by no means is usually higher than *proper* now.
# If the implementation is difficult to clarify, it is a unhealthy thought.
# If the implementation is straightforward to clarify, it might be a good suggestion.
Essential: Easter egg feedback aren’t welcome in all supply codes. Please confer with the challenge or repository coverage or your worker handbook earlier than doing any of those.
Key Takeaways
Right now, you realized that there’s extra to feedback than it appears. As soon as thought of an afterthought, they’re now acknowledged a useful communication device for programming.
- They assist doc and protect information for future code upkeep.
- There are good feedback and unhealthy feedback.
- Feedback can assist create automated documentation.
Now, it’s time to observe! The one strategy to get good at feedback is by leaping in and including them.
By making feedback a part of your programming thought course of, they not change into an additional step to carry out. Listed below are some methods to observe:
- Doc your present tasks and be conscious of any requirements set for the challenge or repository.
- Use a linter on all of your tasks to maintain your formatting and conventions in verify.
- Discover a doc generator and publish your work.
You’ll be able to observe and contribute whereas supporting an open-source challenge that wants assist with feedback and documentation.
The place to Go From Right here?
For those who’d wish to study extra about commenting, try these articles and assets. Lots of them had been consulted within the writing of this text.
We hope you’ve loved this take a look at commenting! Do you’ve questions, strategies or tricks to share? Be part of us within the discussion board for this text. You’ll be able to all study from one another.
Concerning the Creator
Roberto Machorro has been programming professionally for over 25 years, and commenting code simply as lengthy. He has championed documenting in-house, third-party and open supply code out of frustration for having to take care of badly written code or wrestle with unavailable documentation. He bought began with library paperwork utilizing HeaderDoc, JavaDoc and now having fun with DocC.