Code
Smells āļේāļģුāļ¸් āļැāļąීāļ¸ āˇāˇ āļāˇා āˇāˇ
āļ්āˇා āļāļą්āļąේ āļෙāˇේāļ¯?
-
Code smells āļēāļąු āļāļļේ āļේāļāļēේ āļැāļšුāļģු āļැāļ§āˇ
ු āļ´ිāˇ
ිāļļāļŗ āļ¯āļģ්āˇāļ
āˇේ. āļ¯ෝ⎠āļ
āˇāˇ්āļēāļēෙāļą්āļ¸ āļąොāˇුāļąāļ්, āļāˇා āļąāļŠāļ්āļු āļ¯ුāˇ්āļāļģāļා, āļිāļēāˇීāļ¸ේ āˇැāļිāļēා⎠āļ
āļŠු āˇීāļ¸ āˇāˇ āļාāļ්āˇāļĢිāļ āļĢāļē āˇැāļŠි āˇීāļ¸āļ§
āˇේāļු āˇිāļē āˇැāļි āļ¯ුāļģ්āˇāļŊ āļąිāļģ්āļ¸ාāļĢ āļේāļģීāļ¸් āļēෝāļĸāļąා āļāļģāļēි. āļේāļ āˇුāˇāļŗ āļāļŊිāļą් āˇāļŗුāļąා āļැāļąීāļ¸ āˇāˇ āļāļ¸āļą්āļ්āļģāļĢāļē
āļිāļģීāļ¸ āļේāļ āļුāļĢාāļ්āļ¸āļāļˇාāˇāļē āˇැāļŠි āļ¯ිāļēුāļĢු āļāļģāļą āļ
āļāļģ āļ¯ිāļුāļාāļŊීāļą āˇ්āļēාāļ´ෘāļි āˇාāļģ්āļŽāļāļ්āˇāļē āˇāˇāļිāļ
āļāļģāļēි.
-
āļ¸ෙāļ¸ āļŊිāļ´ිāļē Code smells āļēāļąු āļුāļ¸āļ්āļ¯ැāļēි āļ´ැāˇැāļ¯ිāļŊි āļāļģāļēි, āļāļ¯ාāˇāļģāļĢ āˇāļ´āļēāļēි, āˇāˇ āˇාāļ¸ාāļą්āļē āļ්āļģāļ¸āļŊේāļāļąāļēේāļ¯ී āˇāˇ Arduino
āˇංāˇāļģ්āļ°āļąāļēේāļ¯ී āļāˇා āˇāˇ
āļ්āˇා āļැāļąීāļ¸āļ§ āļāļ´āļ¯ෙāˇ් āļŊāļļා āļ¯ෙāļēි.
-
Code smells āļēāļąු āļුāļ¸āļ්āļ¯?
Code smells āļēāļąු āļāļļේ āļේāļāļē āˇැāļŊāˇුāļ¸් āļිāļģීāļ¸ේāļ¯ී āˇෝ āļ්āļģිāļēාāļ්āļ¸āļ āļිāļģීāļ¸ේāļ¯ී
āļēāļ¸් āˇැāļģැāļ¯්āļ¯āļ් āˇිāļ¯ුāˇිāļē āˇැāļි āļļāˇāļ§ āļŊāļුāļĢāļි. āļ¸ෙāļ¸ āļැāļ§āˇ
ු āļේāļāļē āļේāļģුāļ¸් āļැāļąීāļ¸āļ§, āļ¯ිāļු āļිāļģීāļ¸āļ§ āˇෝ āļ¯ෝāˇāˇāļģāļĢāļē āļිāļģීāļ¸āļ§ āļ
āļ´āˇāˇු āļāļģāļēි. āļ¯ුāļģ්āˇāļŊ
āˇැāļŊāˇුāļ¸් āļිāļģීāļ¸, āļāļŠිāļąāļ¸් āˇංāˇāļģ්āļ°āļąāļē āˇෝ āļේāļāļąāļē āļිāļģීāļ¸ේ āˇොāļŗāļ¸ āļ´ිāˇ
ිāˇෙāļ්
āļ´ිāˇ
ිāļ´ැāļ¯ීāļ¸ āļąොāļ¸ැāļිāļāļ¸ āļ´ොāļ¯ු āˇේāļු āļ
āļāļģ āˇේ.
-
āļ´ොāļ¯ු Code smells āˇāˇ āļāļ¯ාāˇāļģāļĢ
1. āļ¯ිāļු āˇ්āļģිāļ
Smell: āļ
āļ°ිāļ āļŊෙ⎠āļ¯ිāļු āˇ්āļģිāļ āļේāļģුāļ¸් āļැāļąීāļ¸āļ§ āˇāˇ āļ¯ෝāˇāˇāļģāļĢāļē āļිāļģීāļ¸āļ§ āļ
āļ´āˇāˇු āˇේ.
āļāļ¯ාāˇāļģāļĢāļē:
void
handleSensorAndDisplayData() {
// Read sensor
// Process data
// Update display
// Handle errors
// Log data
// Send over network
}
-
āˇිāˇāļŗුāļ¸: āˇ්āļģිāļāļē āļුāļŠා,
āļąාāļˇිāļāļ āˇ්āļģිāļāˇāļŊāļ§ āļāļŠා āļ¯āļ¸āļą්āļą.
-
void handleSensorAndDisplayData() {
readSensor();
processData();
updateDisplay();
}
-
2. āļ
āļąුāļ´ිāļ§āļ´āļ් āļේāļāļē
Smell: āļāļāļ¸ āļේāļāļē āˇ්āļŽාāļą āļිāˇිāļ´āļēāļ āļ´ිāļ§āļ´āļ් āļāļģ āļāļŊāˇීāļ¸ āļąāļŠāļ්āļු āļļāļģ āˇැāļŠි āļāļģāļēි.
āļāļ¯ාāˇāļģāļĢāļē:
if (sensorValue >
100) {
digitalWrite(ledPin, HIGH);
} else {
digitalWrite(ledPin, LOW);
}
if
(buttonState == HIGH) {
digitalWrite(ledPin, HIGH);
} else {
digitalWrite(ledPin, LOW);
}
-
3. āļ
āļ¯āˇāˇ් āļāļąෑāˇāļ§ āˇāļŠා
Smell: āļ
āļ¯āˇāˇ් āļāļąෑāˇāļ§ āˇāļŠා āļ
āˇāˇ්āļē āļāļģāļą āļේāļāļē āˇ්āˇāļēං āļ´ැāˇැāļ¯ිāļŊි āļිāļģීāļ¸āļ් āļąොāˇිāļē āˇැāļිāļē.
āļāļ¯ාāˇāļģāļĢāļē:
// Turn on the LED
digitalWrite(ledPin, HIGH);
// Wait for 1000ms
delay(1000);
// Turn off the LED
digitalWrite(ledPin, LOW);
-
āˇිāˇāļŗුāļ¸: āļ
āļ¯āˇāˇ් āļ¯ැāļ්āˇීāļ¸ේ āļ
āˇāˇ්āļēāļාāˇāļē āļ
āļŠු āļිāļģීāļ¸ āˇāļŗāˇා āļ´ැāˇැāļ¯ිāļŊි, āļ
āļģ්āļŽāˇāļ් āˇිāļ āļŊ්āļē āˇāˇ āˇ්āļģිāļ āļąāļ¸් āļˇාāˇිāļා āļāļģāļą්āļą.
-
turnOnLED();
delay(1000);
turnOffLED();
-
4. āļ¯ෘāļĒ-āļේāļāļāļ āļ
āļāļēāļą්
Smell: āļේāļāļē āļුāˇ
āļෙāļŊිāļą්āļ¸ āļ¸ැāļĸිāļ් āļ
ංāļ āˇෝ āļąූāļŊ් āļˇාāˇිāļා āļිāļģීāļ¸ āļāļē āļ
āļŠු āļąāļ¸්āļēāˇීāļŊී
āļāļģāļēි.
āļāļ¯ාāˇāļģāļĢāļē:
if (temperature > 37.5) {
alert();
}
-
āˇිāˇāļŗුāļ¸: āļ´ැāˇැāļ¯ිāļŊි āļļ⎠āˇāˇ āļąāļŠāļ්āļු āļිāļģීāļ¸ේ āˇැāļිāļēා⎠āˇāļŗāˇා āļąිāļēāļāļēāļą් āˇෝ āˇිāļ āļŊ්āļēāļēāļą් āļˇාāˇිāļා
āļāļģāļą්āļą.
-
const float feverThreshold = 37.5;
if (temperature > feverThreshold) {
alert();
}
-
5. āˇිāˇාāļŊ āļ´āļą්āļි(Classes)
Smell: āļāļąෑāˇāļ§ āˇāļŠා āˇāļāļීāļ¸් āļāļි āļ´āļą්āļි āļāļąි āˇāļāļීāļ¸් āļ¸ූāļŊāļ°āļģ්āļ¸āļē (SRP) āļāļŊ්āļŊංāļāļąāļē āļāļģāļēි.
āļāļ¯ාāˇāļģāļĢāļē:
class SmartHome {
void
controlLights();
void
controlThermostat();
void
monitorSecurity();
void
manageSchedules();
}
-
āˇිāˇāļŗුāļ¸: āļුāļŠා, āļ
āļģāļ¸ුāļĢු-āļąිāˇ්āļ ිāļ āļ´āļą්āļිāˇāļŊāļ§ āļļෙāļ¯āļą්āļą.
class LightController {};
class ThermostatController {};
class SecurityMonitor {};
class ScheduleManager {};
-
6. āļ
āļ°ිāļ If-Else āļ¯ාāļ¸
Smell: if-else āˇෝ switch āļ´්āļģāļාāˇāļąāˇāļŊ āļ¯ිāļු āļ¯ාāļ¸āļēāļą් āļේāļāļē āļ
āļąුāļāļ¸āļąāļē āļිāļģීāļ¸ āļ¯ුāˇ්āļāļģ āļāļģāļēි.
āļāļ¯ාāˇāļģāļĢāļē:
if (command == "start") startMotor();
else if (command == "stop") stopMotor();
else if (command == "pause") pauseMotor();
else if (command == "resume") resumeMotor();
-
āˇිāˇāļŗුāļ¸: āˇ්āļģිāļ āļ¯āļģ්āˇāļ āˇෝ āˇāļļ්āļ¯āļෝāˇāļēāļ් āˇැāļąි āˇිāļිāļēāļ¸්āļāļģāļĢ āļ´්āļģāˇේāˇāļēāļ් āļˇාāˇිāļා āļāļģāļą්āļą.
-
typedef void (*CommandFunc)();
std::map<String, CommandFunc> commands = {
{"start",
startMotor},
{"stop",
stopMotor},
{"pause",
pauseMotor},
{"resume",
resumeMotor}
};
commands[command]();
-
7. āļ
āļ°ිāļ āˇංāļීāļģ්āļĢ āļāļģ්āļāļąāļē
Smell: āˇංāļීāļģ්āļĢ, āļැāļ¯ැāļŊි āļāļģ්āļāļąāļē āļිāļēāˇීāļ¸āļ§ āˇāˇ āļ¯ෝāˇāˇāļģāļĢāļē āļිāļģීāļ¸āļ§ āļ
āļ´āˇāˇු āˇිāļē āˇැāļිāļē.
āļāļ¯ාāˇāļģāļĢāļē:
if ((temp > 30 && humidity < 40) || (rainDetected &&
windSpeed > 20)) {
takeAction();
}
-
āˇිāˇāļŗුāļ¸: āļොāļą්āļ¯ේāˇි āˇāļģāļŊ āļිāļģීāļ¸ āˇāļŗāˇා āļāļ´āļාāļģāļ āˇ්āļģිāļ āļˇාāˇිāļා āļāļģāļą්āļą.
-
if (isHotAndDry() || isStormy()) {
takeAction();
}
-
Code Smells āˇāˇ
āļ්āˇා āļāļą්āļąේ āļෙāˇේāļ¯?
āļāļļේ āļේāļāļē āˇැāļŊāˇුāļ¸් āļāļģāļą්āļą: āļŊිāˇීāļ¸āļ§ āļ´ෙāļģ āļąිāļģ්āļ¸ාāļĢāļē āļිāļģීāļ¸āļ§ āļාāļŊāļē āļāļ āļāļģāļą්āļą. āˇිāˇාāļŊ
āļාāļģ්āļēāļēāļą් āļුāļŠා, āļāˇ
āļ¸āļąාāļāļģāļĢāļē āļāˇ
āˇැāļි āˇංāļģāļ āļ āˇāļŊāļ§ āļļෙāļ¯āļą්āļą.
āˇොāļŗāļ¸ āļ´ිāˇ
ිāˇෙāļ් āļ
āļąුāļāļ¸āļąāļē āļāļģāļą්āļą: DRY (āļāļļāļ¸ āļąැāˇāļ āļąොāļāļģāļą්āļą) āˇāˇ SRP (āļāļąි āˇāļāļීāļ¸් āļ¸ූāļŊāļ°āļģ්āļ¸āļē) āˇැāļąි āļ¸ූāļŊāļ°āļģ්āļ¸āˇāļŊāļ§ āļāļŊී āˇිāļ§ිāļą්āļą.
āļąිāļිāļ´āļා āļ´්āļģāļිāļąිāļģ්āļ¸ාāļĢāļē āļāļģāļą්āļą: āļāļģ්āļāļąāļē āˇāļģāļŊ āļිāļģීāļ¸ෙāļą් āˇāˇ āļ
āļිāļģිāļ්āļ āļොāļ§āˇ් āļāˇāļ් āļිāļģීāļ¸ෙāļą්
āļේāļāļē āļ
āļāļĢ්āļŠāˇ āˇැāļŠි āļ¯ිāļēුāļĢු āļāļģāļą්āļą.
āˇ්āˇāļēං āļ´ැāˇැāļ¯ිāļŊි āļිāļģීāļ¸ේ āļේāļāļē āļŊිāļēāļą්āļą: āļේāļāļē āļļුāļ¯්āļ°ිāļ¸āļē āļිāļģීāļ¸āļ§ āˇිāˇ්āļāļģාāļ්āļ¸āļ āˇිāļ āļŊ්āļē āˇāˇ āˇ්āļģිāļ
āļąāļ¸් āļˇාāˇිāļා āļāļģāļą්āļą.
āļāļ්āļෝāļŊāļą āļ¸ෙāˇāļŊāļ¸්: code smell āˇ්āˇāļēංāļ්āļģීāļē⎠āˇāļŗුāļąා āļැāļąීāļ¸āļ§ Lint āˇāˇ āˇ්āļŽිāļිāļ āˇිāˇ්āļŊේāˇāļĢ āļ¸ෙāˇāļŊāļ¸් āļˇාāˇිāļා āļāļģāļą්āļą.
-
āļąිāļāļ¸āļąāļē
āļ´ිāļģිāˇිāļ¯ු, āļąāļŠāļ්āļු āļāˇ
āˇැāļි āˇāˇ āļ´āļģිāļ¸ාāļĢāļē āļāˇ
āˇැāļි āļේāļāļēāļ් āļŊිāˇීāļ¸ āˇāļŗāˇා code smells āˇāļŗුāļąා āļැāļąීāļ¸ āˇāˇ āļāļ¸āļą්āļ්āļģāļĢāļē āļිāļģීāļ¸ āļāļා āˇැāļ¯āļāļ් āˇේ. āļāļļේ āļේāļāļē āļąිāļිāļ´āļා āˇāļ¸ාāļŊෝāļ āļąāļē
āļිāļģීāļ¸ෙāļą්, āļąැāˇāļ āˇāļāˇ් āļිāļģීāļ¸ෙāļą් āˇāˇ āļේāļීāļāļģāļĢ āļ¸ූāļŊāļ°āļģ්āļ¸āˇāļŊāļ§
āļ
āļąුāļāļ āˇීāļ¸ෙāļą්, āļāļļāļ§ āļැāļ§āˇ
ු āˇāˇ
āļ්āˇා āļāļ āˇැāļි āļ
āļāļģ āļāļļේ āˇ්āļēාāļ´ෘāļි
āˇāļ්āļිāļ¸āļ් āˇāˇ āļ
āļąාāļāļāļēāļ§ āļāļģොāļ්āļු āļ¯ෙāļą āļļ⎠āˇāˇāļිāļ āļāˇ
āˇැāļිāļē.
-
āļාāļ¸āļ් āļ
āļ´ේ group āļāļේ āļąැāļ්āļāļą් group āļāļāļ§ āˇෙāļ§් āˇෙāļą්āļą :
https://www.facebook.com/groups/paperclipx
āļ¸ේ group āļāļේ āļ¯ාāļą āļ¯ේāˇāļŊ් āˇොāļŗāļēි āļිāļēāļŊ āˇිāļෙāļąāˇāļąāļ¸් āļāļොāļŊ්āļŊොāļą් āļේ āļēාāļŊුāˇāļą්āˇāļ් group
āļāļāļ§ āļāļāļු āļāļģāļą්āļą !