第5回 解答例
const・名前空間・オーバーロード
演習の解答例。まず自分で書いてから読むこと。
1. constでマジックナンバーを排除する
修正前:
if (analogRead(6) > 2000) {
analogWrite(24, 128);
}修正後:
const int SENSOR_PIN = 6;
const int MOTOR_PIN = 24;
const int SENSOR_THRESHOLD = 2000;
const int MOTOR_HALF = 128;
if (analogRead(SENSOR_PIN) > SENSOR_THRESHOLD) {
analogWrite(MOTOR_PIN, MOTOR_HALF);
}34や2000が何の数字なのかが名前から分かる。配線を変えたときも1か所直せばよい。
2. 名前空間にまとめる
namespace Sensor {
const int PIN = 6;
const int THRESHOLD = 2000;
void begin();
int read();
bool isNear();
}#include <Arduino.h>
#include "Sensor.hpp"
namespace Sensor {
void begin() {
pinMode(PIN, INPUT);
}
int read() {
return analogRead(PIN);
}
bool isNear() {
return read() > THRESHOLD;
}
}使う側:
Sensor::begin();
if (Sensor::isNear()) {
// ...
}3. 関数オーバーロード
int add(int a, int b) {
return a + b;
}
float add(float a, float b) {
return a + b;
}
void setup() {
Serial.begin(115200);
Serial.println(add(1, 2)); // int版が呼ばれる → 3
Serial.println(add(1.5f, 2.5f)); // float版が呼ばれる → 4.00
}引数の型で呼び分けられる。呼ぶ側はaddという1つの名前を覚えればよい。