Простой блог быдлокодера

4.14K
.
reaper
Koenig, man prepared statements.

Сравни:

let total = try!(try!(conn.prepare("SELECT COUNT(*) FROM table WHERE id = $1")).execute(&[&id])).iter().next().unwrap().get(0);


и:

$total = $conn->query('SELECT COUNT(*) FROM table WHERE id = :id', [':id' => $id])->fetchColumn();


Что читабельнее?
.
Кадило крутится, лавэха мутится
# reaper (21.04.2016 / 15:19)
Что читабельнее?
Я конечно х.з. но 2)
.
(\/)____o_O____(\/)
reaper, а разве в пхп оно так? мне пых больше читается, но информации в первой записи больше
.
(\/)____o_O____(\/)
вроде же prepare->execute->fetch
.
# Simba (21.04.2016 / 15:35)
Я конечно х.з. но 2)
согласен =)
.
Koenig, Там лишних ни о чём не говорящих телодвижений больше. Вот сам смотри: iter().next().unwrap().get(0). Ты можешь не зная контекста сказать, что тут происходит? Получаем итератор, переходим к первому элементу, получаем его значение или паникуем, если там ничего нет, получаем какой-то элемент из какой-то структуры по индексу 0. А нахрена всё это? fetchColumn же ясно говорит, что мы получаем какую-то колонку. Вероятно за fetchColumn скрывается примерно такая же логика, как и в первом варианте, но писанины гораздо меньше и шансов понять, что происходит гораздо больше.
.
# Koenig (21.04.2016 / 15:39)
вроде же prepare->execute->fetch
Можно сразу query писать. Загляни в мануал. Я это из своего старого проекта скопипастил и адаптировал немного.
.
(\/)____o_O____(\/)
reaper, да я первым делом глянул
http://php.net/manual/ru/pdo.query.php
только там другое
.
Так-то лучше. Макросы рулят и педалят.

Композиция кстати тоже. Можно вот так просто взять и реализовать нужные методы для структуры из какой-нибудь библиотеки. При этом видимы они будут только при условии, что типаж был заимпортирован, в отличии от каких нибудь рубей, где это работает через жопу своего рода обезьяний патчинг, из-за чего потом велика вероятность, что придётся искать, какой же мудак добавил какой-то метод в некоторый тип (стандартной) библиотеки и теперь всё сломалось.

extern crate postgres;

use postgres::rows::Rows;
use postgres::types::FromSql;

trait FetchColumn {
    fn fetch_column<T: FromSql>(&self) -> T;
}

impl <'a> FetchColumn for Rows<'a> {
    fn fetch_column<T: FromSql>(&self) -> T {
        self.iter().next().map(|row| row.get(0)).unwrap()
    }
}
Прикрепленные файлы:
.
reaper, А что делает try?
Второй вариант конечно лучше.
Всего: 215