トラック
/
Swift
Swift
/
演習
/
フリーランスの料金
フリーランスの料金

フリーランスの料金

学習演習

はじめに

数値

Swiftには、主に2つの数値のカテゴリがあります。整数と浮動小数点数です。

  • 整数は、0、1、-1、42、-273のように、小数部分を持たない数を表します。
  • 浮動小数点数は、0.0、3.14、-1.36969e-10のように、小数部分を持つ数値を表します。

数値リテラルには、読みやすくするためにアンダースコアを挿入できます。1_000_000は1000000と同じです。 浮動小数点リテラルは、10進数表記または指数表記で書くことができます。

ほとんどの場合、整数にはIntを、浮動小数点数にはDoubleを使います。

let speed: Int = 42                           // Explicit Int
let pi: Double = 3.14                         // Explicit Double
let giga: Double = 1_000_000_000              // Double with readability underscores
let plancksConstant: Double = 6.62607015e-34  // Double in scientific notation

算術演算子

Swiftには、数値計算のための標準的な算術演算子があります。

演算子 説明 例
+ 加算 4 + 6の結果は10
- 減算 15 - 10の結果は5
* 乗算 2 * 3の結果は6
Caution

Swiftは型安全であり、算術演算で異なる数値型を混ぜることはできません。 IntとDoubleを直接足したり掛けたりすることはできません。先に、一方の型をもう一方に合わせて変換する必要があります。

除算

/演算子は除算を行います。 両方のオペランドが整数の場合、整数除算では小数部分が切り捨てられます。

5.0 / 2.0 // 2.5 (Double division)
5 / 2     // 2 (integer division truncates the remainder)

0以外の浮動小数点数を0で割ると、infまたは-infになります。 0.0を0.0で割ると、nan(Not a Number)になります。 一方、整数を0で割ると、コンパイル時または実行時エラーになります。

print(5.0 / 0.0)  // Prints inf
print(-5.0 / 0.0) // Prints -inf
print(0.0 / 0.0)  // Prints nan

// The following line will not compile:
// print(5 / 0) // Error: Division by zero

余り演算子

余り演算子(%)は、2つの整数を割った余りを計算します。

5 % 2  // 1
-5 % 2 // -1

// Dividing by zero produces an error:
// 5 % 0 // Error: Division by zero
Note

Swiftでは、%はモジュロ演算子ではなく、真の余り演算子です。 結果は、2番目のオペランドの符号に関係なく、常に最初のオペランド(被除数)の符号になります。

5 % -2  // 1
-5 % 2  // -1

浮動小数点数の丸め

rounded()メソッドを使うと、浮動小数点数を丸めることができます。 デフォルトでは、rounded()は最も近い整数に丸めます。 .upや.downなど、特定の丸め規則を指定することもできます。

let x = 3.14
let y = x.rounded()      // 3.0
let w = x.rounded(.down) // 3.0
let z = x.rounded(.up)   // 4.0

型推論

数値の定数や変数を型注釈なしで宣言すると、Swiftがその型を推論します。

  • 整数はデフォルトでIntになります。
  • 小数点を含む数値はデフォルトでDoubleになります。
let x = 42         // Inferred as Int
let y = 42.0       // Inferred as Double
let z: Double = 42 // Explicitly typed as Double

型変換

異なる型の値どうしで演算を行うには、Double(_:)やInt(_:)のような型イニシャライザーを使って、一方の値を変換します。

let integerCount = 42
let floatingCount = Double(integerCount)
print(floatingCount) // Prints 42.0

let pi = 3.14
let integerPi = Int(pi)
print(integerPi) // Prints 3 (fractional part is truncated)

説明

この演習では、フリーランサーがプロジェクトマネージャーとやり取りするのを手助けするコードを書きます。いくつかのユーティリティを用意して、日額と月額をすばやく計算できるようにしましょう。割引が指定される場合もあります。

まず、フリーランサーとプロジェクトマネージャーの間で、いくつかのルールを決めておきます。

  • 日額は、時給の8倍です。
  • 1か月の請求対象日数は22日です。

場合によっては、フリーランサーが日額に割引を適用することもあります(たとえば、いちばん忠诚の高い顧客や非営利の顧客に対して)。

割引は、割合を表す小数として扱います。たとえば25.0(25%)です。

1. 時給から日額を計算する

引数として時給を受け取り、日額を計算するdailyRateFromという関数を実装します。 契約では、1日は8時間が請求対象と定められています。

dailyRateFrom(hourlyRate: 60)
// Returns 480.0

返される日額はDoubleでなければなりません。

2. 時給と割引から月額を計算する

割引後の月額を計算するmonthlyRateFrom関数を実装します。 引数は2つ、時給と割引率(パーセント)です。

monthlyRateFrom(hourlyRate: 77, withDiscount: 10.5)
// Returns 12129

返される月額は、最も近い整数に切り上げる(天井関数を使う)必要があります。

3. 予算、時給、割引から、まるまる働ける営業日数を計算する

予算、時給、割引を受け取り、それが丸1日分の仕事を何日まかなえるかを計算するworkdaysIn関数を実装します。

workdaysIn(budget: 20000, hourlyRate: 80, withDiscount: 11.0)
// Returns 35.0

返される日数は、次の整数に切り捨てる(床関数を使う)必要があります。

GitHubで編集する リンクは新しいウィンドウまたはタブで開きます
Swift Exercism

フリーランスの料金を始める準備はできましたか?

Exercismに登録すれば、35個のコンセプト116個の演習、そして本物の人間によるメンタリングとともに、Swiftを学んでマスターできます。すべて無料です。