Baja-Charter/Software/Commenting Pratices.md

178 lines
4.7 KiB
Markdown

# When does code need comments
## Needs Comments
This example needs comments
```rust
fn main () {
let length1 = 8;
let width1 = 4;
println!("The area of a rectangle is {} square units.",
area(length1, width1)
}
fn area (length: i32, width: i32) -> i32 {
length * width
}
```
Not really great nothing related needs specifically named variables that losely relate to one another.
Variables are ambiguous to their relationship, for example is `length1` related to `rectange1` or some other rectangle (who knows)
## Needs comments for a differnent reason, not well defined relationship
Here is a bit better but still needs comments to define the relationship and what is going on
```rust
fn main () {
let rectangle1 = (8, 4);
println!("The area of a rectangle is {} square units.",
area(rectangle1)
);
}
fn area (dimensions: (i32, i32)) -> i32 {
dimensions.0 * dimensions.1
}
```
Now what does the first and second index of the tuple mean?
It could be width then length this is still ambugious
## Very Little Comments Required
This is very clear from a first read but it could use some comments
```rust
struct Rectangle {
length: u32,
width: u32,
}
fn main () {
let rect1 = Rectangle {
length: 8,
width: 4,
};
println!("The area of a rectangle is {} square units.",
area(&rect1)
);
}
fn area (rect: &Rectangle) -> u32 {
rect.length * rect.width
}
```
Could be better due to the way that shapes all have unique area formulas
In this case it should be a method that implements a `trait` (a common shared method, also known as a interface) so that its relationship is very well defined
## The Worst Code I Have Written
This is when things needs to be refactored because comments cannot save it
This code was written by Brock
```javascript
<div id="Sponsor">
<h2 className="SponsorsTitle">Current Sponsors</h2>
{/* shows the current sponsors only after the data has been recieved */}
{currentSponsorsDict === undefined ? (
<p>Loading...</p>
) : (
<>
{/* gets the outmost name of the Object Name of tier*/}
{Object.keys(currentSponsorsDict).map((sponsorsTier) => {
return (
<div className="Sponsors">
<h3>{sponsorsTier}</h3>
{/* gets key form list of tier */}
{Object.keys(currentSponsorsDict[sponsorsTier]).map(
(sponsorsKey) => {
return (
<>
{/* gets name out of object and gets data of that sponsor preped */}
{Object.keys(
currentSponsorsDict[sponsorsTier][sponsorsKey]
).map((sponsorName) => {
let sponsorData =
currentSponsorsDict[sponsorsTier][sponsorsKey][
sponsorName
];
return (
<a
href={sponsorData.Url}
target="_blank"
rel="noreferrer">
<div>
<h4>{sponsorName}</h4>
<img
src={sponsorData.LogoUrl}
alt={sponsorName + "'s Logo"}
/>
</div>
{(sponsorsTier !== "Silver Tier" ||
sponsorsTier !== "Bronze Tier") && (
<div>
<p>{sponsorData.DescriptionAboutSponsor}</p>
</div>
)}
</a>
);
})}
</>
);
}
)}
</div>
);
})}
</>
)}
</div>
<div id="Sponsor">
<h2
className="SponsorsTitle"
id="SponsorEnd">
Past Sponsors
</h2>
{/* shows past sponsors only when recieved, do not duplicate the sponsors from current ones */}
{pastSponsorsDict === undefined ? (
<p>Loading...</p>
) : (
<>
{/* gets keys o objects in list */}
{Object.keys(pastSponsorsDict).map((pastSponsorKey) => {
return (
<div className="Sponsors">
{/* gets name of sponsor then uses it to get data of past sponsor */}
{Object.keys(pastSponsorsDict[pastSponsorKey]).map(
(pastSponsorName) => {
let pastSponsors =
pastSponsorsDict[pastSponsorKey][pastSponsorName];
return (
<a
href={pastSponsors.Url}
target="_blank"
rel="noreferrer">
<div>
<h4>{pastSponsorName}</h4>
<img
src={pastSponsors.LogoUrl}
alt={pastSponsorName + "'s Logo"}
/>
</div>
</a>
);
}
)}
</div>
);
})}
</>
)}
</div>
</div>
);
};
export default OurSponsors;
```