Chapter 21: Comments
Part 1: What Are Comments?
Comments are pieces of text in your source code that are completely ignored by the compiler or interpreter. They are written for human readers, not for the machine. Their purpose is to explain, clarify, and document what your code is doing, why it’s doing it, and any important notes for anyone who might read or modify the code.
Why is this so important?
-
Explanation: They explain complex logic that might not be obvious from the code itself.
-
Intent: They communicate the programmer’s intent. The code tells you what is happening; comments can tell you why it’s happening that way.
-
Documentation: They serve as built-in documentation for functions, classes, and modules.
-
Debugging: They can be used to temporarily disable (“comment out”) sections of code to isolate bugs.
-
Collaboration: They are essential for teamwork, allowing multiple programmers to understand each other’s work.
Part 2: Types of Comments
Most programming languages support two main types of comments: single-line and multi-line. The syntax varies slightly between languages, but the concepts are universal.
1. Single-Line Comments
These comments start with a specific symbol and continue until the end of the line. Everything after the symbol is ignored.
Python:
|
0 1 2 3 4 5 6 7 |
<span class="token comment"># This is a single-line comment in Python</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"Hello, World!"</span><span class="token punctuation">)</span> <span class="token comment"># This comment is after some code</span> |
JavaScript/Java/C/C++:
|
0 1 2 3 4 5 6 7 |
<span class="token comment">// This is a single-line comment in JavaScript</span> console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">"Hello, World!"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// This comment is after some code</span> |
R:
|
0 1 2 3 4 5 6 7 |
<span class="token comment"># This is a single-line comment in R</span> print<span class="token punctuation">(</span><span class="token string">"Hello, World!"</span><span class="token punctuation">)</span> <span class="token comment"># This comment is after some code</span> |
2. Multi-Line Comments
These comments can span multiple lines. They have a start symbol and an end symbol. Everything in between is ignored.
Python:
Python doesn’t have a dedicated multi-line comment syntax. Instead, it conventionally uses triple-quoted strings (""") which, when not assigned to a variable, act as multi-line comments.
|
0 1 2 3 4 5 6 7 8 9 10 11 |
<span class="token triple-quoted-string string">"""</span> This is a multi-line comment in Python. It can span several lines. Everything here is ignored by the interpreter. """ <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"Hello, World!"</span><span class="token punctuation">)</span> |
JavaScript/Java/C/C++:
|
0 1 2 3 4 5 6 7 8 9 10 11 |
<span class="token comment">/*</span> This is a multi-line comment in JavaScript. It can span several lines. Everything between the opening /* and closing */ is ignored<span class="token punctuation">.</span> <span class="token operator">*</span><span class="token operator">/</span> console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">"Hello, World!"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
R:
R doesn’t have a built-in multi-line comment syntax. You typically use multiple single-line comments, or use conditional blocks for large sections.
|
0 1 2 3 4 5 6 7 8 9 |
<span class="token comment"># This is a multi-line comment in R</span> <span class="token comment"># achieved by using multiple</span> <span class="token comment"># single-line comments.</span> print<span class="token punctuation">(</span><span class="token string">"Hello, World!"</span><span class="token punctuation">)</span> |
Part 3: Examples in Different Languages
Let’s see comments in action across a few different languages.
Python Example
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
<span class="token comment"># ============================================================================</span> <span class="token comment"># PROGRAM: Temperature Converter</span> <span class="token comment"># AUTHOR: Student</span> <span class="token comment"># DATE: October 26, 2023</span> <span class="token comment"># ============================================================================</span> <span class="token keyword">def</span> <span class="token function">celsius_to_fahrenheit</span><span class="token punctuation">(</span>celsius<span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token triple-quoted-string string">"""</span> Convert Celsius to Fahrenheit. Args: celsius (float): Temperature in degrees Celsius. Returns: float: Temperature in degrees Fahrenheit. """ <span class="token comment"># The formula for conversion is (C * 9/5) + 32</span> fahrenheit <span class="token operator">=</span> <span class="token punctuation">(</span>celsius <span class="token operator">*</span> <span class="token number">9</span><span class="token operator">/</span><span class="token number">5</span><span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token number">32</span> <span class="token keyword">return</span> fahrenheit <span class="token comment"># Get temperature from user</span> <span class="token comment"># TODO: Add input validation to ensure user enters a number</span> temp_c <span class="token operator">=</span> <span class="token builtin">float</span><span class="token punctuation">(</span><span class="token builtin">input</span><span class="token punctuation">(</span><span class="token string">"Enter temperature in Celsius: "</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># Perform conversion</span> temp_f <span class="token operator">=</span> celsius_to_fahrenheit<span class="token punctuation">(</span>temp_c<span class="token punctuation">)</span> <span class="token comment"># Display result with proper formatting</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"</span><span class="token interpolation"><span class="token punctuation">{</span>temp_c<span class="token punctuation">}</span></span><span class="token string">°C is equal to </span><span class="token interpolation"><span class="token punctuation">{</span>temp_f<span class="token punctuation">}</span></span><span class="token string">°F"</span></span><span class="token punctuation">)</span> <span class="token comment"># The following code is commented out for debugging</span> <span class="token comment"># print("Debug: Conversion complete")</span> |
JavaScript Example
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
<span class="token comment">// ============================================================================</span> <span class="token comment">// PROGRAM: Simple Calculator</span> <span class="token comment">// AUTHOR: Student</span> <span class="token comment">// DATE: October 26, 2023</span> <span class="token comment">// ============================================================================</span> <span class="token comment">/**</span> * Adds two numbers together. * * @param {number} a - The first number. * @param {number} b - The second number. * @returns {number} The sum of a and b. */ <span class="token keyword">function</span> <span class="token function">add</span><span class="token punctuation">(</span><span class="token parameter">a<span class="token punctuation">,</span> b</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> a <span class="token operator">+</span> b<span class="token punctuation">;</span> <span class="token comment">// The '+' operator performs addition</span> <span class="token punctuation">}</span> <span class="token comment">// Get numbers from user</span> <span class="token keyword">let</span> num1 <span class="token operator">=</span> <span class="token function">parseFloat</span><span class="token punctuation">(</span><span class="token function">prompt</span><span class="token punctuation">(</span><span class="token string">"Enter first number:"</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">let</span> num2 <span class="token operator">=</span> <span class="token function">parseFloat</span><span class="token punctuation">(</span><span class="token function">prompt</span><span class="token punctuation">(</span><span class="token string">"Enter second number:"</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// Calculate sum</span> <span class="token keyword">let</span> sum <span class="token operator">=</span> <span class="token function">add</span><span class="token punctuation">(</span>num1<span class="token punctuation">,</span> num2<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// Display result</span> console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token template-string"><span class="token template-punctuation string">`</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>num1<span class="token interpolation-punctuation punctuation">}</span></span><span class="token string"> + </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>num2<span class="token interpolation-punctuation punctuation">}</span></span><span class="token string"> = </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>sum<span class="token interpolation-punctuation punctuation">}</span></span><span class="token template-punctuation string">`</span></span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">/*</span> Alternative implementation using arrow function: const add = (a, b) => a + b; */ |
R Example
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
<span class="token comment"># ============================================================================</span> <span class="token comment"># PROGRAM: Data Analyzer</span> <span class="token comment"># AUTHOR: Student</span> <span class="token comment"># DATE: October 26, 2023</span> <span class="token comment"># ============================================================================</span> <span class="token comment"># Function to calculate basic statistics</span> calculate_stats <span class="token operator"><-</span> <span class="token keyword">function</span><span class="token punctuation">(</span>data<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment"># Remove any missing values</span> clean_data <span class="token operator"><-</span> data<span class="token punctuation">[</span><span class="token operator">!</span>is.na<span class="token punctuation">(</span>data<span class="token punctuation">)</span><span class="token punctuation">]</span> <span class="token comment"># Calculate statistics</span> mean_val <span class="token operator"><-</span> mean<span class="token punctuation">(</span>clean_data<span class="token punctuation">)</span> median_val <span class="token operator"><-</span> median<span class="token punctuation">(</span>clean_data<span class="token punctuation">)</span> sd_val <span class="token operator"><-</span> sd<span class="token punctuation">(</span>clean_data<span class="token punctuation">)</span> <span class="token comment"># Return results as a list</span> return<span class="token punctuation">(</span>list<span class="token punctuation">(</span> mean <span class="token operator">=</span> mean_val<span class="token punctuation">,</span> median <span class="token operator">=</span> median_val<span class="token punctuation">,</span> sd <span class="token operator">=</span> sd_val<span class="token punctuation">,</span> n <span class="token operator">=</span> length<span class="token punctuation">(</span>clean_data<span class="token punctuation">)</span> <span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token comment"># Sample data</span> <span class="token comment"># TODO: Replace this with real data from file</span> sample_data <span class="token operator"><-</span> c<span class="token punctuation">(</span><span class="token number">12</span><span class="token punctuation">,</span> <span class="token number">45</span><span class="token punctuation">,</span> <span class="token number">67</span><span class="token punctuation">,</span> <span class="token number">23</span><span class="token punctuation">,</span> <span class="token number">89</span><span class="token punctuation">,</span> <span class="token number">34</span><span class="token punctuation">,</span> <span class="token number">56</span><span class="token punctuation">,</span> <span class="token keyword">NA</span><span class="token punctuation">,</span> <span class="token number">78</span><span class="token punctuation">)</span> <span class="token comment"># Analyze the data</span> <span class="token comment"># The next line calls our custom function</span> results <span class="token operator"><-</span> calculate_stats<span class="token punctuation">(</span>sample_data<span class="token punctuation">)</span> <span class="token comment"># Display results with nice formatting</span> cat<span class="token punctuation">(</span><span class="token string">"Data Analysis Results:\n"</span><span class="token punctuation">)</span> cat<span class="token punctuation">(</span><span class="token string">"======================\n"</span><span class="token punctuation">)</span> cat<span class="token punctuation">(</span><span class="token string">"Mean: "</span><span class="token punctuation">,</span> results<span class="token operator">$</span>mean<span class="token punctuation">,</span> <span class="token string">"\n"</span><span class="token punctuation">)</span> cat<span class="token punctuation">(</span><span class="token string">"Median: "</span><span class="token punctuation">,</span> results<span class="token operator">$</span>median<span class="token punctuation">,</span> <span class="token string">"\n"</span><span class="token punctuation">)</span> cat<span class="token punctuation">(</span><span class="token string">"SD: "</span><span class="token punctuation">,</span> results<span class="token operator">$</span>sd<span class="token punctuation">,</span> <span class="token string">"\n"</span><span class="token punctuation">)</span> cat<span class="token punctuation">(</span><span class="token string">"N: "</span><span class="token punctuation">,</span> results<span class="token operator">$</span>n<span class="token punctuation">,</span> <span class="token string">"\n"</span><span class="token punctuation">)</span> <span class="token comment"># This section is commented out for testing</span> <span class="token comment"># print("Analysis complete")</span> |
Part 4: Best Practices for Writing Comments
Good comments are an art. Here are some guidelines to write comments that are actually helpful.
DO: Explain “Why,” Not “What”
The code itself shows what it’s doing. Comments should explain why it’s doing it that way, especially if the reason isn’t obvious.
|
0 1 2 3 4 5 6 7 8 9 10 |
<span class="token comment"># BAD - States the obvious</span> x <span class="token operator">=</span> x <span class="token operator">+</span> <span class="token number">1</span> <span class="token comment"># Add 1 to x</span> <span class="token comment"># GOOD - Explains the intent</span> x <span class="token operator">=</span> x <span class="token operator">+</span> <span class="token number">1</span> <span class="token comment"># Increment the counter for the next iteration</span> |
|
0 1 2 3 4 5 6 7 8 9 10 |
<span class="token comment"># BAD - Obvious</span> total <span class="token operator">=</span> price <span class="token operator">*</span> quantity <span class="token comment"># Multiply price by quantity</span> <span class="token comment"># GOOD - Explains the business logic</span> total <span class="token operator">=</span> price <span class="token operator">*</span> quantity <span class="token comment"># Calculate subtotal before tax and discounts</span> |
DO: Write Comments as You Code
The best time to write a comment is when you’re writing the code. The logic is fresh in your mind. “I’ll add comments later” often becomes “I’ll never add comments.”
DO: Keep Comments Up-to-Date
When you change code, update the corresponding comments. Outdated comments are worse than no comments—they actively mislead.
DO: Use Comments to Explain Complex Algorithms
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<span class="token comment"># Using binary search to find the insertion point</span> <span class="token comment"># This is O(log n) instead of O(n) for a linear search</span> low<span class="token punctuation">,</span> high <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token builtin">len</span><span class="token punctuation">(</span>sorted_list<span class="token punctuation">)</span> <span class="token keyword">while</span> low <span class="token operator"><</span> high<span class="token punctuation">:</span> mid <span class="token operator">=</span> <span class="token punctuation">(</span>low <span class="token operator">+</span> high<span class="token punctuation">)</span> <span class="token operator">//</span> <span class="token number">2</span> <span class="token keyword">if</span> sorted_list<span class="token punctuation">[</span>mid<span class="token punctuation">]</span> <span class="token operator"><</span> target<span class="token punctuation">:</span> low <span class="token operator">=</span> mid <span class="token operator">+</span> <span class="token number">1</span> <span class="token keyword">else</span><span class="token punctuation">:</span> high <span class="token operator">=</span> mid |
DO: Document Functions and Modules
Use docstrings (or the language’s standard documentation format) to explain what a function does, its parameters, and its return value.
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<span class="token keyword">def</span> <span class="token function">calculate_bmi</span><span class="token punctuation">(</span>weight<span class="token punctuation">,</span> height<span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token triple-quoted-string string">"""</span> Calculate Body Mass Index (BMI). Args: weight (float): Weight in kilograms. height (float): Height in meters. Returns: float: BMI value rounded to 1 decimal place. Example: >>> calculate_bmi(70, 1.75) 22.9 """ bmi <span class="token operator">=</span> weight <span class="token operator">/</span> <span class="token punctuation">(</span>height <span class="token operator">**</span> <span class="token number">2</span><span class="token punctuation">)</span> <span class="token keyword">return</span> <span class="token builtin">round</span><span class="token punctuation">(</span>bmi<span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span> |
DO: Use Comments for TODOs and FIXMEs
Mark areas that need future attention.
|
0 1 2 3 4 5 6 7 8 |
<span class="token comment"># TODO: Add input validation for negative numbers</span> <span class="token comment"># FIXME: This function crashes when the list is empty</span> <span class="token comment"># OPTIMIZE: This loop is slow for large datasets</span> |
DON’T: Write Redundant Comments
Avoid stating the painfully obvious.
|
0 1 2 3 4 5 6 7 8 9 10 |
<span class="token comment"># BAD - Completely redundant</span> i <span class="token operator">=</span> <span class="token number">0</span> <span class="token comment"># Set i to 0</span> <span class="token comment"># GOOD - Only if the context needs explanation</span> i <span class="token operator">=</span> <span class="token number">0</span> <span class="token comment"># Start indexing from the beginning of the list</span> |
DON’T: Use Comments as a Substitute for Clear Code
Strive to write self-documenting code first. Use meaningful variable and function names.
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 |
<span class="token comment"># BAD - Unclear code needs a comment</span> <span class="token comment"># Check if user is eligible for senior discount</span> <span class="token keyword">if</span> a <span class="token operator">></span> <span class="token number">65</span> <span class="token keyword">and</span> d <span class="token operator">==</span> <span class="token string">'Y'</span><span class="token punctuation">:</span> give_discount<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token comment"># GOOD - Clear code needs no comment</span> <span class="token keyword">if</span> age <span class="token operator">></span> <span class="token number">65</span> <span class="token keyword">and</span> is_member <span class="token operator">==</span> <span class="token string">'Y'</span><span class="token punctuation">:</span> apply_senior_discount<span class="token punctuation">(</span><span class="token punctuation">)</span> |
DON’T: Leave Dead Code Commented Out
Commented-out code clutters the file and confuses readers. Use version control (like Git) to manage old code; don’t leave it in the source as comments.
|
0 1 2 3 4 5 6 7 8 |
<span class="token comment"># BAD - Leftover code from a previous version</span> <span class="token comment"># old_calculation = x * y + z</span> <span class="token comment"># new_calculation = x * y * z</span> |
Part 5: Language-Specific Comment Features
Python Docstrings
Python has a special feature called docstrings (documentation strings). These are multi-line strings placed right after a function, class, or module definition. They are accessible at runtime via the help() function and are used by documentation generators.
|
0 1 2 3 4 5 6 7 8 9 10 |
<span class="token keyword">def</span> <span class="token function">greet</span><span class="token punctuation">(</span>name<span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token triple-quoted-string string">"""Print a friendly greeting."""</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"Hello, </span><span class="token interpolation"><span class="token punctuation">{</span>name<span class="token punctuation">}</span></span><span class="token string">!"</span></span><span class="token punctuation">)</span> <span class="token builtin">help</span><span class="token punctuation">(</span>greet<span class="token punctuation">)</span> <span class="token comment"># Displays the docstring</span> |
JSDoc in JavaScript
JavaScript developers often use JSDoc comments, which have a special format that tools can parse to generate documentation.
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<span class="token comment">/**</span> * Represents a book. * @constructor * @param {string} title - The title of the book. * @param {string} author - The author of the book. */ <span class="token keyword">function</span> <span class="token function">Book</span><span class="token punctuation">(</span><span class="token parameter">title<span class="token punctuation">,</span> author</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">this</span><span class="token punctuation">.</span>title <span class="token operator">=</span> title<span class="token punctuation">;</span> <span class="token keyword">this</span><span class="token punctuation">.</span>author <span class="token operator">=</span> author<span class="token punctuation">;</span> <span class="token punctuation">}</span> |
Roxygen Comments in R
R package developers use Roxygen comments, which start with #' and are used to generate documentation files.
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<span class="token comment">#' Calculate the mean of a numeric vector</span> <span class="token comment">#'</span> <span class="token comment">#' @param x A numeric vector</span> <span class="token comment">#' @return The mean of the input vector</span> <span class="token comment">#' @examples</span> <span class="token comment">#' mean(c(1, 2, 3, 4, 5))</span> my_mean <span class="token operator"><-</span> <span class="token keyword">function</span><span class="token punctuation">(</span>x<span class="token punctuation">)</span> <span class="token punctuation">{</span> sum<span class="token punctuation">(</span>x<span class="token punctuation">)</span> <span class="token operator">/</span> length<span class="token punctuation">(</span>x<span class="token punctuation">)</span> <span class="token punctuation">}</span> |
Summary: The Comment Philosophy
-
Comments are for humans, not computers. They are ignored by the compiler/interpreter.
-
Single-line comments (
#in Python/R,//in many others) are for brief explanations. -
Multi-line comments (
"""in Python,/* */in many others) are for longer explanations or temporarily disabling blocks of code. -
Explain the “why,” not the “what.” The code already shows what it’s doing.
-
Write self-documenting code first. Use meaningful names so you need fewer comments.
-
Keep comments up-to-date. Outdated comments are misleading and harmful.
-
Use comments for TODOs, FIXMEs, and documentation.
-
Don’t leave dead code commented out. Use version control.
Writing good comments is a sign of a considerate and professional programmer. It shows that you care not only about making the code work but also about making it understandable for everyone who comes after you—including your future self, who will be eternally grateful for those helpful notes when debugging at 3 AM.
