Ruby 實體方法 vs 類別方法

快速了解 Ruby 中 實體方法(Instance method) 與 類別方法(Class method)的差異。 方法 Method Ruby 世界的方法(Mehod)可以對應到其他程式語言中的函式(function),將一些行為定義在方法中,藉由帶入引數並執行方法的過程來簡化程式的撰寫,以及達到程式碼重複利用的效果。Ruby 中的方法由def開頭,並且以小寫、蛇式的方式命名,例如下方範例中,簡單定義了一個方法並於外部呼叫,方法執行結束前會回傳最後ㄧ行的執行結果。 def calculate_bmi(weight_kg, height_m) weight_kg / height_m ** 2 end p calculate_bmi(60, 1.75) # 19.591836734693878 實體方法 & 類別方法 實體(Instance)是由類別(Class)為模板所產生的獨立物件,他可以使用定義在類別中的實體方法,但是不能使用定義在類別中的類別方法。同樣的,類別本身可以使用類別方法, 但是不能使用實體方法。 簡單來說,實體方法與類別方法的使用對象不同,實體方法 for 實體,類別方法 for 類別,雖然方法都是定義在類別中,但是兩者是不能混用的。 class Student def initialize(name) @name = name end def self.say_classroom_name p "All students are in Room 311" end def say_my_name p "My name is #{@name}" end end student01 = Student.new("Lisa") student02 = Student.new("Kevin") student01....

April 23, 2023 · 132 words · HSIAO, YI-HUSAN

Rails 使用 PostgreSQL

Rails 預設的資料庫是 Sqlite,如欲使用較為專業的開源資料庫 PostgreSQL,可參照此說明筆記進行操作。 安裝 PostgreSQL on Mac 使用 Homebrew 套件管理工具安裝: $ brew install postgresql(預設安裝 postgreSQL v14) 安裝後重新啟動$ brew services restart postgresql 重新啟動 Terminal 查看版本$ postgres --version或$ psql --version 在 Rails 專案建立 PostgreSQL 資料庫 Pre-requisites: 確認已經在本機中安裝 PostgreSQL 本機中必須保持運行 PostgreSQL,可透過$ brew service list查看運行狀況。 postgresql@14 started hsuan ~/Library/LaunchAgents/[email protected] 如果 PostgreSQL 沒有於背景運行,可見以下相關啟動 PostgreSQL 的操作指令: 方法一使用 psql 手動啟動和停止 PostgreSQL,每次需要輸入相應的指令(較不推薦)。 psql -D /usr/local/var/postgres start psql -D /usr/local/var/postgres stop 方法二使用 Homebrew 服務管理工具啟動和停止 PostgreSQL。此方法將 PostgreSQL 服務作為系統常駐運行的服務,可在在系統啟動後自動啟動(推薦)。 $ brew services start postgresql $ brew services stop postgresql $ brew services restart postgresql Step1:安裝 pg gem 方法 1:建立新專案時就選擇使用 PostgreSQL:$ rails new myapp --database=postgresql 方法 2:單純 new 新專案,接著安裝 pg gem: $ bundle add pg+$ bundle install 方法 1 較為推薦,可以讓 rails 自動幫妳生成相關設定,如果是使用方法 2,則要將原先在 Gemfile 中的gem sqlite3手動移除,只保留gem pg(通常一個專案僅需要一個資料庫) Step2:設定資料庫 adapter 接著設定 Rails 專案的 config/database....

April 15, 2023 · 245 words · HSIAO, YI-HUSAN

Rails ORM 常見的CRUD指令

CRUD = Create Read Update Delete是網站開發中的基本,在此筆記常用到的Rails CRUD指令。 Create new:產生新資料,但不會存檔 create:產生新資料,會直接存檔 create!:與create相同,但過程中發生錯誤時會報錯 new_book = Book.new(name: "老人與海", price: 300) new_book.save Book.create(name: "Les Misérables", author: "Victor Hugo") Read all:一次抓取所有資料 limit():抓去特定數量資料 first & last:找到該資料類型中的第一筆 & 最後一筆資料 find_by(id: 1):找到第一筆符合條件的資料,找不到會回傳nil find_by!(id: 1):與find_by相同,但是找不到資料會報錯 find(1):依據id找尋資料,找不到資料會報錯 select('name'):只抓出資料表中的特定欄位(資料表欄位太多時可以節省記憶體空間) where():以陣列的形式回傳找到的多筆符合條件的資料,找不到回傳空矩陣 find_by_sql():使用sql語法查詢(較少使用) order('price AESC'):依照遞增或遞減順序抓取所有資料 order(price: :aesc):order的不同寫法 find_each:batch find寫法,預設先抓出1000筆資料,當資料量太多時使用 Book.all Book.limit(5) // 抓取前五筆資料 Book.offset(5).limit(5) // 抓取下五筆資料 Book.first Book.last Book.find(id: 10) Book.find_by(id: 10, author: "Victor Hugo") // 依據多個條件尋找 and Book.find_by!(id: 9999) //報錯: in `find_by!': Couldn't find Book (ActiveRecord::RecordNotFound) Book....

April 4, 2023 · 186 words · HSIAO, YI-HUSAN

JavaScript 中的 Call by sharing

Call by value、Call by reference在一般的程式語言中是常見的基本觀念,但在JavaScript中多了一項Call by sharing,這裡做個簡單的說明。 1. Data Type JavaScript 的資料類別可以分為: 基本型別(Primitive):string、number、boolean、null、undefined 物件型別(Object):object、symbol 基本型別會以純值的形式存在,而物件型別則是由零或不同型別的值所組成。 這邊之所以提及 Data Type 是因為資料類別會決定 call by value、call by reference、call by sharing 的運作時機。 2. 變數的真實樣貌 在提到 call by value 之前,我們先簡單講解平常看到的「變數」在程式中的真實樣貌。 當我們宣告一個變數時,如:let num = 1234,程式會自動分配一份記憶體空間,空間內部可以存放我們想要的資料,並且給予該空間一個名字。 以這段程式碼為例,num便是記憶體空間的名字(variable name),123是變數初始化後內部所存放的資料(variable value),另外還有我們平常看不到,用來標注空間所在位置的記憶體地址(memory address)。 3. 基本型別 & 物件型別 變數作為一個資料容器,當內部儲存的數值是基本型態時進行比較: let a = "Dog"; let b = "Dog"; let c = "Cat"; // 變數之間進行數值比較 console.log(a === b); //true console.log(b === c); //false 基本型態下兩者的比較結果可想而知,比較式會取出兩變數內的「值」進行比較,但是當變數內部儲存的值是物件型態時,比較結果會有所不同:...

April 3, 2023 · 317 words · HSIAO, YI-HUSAN

JavaScript 矩陣, 字串, 數字 實用語法集

大家在新學習一門程式語言時,想必都會經歷一段不斷刷題練習的時期,在練題及翻閱官方文件的過程中除了更加熟悉該語言,同時也累積了不少好用的語法及函式,藉由這個筆記,希望可以幫助大家統整 JS 中實用的語法與操作,筆記主要著重在矩陣、數字、字串間的使用方法與關係,那些過於複雜或冷門的就不收錄了。 1. String 使用方法 字串轉矩陣 Convert string to array: 在確認是否轉換成功時要使用isArray,不能使用typeof(typeof 回傳結果是number) // ES6 spread syntax ... [...str] ex: let arr = [..."123"] // ["1","2","3"] // split() str.split() ex: "123".split("") // ["1","2","3"] ex: "123".split() // ["123"] // Array.from() Array.from(str) ex: Array.from("123") // ["1","2","3"] 字串中取出字串 Extract string from string: //slice, startIndex ~ endIndex,endIndex 不包括在內,回傳新 string,原 string 不變 //str.slice(startIndex, endIndex); ex: "01234".slice(1, 3); // "12" ex: "01234".slice(3, 1000); // "34" ex: "01234"....

March 22, 2023 · 1000 words · HSIAO, YI-HUSAN