VOTING POWER100.00%
DOWNVOTE POWER100.00%
RESOURCE CREDITS100.00%
REPUTATION PROGRESS61.08%
Net Worth
0.036USD
STEEM
0.060STEEM
SBD
0.045SBD
Effective Power
5.008SP
├── Own SP
0.185SP
└── Incoming DelegationsDeleg
+4.822SP
Detailed Balance
| STEEM | ||
| balance | 0.060STEEM | STEEM |
| market_balance | 0.000STEEM | STEEM |
| savings_balance | 0.000STEEM | STEEM |
| reward_steem_balance | 0.000STEEM | STEEM |
| STEEM POWER | ||
| Own SP | 0.185SP | SP |
| Delegated Out | 0.000SP | SP |
| Delegation In | 4.822SP | SP |
| Effective Power | 5.008SP | SP |
| Reward SP (pending) | 0.127SP | SP |
| SBD | ||
| sbd_balance | 0.000SBD | SBD |
| sbd_conversions | 0.000SBD | SBD |
| sbd_market_balance | 0.000SBD | SBD |
| savings_sbd_balance | 0.000SBD | SBD |
| reward_sbd_balance | 0.045SBD | SBD |
{
"balance": "0.060 STEEM",
"savings_balance": "0.000 STEEM",
"reward_steem_balance": "0.000 STEEM",
"vesting_shares": "301.327755 VESTS",
"delegated_vesting_shares": "0.000000 VESTS",
"received_vesting_shares": "7842.332051 VESTS",
"sbd_balance": "0.000 SBD",
"savings_sbd_balance": "0.000 SBD",
"reward_sbd_balance": "0.045 SBD",
"conversions": []
}Account Info
| name | nbkmundotech |
| id | 1131553 |
| rank | 242,967 |
| reputation | 7008751971 |
| created | 2018-09-06T05:30:54 |
| recovery_account | steem |
| proxy | None |
| post_count | 50 |
| comment_count | 0 |
| lifetime_vote_count | 0 |
| witnesses_voted_for | 0 |
| last_post | 2019-06-10T01:56:57 |
| last_root_post | 2019-06-10T01:56:57 |
| last_vote_time | 1970-01-01T00:00:00 |
| proxied_vsf_votes | 0, 0, 0, 0 |
| can_vote | 1 |
| voting_power | 0 |
| delayed_votes | 0 |
| balance | 0.060 STEEM |
| savings_balance | 0.000 STEEM |
| sbd_balance | 0.000 SBD |
| savings_sbd_balance | 0.000 SBD |
| vesting_shares | 301.327755 VESTS |
| delegated_vesting_shares | 0.000000 VESTS |
| received_vesting_shares | 7842.332051 VESTS |
| reward_vesting_balance | 253.881446 VESTS |
| vesting_balance | 0.000 STEEM |
| vesting_withdraw_rate | 0.000000 VESTS |
| next_vesting_withdrawal | 1969-12-31T23:59:59 |
| withdrawn | 0 |
| to_withdraw | 0 |
| withdraw_routes | 0 |
| savings_withdraw_requests | 0 |
| last_account_recovery | 1970-01-01T00:00:00 |
| reset_account | null |
| last_owner_update | 1970-01-01T00:00:00 |
| last_account_update | 2018-09-08T03:07:39 |
| mined | No |
| sbd_seconds | 0 |
| sbd_last_interest_payment | 1970-01-01T00:00:00 |
| savings_sbd_last_interest_payment | 1970-01-01T00:00:00 |
{
"active": {
"account_auths": [],
"key_auths": [
[
"STM6q7HUyECuQNsEifebVyx5rcirnh1RmEd8yhmpm7uSSdshCLomB",
1
]
],
"weight_threshold": 1
},
"balance": "0.060 STEEM",
"can_vote": true,
"comment_count": 0,
"created": "2018-09-06T05:30:54",
"curation_rewards": 0,
"delegated_vesting_shares": "0.000000 VESTS",
"downvote_manabar": {
"current_mana": 2035914951,
"last_update_time": 1779078084
},
"guest_bloggers": [],
"id": 1131553,
"json_metadata": "{\"profile\":{\"name\":\"NBK Mundo Tech\",\"about\":\"Aulas de desenvolvimento de software online\",\"website\":\"https://www.youtube.com/channel/UC0leK16nPQYAErHagb8-eEg\",\"profile_image\":\"https://cdn.steemitimages.com/DQme5LrKF79yK4GJxAq37SKhiZhrofXSXLgARXZRCdaWzdd/nbkmundotech_thumb128.png\"}}",
"last_account_recovery": "1970-01-01T00:00:00",
"last_account_update": "2018-09-08T03:07:39",
"last_owner_update": "1970-01-01T00:00:00",
"last_post": "2019-06-10T01:56:57",
"last_root_post": "2019-06-10T01:56:57",
"last_vote_time": "1970-01-01T00:00:00",
"lifetime_vote_count": 0,
"market_history": [],
"memo_key": "STM4zaQ2y9uE3Hvhoe8Hfc152FmbuwZYhJa8D1LegRCn3itKDDCrE",
"mined": false,
"name": "nbkmundotech",
"next_vesting_withdrawal": "1969-12-31T23:59:59",
"other_history": [],
"owner": {
"account_auths": [],
"key_auths": [
[
"STM63escPs2eC5Hs6cXpypLRGFYNLpJvR44RQ61mcuvabaT7ob1BD",
1
]
],
"weight_threshold": 1
},
"pending_claimed_accounts": 0,
"post_bandwidth": 0,
"post_count": 50,
"post_history": [],
"posting": {
"account_auths": [],
"key_auths": [
[
"STM5ayb2wPNpkMcMVZbxWU1oMoFs7CjzvgEn6tDP5fDLwSZMi679P",
1
]
],
"weight_threshold": 1
},
"posting_json_metadata": "{\"profile\":{\"name\":\"NBK Mundo Tech\",\"about\":\"Aulas de desenvolvimento de software online\",\"website\":\"https://www.youtube.com/channel/UC0leK16nPQYAErHagb8-eEg\",\"profile_image\":\"https://cdn.steemitimages.com/DQme5LrKF79yK4GJxAq37SKhiZhrofXSXLgARXZRCdaWzdd/nbkmundotech_thumb128.png\"}}",
"posting_rewards": 348,
"proxied_vsf_votes": [
0,
0,
0,
0
],
"proxy": "",
"received_vesting_shares": "7842.332051 VESTS",
"recovery_account": "steem",
"reputation": "7008751971",
"reset_account": "null",
"reward_sbd_balance": "0.045 SBD",
"reward_steem_balance": "0.000 STEEM",
"reward_vesting_balance": "253.881446 VESTS",
"reward_vesting_steem": "0.127 STEEM",
"savings_balance": "0.000 STEEM",
"savings_sbd_balance": "0.000 SBD",
"savings_sbd_last_interest_payment": "1970-01-01T00:00:00",
"savings_sbd_seconds": "0",
"savings_sbd_seconds_last_update": "1970-01-01T00:00:00",
"savings_withdraw_requests": 0,
"sbd_balance": "0.000 SBD",
"sbd_last_interest_payment": "1970-01-01T00:00:00",
"sbd_seconds": "0",
"sbd_seconds_last_update": "2018-09-22T19:58:33",
"tags_usage": [],
"to_withdraw": 0,
"transfer_history": [],
"vesting_balance": "0.000 STEEM",
"vesting_shares": "301.327755 VESTS",
"vesting_withdraw_rate": "0.000000 VESTS",
"vote_history": [],
"voting_manabar": {
"current_mana": "8143659806",
"last_update_time": 1779078084
},
"voting_power": 0,
"withdraw_routes": 0,
"withdrawn": 0,
"witness_votes": [],
"witnesses_voted_for": 0,
"rank": 242967
}Withdraw Routes
| Incoming | Outgoing |
|---|---|
Empty | Empty |
{
"incoming": [],
"outgoing": []
}From Date
To Date
steemdelegated 4.822 SP to @nbkmundotech2026/05/18 04:21:24
steemdelegated 4.822 SP to @nbkmundotech
2026/05/18 04:21:24
| delegatee | nbkmundotech |
| delegator | steem |
| vesting shares | 7842.332051 VESTS |
| Transaction Info | Block #106148348/Trx 97e5f79e26cb81c97b73cdd07cbf501aae561e40 |
View Raw JSON Data
{
"block": 106148348,
"op": [
"delegate_vesting_shares",
{
"delegatee": "nbkmundotech",
"delegator": "steem",
"vesting_shares": "7842.332051 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2026-05-18T04:21:24",
"trx_id": "97e5f79e26cb81c97b73cdd07cbf501aae561e40",
"trx_in_block": 2,
"virtual_op": 0
}steemdelegated 3.155 SP to @nbkmundotech2026/05/12 20:29:15
steemdelegated 3.155 SP to @nbkmundotech
2026/05/12 20:29:15
| delegatee | nbkmundotech |
| delegator | steem |
| vesting shares | 5130.121646 VESTS |
| Transaction Info | Block #105995644/Trx 7deafee80dcd2de0604133d20b2b169699485d6a |
View Raw JSON Data
{
"block": 105995644,
"op": [
"delegate_vesting_shares",
{
"delegatee": "nbkmundotech",
"delegator": "steem",
"vesting_shares": "5130.121646 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2026-05-12T20:29:15",
"trx_id": "7deafee80dcd2de0604133d20b2b169699485d6a",
"trx_in_block": 1,
"virtual_op": 0
}steemdelegated 4.830 SP to @nbkmundotech2026/04/26 03:35:51
steemdelegated 4.830 SP to @nbkmundotech
2026/04/26 03:35:51
| delegatee | nbkmundotech |
| delegator | steem |
| vesting shares | 7854.847807 VESTS |
| Transaction Info | Block #105515884/Trx d2ff0271e4f624313632f4af100b48d31fe5023d |
View Raw JSON Data
{
"block": 105515884,
"op": [
"delegate_vesting_shares",
{
"delegatee": "nbkmundotech",
"delegator": "steem",
"vesting_shares": "7854.847807 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2026-04-26T03:35:51",
"trx_id": "d2ff0271e4f624313632f4af100b48d31fe5023d",
"trx_in_block": 3,
"virtual_op": 0
}steemdelegated 3.180 SP to @nbkmundotech2026/01/23 18:49:24
steemdelegated 3.180 SP to @nbkmundotech
2026/01/23 18:49:24
| delegatee | nbkmundotech |
| delegator | steem |
| vesting shares | 5171.668465 VESTS |
| Transaction Info | Block #102865017/Trx ba6ce536bffb4529935d36251f746d40b5f2eeb3 |
View Raw JSON Data
{
"block": 102865017,
"op": [
"delegate_vesting_shares",
{
"delegatee": "nbkmundotech",
"delegator": "steem",
"vesting_shares": "5171.668465 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2026-01-23T18:49:24",
"trx_id": "ba6ce536bffb4529935d36251f746d40b5f2eeb3",
"trx_in_block": 0,
"virtual_op": 0
}steemdelegated 3.281 SP to @nbkmundotech2024/12/17 14:01:03
steemdelegated 3.281 SP to @nbkmundotech
2024/12/17 14:01:03
| delegatee | nbkmundotech |
| delegator | steem |
| vesting shares | 5335.887662 VESTS |
| Transaction Info | Block #91311262/Trx ee162acd9b6d56790fb99146bdf0183d5e42c745 |
View Raw JSON Data
{
"block": 91311262,
"op": [
"delegate_vesting_shares",
{
"delegatee": "nbkmundotech",
"delegator": "steem",
"vesting_shares": "5335.887662 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2024-12-17T14:01:03",
"trx_id": "ee162acd9b6d56790fb99146bdf0183d5e42c745",
"trx_in_block": 4,
"virtual_op": 0
}steemdelegated 3.385 SP to @nbkmundotech2023/11/14 05:42:39
steemdelegated 3.385 SP to @nbkmundotech
2023/11/14 05:42:39
| delegatee | nbkmundotech |
| delegator | steem |
| vesting shares | 5505.021194 VESTS |
| Transaction Info | Block #79865430/Trx cab96343b29a3bbab3294aaf5ca5d090fc4388e0 |
View Raw JSON Data
{
"block": 79865430,
"op": [
"delegate_vesting_shares",
{
"delegatee": "nbkmundotech",
"delegator": "steem",
"vesting_shares": "5505.021194 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2023-11-14T05:42:39",
"trx_id": "cab96343b29a3bbab3294aaf5ca5d090fc4388e0",
"trx_in_block": 4,
"virtual_op": 0
}steemdelegated 5.191 SP to @nbkmundotech2023/09/22 08:05:51
steemdelegated 5.191 SP to @nbkmundotech
2023/09/22 08:05:51
| delegatee | nbkmundotech |
| delegator | steem |
| vesting shares | 8441.929980 VESTS |
| Transaction Info | Block #78360123/Trx 435fdc83f205a5c0e9d6a45e87b4b98529b38ad3 |
View Raw JSON Data
{
"block": 78360123,
"op": [
"delegate_vesting_shares",
{
"delegatee": "nbkmundotech",
"delegator": "steem",
"vesting_shares": "8441.929980 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2023-09-22T08:05:51",
"trx_id": "435fdc83f205a5c0e9d6a45e87b4b98529b38ad3",
"trx_in_block": 2,
"virtual_op": 0
}steemdelegated 5.328 SP to @nbkmundotech2022/11/03 15:51:57
steemdelegated 5.328 SP to @nbkmundotech
2022/11/03 15:51:57
| delegatee | nbkmundotech |
| delegator | steem |
| vesting shares | 8663.981418 VESTS |
| Transaction Info | Block #69118232/Trx 1117a70d41a0d4dc3b4e1252ed035775093f402e |
View Raw JSON Data
{
"block": 69118232,
"op": [
"delegate_vesting_shares",
{
"delegatee": "nbkmundotech",
"delegator": "steem",
"vesting_shares": "8663.981418 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2022-11-03T15:51:57",
"trx_id": "1117a70d41a0d4dc3b4e1252ed035775093f402e",
"trx_in_block": 8,
"virtual_op": 0
}steemdelegated 5.463 SP to @nbkmundotech2022/01/17 21:14:54
steemdelegated 5.463 SP to @nbkmundotech
2022/01/17 21:14:54
| delegatee | nbkmundotech |
| delegator | steem |
| vesting shares | 8884.089019 VESTS |
| Transaction Info | Block #60821701/Trx 3dc214b0424de4833b0e7cecfca727151819d5bc |
View Raw JSON Data
{
"block": 60821701,
"op": [
"delegate_vesting_shares",
{
"delegatee": "nbkmundotech",
"delegator": "steem",
"vesting_shares": "8884.089019 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2022-01-17T21:14:54",
"trx_id": "3dc214b0424de4833b0e7cecfca727151819d5bc",
"trx_in_block": 20,
"virtual_op": 0
}steemdelegated 5.576 SP to @nbkmundotech2021/06/14 04:30:57
steemdelegated 5.576 SP to @nbkmundotech
2021/06/14 04:30:57
| delegatee | nbkmundotech |
| delegator | steem |
| vesting shares | 9068.283307 VESTS |
| Transaction Info | Block #54612137/Trx e00b679ca07de3747a3426160dc142fb928293b7 |
View Raw JSON Data
{
"block": 54612137,
"op": [
"delegate_vesting_shares",
{
"delegatee": "nbkmundotech",
"delegator": "steem",
"vesting_shares": "9068.283307 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2021-06-14T04:30:57",
"trx_id": "e00b679ca07de3747a3426160dc142fb928293b7",
"trx_in_block": 9,
"virtual_op": 0
}nbkmundotechpublished a new post: 34uele0i2021/02/11 00:16:42
nbkmundotechpublished a new post: 34uele0i
2021/02/11 00:16:42
| author | nbkmundotech |
| body | <center><a href='https://d.tube/#!/v/nbkmundotech/34uele0i'><img src='https://ipfs.io/ipfs/QmXe8V8mgnAec7K14eFn13YL3CLWkUxmwj9Yi2JvQA5tja'></a></center><hr> Confira o Curso de React Native para Iniciantes: https://www.udemy.com/aplicativos-moveis-com-o-react-native Aprenda o conceito de Selector (seletor) no Redux. Demonstração de como criar seletores para acessar o estado do aplicativo com React e Redux. Tópico relacionado ao react-redux, connect, mapStateToProps, reselect. Assista a série inteira aqui: https://www.youtube.com/watch?v=Ud2lp4Hrb10&list=PLUbb2i4BuuzDC2mvVwiqokO2ReWb6qSYI <hr><a href='https://d.tube/#!/v/nbkmundotech/34uele0i'> ▶️ DTube</a><br /><a href='https://ipfs.io/ipfs/QmPtpvCwEN9MYfDCiVZwWJQNuZgcsT7Fu8yze5FYUzsWPH'> ▶️ IPFS</a> |
| json metadata | {"video":{"app":"dtube/0.8","videoId":"QmPtpvCwEN9MYfDCiVZwWJQNuZgcsT7Fu8yze5FYUzsWPH","providerName":"IPFS","title":"O Conceito de Selector (Seletor) (Aula React & Redux)","duration":"342.75","thumbnailUrl":"https://snap1.d.tube/ipfs/QmVAHi2fHhWCXdGAyh2QX9r3XzoZTSMY3V7TiZ3JsA6Nbs","ipfs":{"snaphash":"QmVAHi2fHhWCXdGAyh2QX9r3XzoZTSMY3V7TiZ3JsA6Nbs","spritehash":"QmcYZqCGSQwDBctFpj8TWjQe7cgK991UfwtGjLLeRY1HFu","videohash":"QmPtpvCwEN9MYfDCiVZwWJQNuZgcsT7Fu8yze5FYUzsWPH","video240hash":"QmYMXX4euvbWs95NXLiucJTYRmeKnpd7hi44aciQZJRg2e","video480hash":"QmeKzDwBJyDQVEdaAznJ9T4qwhuvVCFiVxKch4TEcXDEGi"},"tags":["dtube","redux","seletor","tutorial","pt"],"desc":"Aprenda o conceito de Selector (seletor) no Redux. Demonstração de como criar seletores para acessar o estado do aplicativo com React e Redux. Tópico relacionado ao react-redux, connect, mapStateToProps, reselect.\n\nAssista a série inteira aqui: https://www.youtube.com/watch?v=Ud2lp4Hrb10&list=PLUbb2i4BuuzDC2mvVwiqokO2ReWb6qSYI","filesize":""},"tags":["dtube","redux","seletor","tutorial","pt"],"app":"dtube/0.8"} |
| parent author | |
| parent permlink | dtube |
| permlink | 34uele0i |
| title | O Conceito de Selector (Seletor) (Aula React & Redux) |
| Transaction Info | Block #51106027/Trx 44ba3dd9d471fa2a72902b9db799ba511e07e8f1 |
View Raw JSON Data
{
"block": 51106027,
"op": [
"comment",
{
"author": "nbkmundotech",
"body": "<center><a href='https://d.tube/#!/v/nbkmundotech/34uele0i'><img src='https://ipfs.io/ipfs/QmXe8V8mgnAec7K14eFn13YL3CLWkUxmwj9Yi2JvQA5tja'></a></center><hr>\n\nConfira o Curso de React Native para Iniciantes:\nhttps://www.udemy.com/aplicativos-moveis-com-o-react-native\n\nAprenda o conceito de Selector (seletor) no Redux. Demonstração de como criar seletores para acessar o estado do aplicativo com React e Redux. Tópico relacionado ao react-redux, connect, mapStateToProps, reselect.\n\nAssista a série inteira aqui: https://www.youtube.com/watch?v=Ud2lp4Hrb10&list=PLUbb2i4BuuzDC2mvVwiqokO2ReWb6qSYI\n\n<hr><a href='https://d.tube/#!/v/nbkmundotech/34uele0i'> ▶️ DTube</a><br /><a href='https://ipfs.io/ipfs/QmPtpvCwEN9MYfDCiVZwWJQNuZgcsT7Fu8yze5FYUzsWPH'> ▶️ IPFS</a>",
"json_metadata": "{\"video\":{\"app\":\"dtube/0.8\",\"videoId\":\"QmPtpvCwEN9MYfDCiVZwWJQNuZgcsT7Fu8yze5FYUzsWPH\",\"providerName\":\"IPFS\",\"title\":\"O Conceito de Selector (Seletor) (Aula React & Redux)\",\"duration\":\"342.75\",\"thumbnailUrl\":\"https://snap1.d.tube/ipfs/QmVAHi2fHhWCXdGAyh2QX9r3XzoZTSMY3V7TiZ3JsA6Nbs\",\"ipfs\":{\"snaphash\":\"QmVAHi2fHhWCXdGAyh2QX9r3XzoZTSMY3V7TiZ3JsA6Nbs\",\"spritehash\":\"QmcYZqCGSQwDBctFpj8TWjQe7cgK991UfwtGjLLeRY1HFu\",\"videohash\":\"QmPtpvCwEN9MYfDCiVZwWJQNuZgcsT7Fu8yze5FYUzsWPH\",\"video240hash\":\"QmYMXX4euvbWs95NXLiucJTYRmeKnpd7hi44aciQZJRg2e\",\"video480hash\":\"QmeKzDwBJyDQVEdaAznJ9T4qwhuvVCFiVxKch4TEcXDEGi\"},\"tags\":[\"dtube\",\"redux\",\"seletor\",\"tutorial\",\"pt\"],\"desc\":\"Aprenda o conceito de Selector (seletor) no Redux. Demonstração de como criar seletores para acessar o estado do aplicativo com React e Redux. Tópico relacionado ao react-redux, connect, mapStateToProps, reselect.\\n\\nAssista a série inteira aqui: https://www.youtube.com/watch?v=Ud2lp4Hrb10&list=PLUbb2i4BuuzDC2mvVwiqokO2ReWb6qSYI\",\"filesize\":\"\"},\"tags\":[\"dtube\",\"redux\",\"seletor\",\"tutorial\",\"pt\"],\"app\":\"dtube/0.8\"}",
"parent_author": "",
"parent_permlink": "dtube",
"permlink": "34uele0i",
"title": "O Conceito de Selector (Seletor) (Aula React & Redux)"
}
],
"op_in_trx": 0,
"timestamp": "2021-02-11T00:16:42",
"trx_id": "44ba3dd9d471fa2a72902b9db799ba511e07e8f1",
"trx_in_block": 4,
"virtual_op": 0
}nbkmundotechpublished a new post: ung9ri842021/02/11 00:16:15
nbkmundotechpublished a new post: ung9ri84
2021/02/11 00:16:15
| author | nbkmundotech |
| body | <center><a href='https://d.tube/#!/v/nbkmundotech/ung9ri84'><img src='https://ipfs.io/ipfs/QmZXPfA1fxsZN57zTS6yprM1Et1oKLGhSXmDzXCLfVwyGR'></a></center><hr> Nesta série de vídeos nós aprendemos a usar o Redux para lidar com os dados do nosso aplicativo. Código completo no GitHub: https://github.com/nbkhope/lista-de-posts-redux Também leciono na Udemy: https://www.udemy.com/user/renan-martins-5/ Vamos nos conectar! Siga-me no: Twitter - https://twitter.com/nbkhope Github - https://github.com/nbkhope <hr><a href='https://d.tube/#!/v/nbkmundotech/ung9ri84'> ▶️ DTube</a><br /><a href='https://ipfs.io/ipfs/QmUC5ZJQ7dokLDocAKgyyKucQFnzDJAVodYtegRGgk98KJ'> ▶️ IPFS</a> |
| json metadata | {"video":{"app":"dtube/0.8","videoId":"QmUC5ZJQ7dokLDocAKgyyKucQFnzDJAVodYtegRGgk98KJ","providerName":"IPFS","title":"Introdução ao Redux (Parte 3)","duration":"657.55","thumbnailUrl":"https://snap1.d.tube/ipfs/Qmdr9X3CvfsuADojYghFPeq5MfT97Kogb35tezBYDdS4BW","ipfs":{"snaphash":"Qmdr9X3CvfsuADojYghFPeq5MfT97Kogb35tezBYDdS4BW","spritehash":"QmWvNMVjQH8PUqN9cSc3gia9gWE8NGojJvJYUiozf9aEaP","videohash":"QmUC5ZJQ7dokLDocAKgyyKucQFnzDJAVodYtegRGgk98KJ","video240hash":"QmdCb4LihAMSjp7FshUwDvoPkAkcYx6QBVwG81WpR9oBeY","video480hash":"QmesVpCsPKWYCTVbM64vV6Cn8e6tPzth5ugNdjJhtp3s7A"},"tags":["javascript","react","reactnative","redux","dtube"],"desc":"Nesta série de vídeos nós aprendemos a usar o Redux para lidar com os dados do nosso aplicativo.","filesize":""},"tags":["javascript","react","reactnative","redux","dtube"],"app":"dtube/0.8"} |
| parent author | |
| parent permlink | javascript |
| permlink | ung9ri84 |
| title | Introdução ao Redux (Parte 3) |
| Transaction Info | Block #51106018/Trx f13b59bf506de12a9bf61918fa33f621b28d9086 |
View Raw JSON Data
{
"block": 51106018,
"op": [
"comment",
{
"author": "nbkmundotech",
"body": "<center><a href='https://d.tube/#!/v/nbkmundotech/ung9ri84'><img src='https://ipfs.io/ipfs/QmZXPfA1fxsZN57zTS6yprM1Et1oKLGhSXmDzXCLfVwyGR'></a></center><hr>\n\nNesta série de vídeos nós aprendemos a usar o Redux para lidar com os dados do nosso aplicativo.\n\nCódigo completo no GitHub: https://github.com/nbkhope/lista-de-posts-redux\n\nTambém leciono na Udemy:\nhttps://www.udemy.com/user/renan-martins-5/\n\nVamos nos conectar! Siga-me no:\nTwitter - https://twitter.com/nbkhope\nGithub - https://github.com/nbkhope\n\n<hr><a href='https://d.tube/#!/v/nbkmundotech/ung9ri84'> ▶️ DTube</a><br /><a href='https://ipfs.io/ipfs/QmUC5ZJQ7dokLDocAKgyyKucQFnzDJAVodYtegRGgk98KJ'> ▶️ IPFS</a>",
"json_metadata": "{\"video\":{\"app\":\"dtube/0.8\",\"videoId\":\"QmUC5ZJQ7dokLDocAKgyyKucQFnzDJAVodYtegRGgk98KJ\",\"providerName\":\"IPFS\",\"title\":\"Introdução ao Redux (Parte 3)\",\"duration\":\"657.55\",\"thumbnailUrl\":\"https://snap1.d.tube/ipfs/Qmdr9X3CvfsuADojYghFPeq5MfT97Kogb35tezBYDdS4BW\",\"ipfs\":{\"snaphash\":\"Qmdr9X3CvfsuADojYghFPeq5MfT97Kogb35tezBYDdS4BW\",\"spritehash\":\"QmWvNMVjQH8PUqN9cSc3gia9gWE8NGojJvJYUiozf9aEaP\",\"videohash\":\"QmUC5ZJQ7dokLDocAKgyyKucQFnzDJAVodYtegRGgk98KJ\",\"video240hash\":\"QmdCb4LihAMSjp7FshUwDvoPkAkcYx6QBVwG81WpR9oBeY\",\"video480hash\":\"QmesVpCsPKWYCTVbM64vV6Cn8e6tPzth5ugNdjJhtp3s7A\"},\"tags\":[\"javascript\",\"react\",\"reactnative\",\"redux\",\"dtube\"],\"desc\":\"Nesta série de vídeos nós aprendemos a usar o Redux para lidar com os dados do nosso aplicativo.\",\"filesize\":\"\"},\"tags\":[\"javascript\",\"react\",\"reactnative\",\"redux\",\"dtube\"],\"app\":\"dtube/0.8\"}",
"parent_author": "",
"parent_permlink": "javascript",
"permlink": "ung9ri84",
"title": "Introdução ao Redux (Parte 3)"
}
],
"op_in_trx": 0,
"timestamp": "2021-02-11T00:16:15",
"trx_id": "f13b59bf506de12a9bf61918fa33f621b28d9086",
"trx_in_block": 1,
"virtual_op": 0
}nbkmundotechpublished a new post: 57l8wrif2021/02/11 00:15:21
nbkmundotechpublished a new post: 57l8wrif
2021/02/11 00:15:21
| author | nbkmundotech |
| body | <center><a href='https://d.tube/#!/v/nbkmundotech/57l8wrif'><img src='https://ipfs.io/ipfs/QmVt7Ne45qzRgTgRku8YERY7iSryWX2XeqVm83h5NjchAy'></a></center><hr> Nesta série de vídeos nós aprendemos a usar o Redux para lidar com os dados do nosso aplicativo. Código completo no GitHub: https://github.com/nbkhope/lista-de-posts-redux Também leciono na Udemy: https://www.udemy.com/user/renan-martins-5/ Vamos nos conectar! Siga-me no: Twitter - https://twitter.com/nbkhope Github - https://github.com/nbkhope <hr><a href='https://d.tube/#!/v/nbkmundotech/57l8wrif'> ▶️ DTube</a><br /><a href='https://ipfs.io/ipfs/QmWxTUjPdwvLnrtWyAawv5qZSVc3oALbUFrP84UWXHyQYd'> ▶️ IPFS</a> |
| json metadata | {"video":{"app":"dtube/0.8","videoId":"QmWxTUjPdwvLnrtWyAawv5qZSVc3oALbUFrP84UWXHyQYd","providerName":"IPFS","title":"Introdução ao Redux (Parte 2)","duration":"384.65","thumbnailUrl":"https://snap1.d.tube/ipfs/QmShnMMTDDuVYTRwRW5bdw4MvPQCe617nKCmki3iJJwf2U","ipfs":{"snaphash":"QmShnMMTDDuVYTRwRW5bdw4MvPQCe617nKCmki3iJJwf2U","spritehash":"QmahfqZLk5ZY4sbQxVutSTdZHwfb7H36QVt6HrdjhkRvJG","videohash":"QmWxTUjPdwvLnrtWyAawv5qZSVc3oALbUFrP84UWXHyQYd","video240hash":"Qmd3u2W9EgAP9BuKsakKgMgiT11swEsDG3epnC4Msk7YM5","video480hash":"QmcVf7WPZ5zUtw4chL5cUPmpme514PcUC5ZTN8UU4rAvZP"},"tags":["javascript","react","reactnative","redux","dtube"],"desc":"Nesta série de vídeos nós aprendemos a usar o Redux para lidar com os dados do nosso aplicativo.","filesize":""},"tags":["javascript","react","reactnative","redux","dtube"],"app":"dtube/0.8"} |
| parent author | |
| parent permlink | javascript |
| permlink | 57l8wrif |
| title | Introdução ao Redux (Parte 2) |
| Transaction Info | Block #51106000/Trx bc2d57bb2f332d241d953c494517872cf22c88ba |
View Raw JSON Data
{
"block": 51106000,
"op": [
"comment",
{
"author": "nbkmundotech",
"body": "<center><a href='https://d.tube/#!/v/nbkmundotech/57l8wrif'><img src='https://ipfs.io/ipfs/QmVt7Ne45qzRgTgRku8YERY7iSryWX2XeqVm83h5NjchAy'></a></center><hr>\n\nNesta série de vídeos nós aprendemos a usar o Redux para lidar com os dados do nosso aplicativo.\n\nCódigo completo no GitHub: https://github.com/nbkhope/lista-de-posts-redux\n\nTambém leciono na Udemy:\nhttps://www.udemy.com/user/renan-martins-5/\n\nVamos nos conectar! Siga-me no:\nTwitter - https://twitter.com/nbkhope\nGithub - https://github.com/nbkhope\n\n<hr><a href='https://d.tube/#!/v/nbkmundotech/57l8wrif'> ▶️ DTube</a><br /><a href='https://ipfs.io/ipfs/QmWxTUjPdwvLnrtWyAawv5qZSVc3oALbUFrP84UWXHyQYd'> ▶️ IPFS</a>",
"json_metadata": "{\"video\":{\"app\":\"dtube/0.8\",\"videoId\":\"QmWxTUjPdwvLnrtWyAawv5qZSVc3oALbUFrP84UWXHyQYd\",\"providerName\":\"IPFS\",\"title\":\"Introdução ao Redux (Parte 2)\",\"duration\":\"384.65\",\"thumbnailUrl\":\"https://snap1.d.tube/ipfs/QmShnMMTDDuVYTRwRW5bdw4MvPQCe617nKCmki3iJJwf2U\",\"ipfs\":{\"snaphash\":\"QmShnMMTDDuVYTRwRW5bdw4MvPQCe617nKCmki3iJJwf2U\",\"spritehash\":\"QmahfqZLk5ZY4sbQxVutSTdZHwfb7H36QVt6HrdjhkRvJG\",\"videohash\":\"QmWxTUjPdwvLnrtWyAawv5qZSVc3oALbUFrP84UWXHyQYd\",\"video240hash\":\"Qmd3u2W9EgAP9BuKsakKgMgiT11swEsDG3epnC4Msk7YM5\",\"video480hash\":\"QmcVf7WPZ5zUtw4chL5cUPmpme514PcUC5ZTN8UU4rAvZP\"},\"tags\":[\"javascript\",\"react\",\"reactnative\",\"redux\",\"dtube\"],\"desc\":\"Nesta série de vídeos nós aprendemos a usar o Redux para lidar com os dados do nosso aplicativo.\",\"filesize\":\"\"},\"tags\":[\"javascript\",\"react\",\"reactnative\",\"redux\",\"dtube\"],\"app\":\"dtube/0.8\"}",
"parent_author": "",
"parent_permlink": "javascript",
"permlink": "57l8wrif",
"title": "Introdução ao Redux (Parte 2)"
}
],
"op_in_trx": 0,
"timestamp": "2021-02-11T00:15:21",
"trx_id": "bc2d57bb2f332d241d953c494517872cf22c88ba",
"trx_in_block": 6,
"virtual_op": 0
}executive-boardsent 0.001 STEEM to @nbkmundotech- "❗ Hello nbkmundotech, great that you are using the STEEM blockchain. The Executive Board hereby invites you to https://discord.gg/KyBbmhh where you will get some insider infos on how you will earn the..."2021/02/11 00:10:12
executive-boardsent 0.001 STEEM to @nbkmundotech- "❗ Hello nbkmundotech, great that you are using the STEEM blockchain. The Executive Board hereby invites you to https://discord.gg/KyBbmhh where you will get some insider infos on how you will earn the..."
2021/02/11 00:10:12
| amount | 0.001 STEEM |
| from | executive-board |
| memo | ❗ Hello nbkmundotech, great that you are using the STEEM blockchain. The Executive Board hereby invites you to https://discord.gg/KyBbmhh where you will get some insider infos on how you will earn the most coins. It's easy, just follow the instructions. Warm regards, The Executive Board. |
| to | nbkmundotech |
| Transaction Info | Block #51105898/Trx 70f7e7ca8acb6aa1ea52ef1962b24103434c8c0e |
View Raw JSON Data
{
"block": 51105898,
"op": [
"transfer",
{
"amount": "0.001 STEEM",
"from": "executive-board",
"memo": "❗ Hello nbkmundotech, great that you are using the STEEM blockchain. The Executive Board hereby invites you to https://discord.gg/KyBbmhh where you will get some insider infos on how you will earn the most coins. It's easy, just follow the instructions. Warm regards, The Executive Board.",
"to": "nbkmundotech"
}
],
"op_in_trx": 0,
"timestamp": "2021-02-11T00:10:12",
"trx_id": "70f7e7ca8acb6aa1ea52ef1962b24103434c8c0e",
"trx_in_block": 11,
"virtual_op": 0
}nbkmundotechpublished a new post: m2b4gqno2021/02/11 00:09:15
nbkmundotechpublished a new post: m2b4gqno
2021/02/11 00:09:15
| author | nbkmundotech |
| body | <center><a href='https://d.tube/#!/v/nbkmundotech/m2b4gqno'><img src='https://ipfs.io/ipfs/QmUfynQvX8qmJV6fK1ntMrTHbd3pUE3K633HTK8SwMpihq'></a></center><hr> <hr><a href='https://d.tube/#!/v/nbkmundotech/m2b4gqno'> ▶️ DTube</a><br /><a href='https://ipfs.io/ipfs/QmSXq2n2bASHpyktqXuTvN4iD6jwRsYhwJfvTwTQ8GqNd3'> ▶️ IPFS</a> |
| json metadata | {"video":{"app":"dtube/0.8","videoId":"QmSXq2n2bASHpyktqXuTvN4iD6jwRsYhwJfvTwTQ8GqNd3","providerName":"IPFS","title":"Introdução ao Redux (Parte 1)","duration":"159.634333","thumbnailUrl":"https://snap1.d.tube/ipfs/QmaByAfDMbrwvsmhhYneobmM5QLfbo96i1McJD34F8KTEc","ipfs":{"snaphash":"QmaByAfDMbrwvsmhhYneobmM5QLfbo96i1McJD34F8KTEc","spritehash":"QmZtmPJsyRNeJSgLVas95pBa8y81cmYDmhNSKMJS2dd6GX","videohash":"QmSXq2n2bASHpyktqXuTvN4iD6jwRsYhwJfvTwTQ8GqNd3","video240hash":"QmcFWKAVHKUuortk1zLm57c4mWSY8CM3KUhTunXi8XkmrH","video480hash":"QmcjgN3vkNwpBLpk5iF63PWPcPdh946SgySHzz9RdiJ3Wj"},"tags":["javascript","react","reactnative","redux","dtube"],"desc":"Nesta série de vídeos nós aprendemos a usar o Redux para lidar com os dados do nosso aplicativo.","filesize":""},"tags":["javascript","react","reactnative","redux","dtube"],"app":"dtube/0.8"} |
| parent author | |
| parent permlink | javascript |
| permlink | m2b4gqno |
| title | Introdução ao Redux (Parte 1) |
| Transaction Info | Block #51105879/Trx aece821da1b388278395ffda65ca8d52e523ba68 |
View Raw JSON Data
{
"block": 51105879,
"op": [
"comment",
{
"author": "nbkmundotech",
"body": "<center><a href='https://d.tube/#!/v/nbkmundotech/m2b4gqno'><img src='https://ipfs.io/ipfs/QmUfynQvX8qmJV6fK1ntMrTHbd3pUE3K633HTK8SwMpihq'></a></center><hr>\n\n\n\n<hr><a href='https://d.tube/#!/v/nbkmundotech/m2b4gqno'> ▶️ DTube</a><br /><a href='https://ipfs.io/ipfs/QmSXq2n2bASHpyktqXuTvN4iD6jwRsYhwJfvTwTQ8GqNd3'> ▶️ IPFS</a>",
"json_metadata": "{\"video\":{\"app\":\"dtube/0.8\",\"videoId\":\"QmSXq2n2bASHpyktqXuTvN4iD6jwRsYhwJfvTwTQ8GqNd3\",\"providerName\":\"IPFS\",\"title\":\"Introdução ao Redux (Parte 1)\",\"duration\":\"159.634333\",\"thumbnailUrl\":\"https://snap1.d.tube/ipfs/QmaByAfDMbrwvsmhhYneobmM5QLfbo96i1McJD34F8KTEc\",\"ipfs\":{\"snaphash\":\"QmaByAfDMbrwvsmhhYneobmM5QLfbo96i1McJD34F8KTEc\",\"spritehash\":\"QmZtmPJsyRNeJSgLVas95pBa8y81cmYDmhNSKMJS2dd6GX\",\"videohash\":\"QmSXq2n2bASHpyktqXuTvN4iD6jwRsYhwJfvTwTQ8GqNd3\",\"video240hash\":\"QmcFWKAVHKUuortk1zLm57c4mWSY8CM3KUhTunXi8XkmrH\",\"video480hash\":\"QmcjgN3vkNwpBLpk5iF63PWPcPdh946SgySHzz9RdiJ3Wj\"},\"tags\":[\"javascript\",\"react\",\"reactnative\",\"redux\",\"dtube\"],\"desc\":\"Nesta série de vídeos nós aprendemos a usar o Redux para lidar com os dados do nosso aplicativo.\",\"filesize\":\"\"},\"tags\":[\"javascript\",\"react\",\"reactnative\",\"redux\",\"dtube\"],\"app\":\"dtube/0.8\"}",
"parent_author": "",
"parent_permlink": "javascript",
"permlink": "m2b4gqno",
"title": "Introdução ao Redux (Parte 1)"
}
],
"op_in_trx": 0,
"timestamp": "2021-02-11T00:09:15",
"trx_id": "aece821da1b388278395ffda65ca8d52e523ba68",
"trx_in_block": 9,
"virtual_op": 0
}steemdelegated 5.692 SP to @nbkmundotech2020/12/11 14:45:00
steemdelegated 5.692 SP to @nbkmundotech
2020/12/11 14:45:00
| delegatee | nbkmundotech |
| delegator | steem |
| vesting shares | 9255.705281 VESTS |
| Transaction Info | Block #49359451/Trx de80bd634c2554f441884faa9c3c16defcd712fc |
View Raw JSON Data
{
"block": 49359451,
"op": [
"delegate_vesting_shares",
{
"delegatee": "nbkmundotech",
"delegator": "steem",
"vesting_shares": "9255.705281 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2020-12-11T14:45:00",
"trx_id": "de80bd634c2554f441884faa9c3c16defcd712fc",
"trx_in_block": 0,
"virtual_op": 0
}steemdelegated 1.176 SP to @nbkmundotech2020/12/06 08:21:15
steemdelegated 1.176 SP to @nbkmundotech
2020/12/06 08:21:15
| delegatee | nbkmundotech |
| delegator | steem |
| vesting shares | 1912.543513 VESTS |
| Transaction Info | Block #49210991/Trx ef009144bfbef3c48cc9751269895b684a672a0a |
View Raw JSON Data
{
"block": 49210991,
"op": [
"delegate_vesting_shares",
{
"delegatee": "nbkmundotech",
"delegator": "steem",
"vesting_shares": "1912.543513 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2020-12-06T08:21:15",
"trx_id": "ef009144bfbef3c48cc9751269895b684a672a0a",
"trx_in_block": 34,
"virtual_op": 0
}steemdelegated 5.695 SP to @nbkmundotech2020/12/05 18:22:39
steemdelegated 5.695 SP to @nbkmundotech
2020/12/05 18:22:39
| delegatee | nbkmundotech |
| delegator | steem |
| vesting shares | 9261.913135 VESTS |
| Transaction Info | Block #49194536/Trx 328d0d36737c429dfe1eec6a78b49583a82eff28 |
View Raw JSON Data
{
"block": 49194536,
"op": [
"delegate_vesting_shares",
{
"delegatee": "nbkmundotech",
"delegator": "steem",
"vesting_shares": "9261.913135 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2020-12-05T18:22:39",
"trx_id": "328d0d36737c429dfe1eec6a78b49583a82eff28",
"trx_in_block": 1,
"virtual_op": 0
}steemdelegated 1.181 SP to @nbkmundotech2020/11/02 23:08:45
steemdelegated 1.181 SP to @nbkmundotech
2020/11/02 23:08:45
| delegatee | nbkmundotech |
| delegator | steem |
| vesting shares | 1920.017158 VESTS |
| Transaction Info | Block #48266645/Trx 3b4857bd1c2e1fb8edb8a48f67db0be035f253b4 |
View Raw JSON Data
{
"block": 48266645,
"op": [
"delegate_vesting_shares",
{
"delegatee": "nbkmundotech",
"delegator": "steem",
"vesting_shares": "1920.017158 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2020-11-02T23:08:45",
"trx_id": "3b4857bd1c2e1fb8edb8a48f67db0be035f253b4",
"trx_in_block": 0,
"virtual_op": 0
}beemenginesent 0.001 STEEM to @nbkmundotech- "💎 Smartest Promotion Community, boosting your posts with community extra votes, automated 24/24, passive earnings and more. Checkout http://beemengine.live 🤙 or try it one month FOR ONLY 1 HIVE/STEE..."2020/05/12 07:30:39
beemenginesent 0.001 STEEM to @nbkmundotech- "💎 Smartest Promotion Community, boosting your posts with community extra votes, automated 24/24, passive earnings and more. Checkout http://beemengine.live 🤙 or try it one month FOR ONLY 1 HIVE/STEE..."
2020/05/12 07:30:39
| amount | 0.001 STEEM |
| from | beemengine |
| memo | 💎 Smartest Promotion Community, boosting your posts with community extra votes, automated 24/24, passive earnings and more. Checkout http://beemengine.live 🤙 or try it one month FOR ONLY 1 HIVE/STEEM 🤯 to @beemengine with memo: subscribe |
| to | nbkmundotech |
| Transaction Info | Block #43303535/Trx e6ca6acaf33f86dc3c778b786e68acc5ace0cdd1 |
View Raw JSON Data
{
"block": 43303535,
"op": [
"transfer",
{
"amount": "0.001 STEEM",
"from": "beemengine",
"memo": "💎 Smartest Promotion Community, boosting your posts with community extra votes, automated 24/24, passive earnings and more. Checkout http://beemengine.live 🤙 or try it one month FOR ONLY 1 HIVE/STEEM 🤯 to @beemengine with memo: subscribe",
"to": "nbkmundotech"
}
],
"op_in_trx": 0,
"timestamp": "2020-05-12T07:30:39",
"trx_id": "e6ca6acaf33f86dc3c778b786e68acc5ace0cdd1",
"trx_in_block": 0,
"virtual_op": 0
}nbkmundotechpublished a new post: ozckrikx2020/05/12 07:29:45
nbkmundotechpublished a new post: ozckrikx
2020/05/12 07:29:45
| author | nbkmundotech |
| body | <center><a href='https://d.tube/#!/v/nbkmundotech/ozckrikx'><img src='https://ipfs.io/ipfs/QmUoZmg3UpbvWUjcNVj1T699uh1eu4jsUHn1UbG7tQ6KT6'></a></center><hr> Nesta série de vídeos nós aprendemos a usar o Redux para lidar com os dados do nosso aplicativo. Código completo no GitHub: https://github.com/nbkhope/lista-de-posts-redux Também leciono na Udemy: https://www.udemy.com/user/renan-martins-5/ Vamos nos conectar! Siga-me no: Twitter - https://twitter.com/nbkhope Github - https://github.com/nbkhope <hr><a href='https://d.tube/#!/v/nbkmundotech/ozckrikx'> ▶️ DTube</a><br /><a href='https://ipfs.io/ipfs/Qmb4P5QrA3Ve5joWa3qSNsFs8RU2dEDUHEmA1QZftiLBUa'> ▶️ IPFS</a> |
| json metadata | {"video":{"app":"dtube/0.8","videoId":"Qmb4P5QrA3Ve5joWa3qSNsFs8RU2dEDUHEmA1QZftiLBUa","providerName":"IPFS","title":"Introdução ao Redux (Parte 18)","duration":"1038.15","thumbnailUrl":"https://snap1.d.tube/ipfs/QmUCJC7xPGG6amKjRYHzYwMNZMaPTye5zrdmxfLkXSM6jf","ipfs":{"snaphash":"QmUCJC7xPGG6amKjRYHzYwMNZMaPTye5zrdmxfLkXSM6jf","spritehash":"QmPwXMuGQTgesVQHHErJHkuwwYmMhB71W3y7qED7GcMjnh","videohash":"Qmb4P5QrA3Ve5joWa3qSNsFs8RU2dEDUHEmA1QZftiLBUa","video240hash":"QmQ9HZVYTTfydaCGFmEAH3YQ9MDo39KDAmfKhdfR6GJASb","video480hash":"Qmd3acGrYouk5BFC51X9biCKa6mTdUZCApT3pRw8m4LnPS"},"tags":["javascript","react","reactnative","redux","dtube"],"desc":"Nesta série de vídeos nós aprendemos a usar o Redux para lidar com os dados do nosso aplicativo.","filesize":""},"tags":["javascript","react","reactnative","redux","dtube"],"app":"dtube/0.8"} |
| parent author | |
| parent permlink | javascript |
| permlink | ozckrikx |
| title | Introdução ao Redux (Parte 18) |
| Transaction Info | Block #43303517/Trx 9abdc581ae705bc1738de863f845b456e8880da5 |
View Raw JSON Data
{
"block": 43303517,
"op": [
"comment",
{
"author": "nbkmundotech",
"body": "<center><a href='https://d.tube/#!/v/nbkmundotech/ozckrikx'><img src='https://ipfs.io/ipfs/QmUoZmg3UpbvWUjcNVj1T699uh1eu4jsUHn1UbG7tQ6KT6'></a></center><hr>\n\nNesta série de vídeos nós aprendemos a usar o Redux para lidar com os dados do nosso aplicativo.\n\nCódigo completo no GitHub: https://github.com/nbkhope/lista-de-posts-redux\n\nTambém leciono na Udemy:\nhttps://www.udemy.com/user/renan-martins-5/\n\nVamos nos conectar! Siga-me no:\nTwitter - https://twitter.com/nbkhope\nGithub - https://github.com/nbkhope\n\n<hr><a href='https://d.tube/#!/v/nbkmundotech/ozckrikx'> ▶️ DTube</a><br /><a href='https://ipfs.io/ipfs/Qmb4P5QrA3Ve5joWa3qSNsFs8RU2dEDUHEmA1QZftiLBUa'> ▶️ IPFS</a>",
"json_metadata": "{\"video\":{\"app\":\"dtube/0.8\",\"videoId\":\"Qmb4P5QrA3Ve5joWa3qSNsFs8RU2dEDUHEmA1QZftiLBUa\",\"providerName\":\"IPFS\",\"title\":\"Introdução ao Redux (Parte 18)\",\"duration\":\"1038.15\",\"thumbnailUrl\":\"https://snap1.d.tube/ipfs/QmUCJC7xPGG6amKjRYHzYwMNZMaPTye5zrdmxfLkXSM6jf\",\"ipfs\":{\"snaphash\":\"QmUCJC7xPGG6amKjRYHzYwMNZMaPTye5zrdmxfLkXSM6jf\",\"spritehash\":\"QmPwXMuGQTgesVQHHErJHkuwwYmMhB71W3y7qED7GcMjnh\",\"videohash\":\"Qmb4P5QrA3Ve5joWa3qSNsFs8RU2dEDUHEmA1QZftiLBUa\",\"video240hash\":\"QmQ9HZVYTTfydaCGFmEAH3YQ9MDo39KDAmfKhdfR6GJASb\",\"video480hash\":\"Qmd3acGrYouk5BFC51X9biCKa6mTdUZCApT3pRw8m4LnPS\"},\"tags\":[\"javascript\",\"react\",\"reactnative\",\"redux\",\"dtube\"],\"desc\":\"Nesta série de vídeos nós aprendemos a usar o Redux para lidar com os dados do nosso aplicativo.\",\"filesize\":\"\"},\"tags\":[\"javascript\",\"react\",\"reactnative\",\"redux\",\"dtube\"],\"app\":\"dtube/0.8\"}",
"parent_author": "",
"parent_permlink": "javascript",
"permlink": "ozckrikx",
"title": "Introdução ao Redux (Parte 18)"
}
],
"op_in_trx": 0,
"timestamp": "2020-05-12T07:29:45",
"trx_id": "9abdc581ae705bc1738de863f845b456e8880da5",
"trx_in_block": 3,
"virtual_op": 0
}nbkmundotechcustom json: community2020/05/12 07:27:06
nbkmundotechcustom json: community
2020/05/12 07:27:06
| id | community |
| json | ["subscribe",{"community":"hive-196037"}] |
| required auths | [] |
| required posting auths | ["nbkmundotech"] |
| Transaction Info | Block #43303467/Trx f535184aa748350471cd4ed53aa808d8b1fbfcf2 |
View Raw JSON Data
{
"block": 43303467,
"op": [
"custom_json",
{
"id": "community",
"json": "[\"subscribe\",{\"community\":\"hive-196037\"}]",
"required_auths": [],
"required_posting_auths": [
"nbkmundotech"
]
}
],
"op_in_trx": 0,
"timestamp": "2020-05-12T07:27:06",
"trx_id": "f535184aa748350471cd4ed53aa808d8b1fbfcf2",
"trx_in_block": 13,
"virtual_op": 0
}steemdelegated 5.820 SP to @nbkmundotech2020/05/09 09:22:18
steemdelegated 5.820 SP to @nbkmundotech
2020/05/09 09:22:18
| delegatee | nbkmundotech |
| delegator | steem |
| vesting shares | 9464.718494 VESTS |
| Transaction Info | Block #43221290/Trx 4e2bde7a2b6b1f7d97006be1a59ffded3219ed31 |
View Raw JSON Data
{
"block": 43221290,
"op": [
"delegate_vesting_shares",
{
"delegatee": "nbkmundotech",
"delegator": "steem",
"vesting_shares": "9464.718494 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2020-05-09T09:22:18",
"trx_id": "4e2bde7a2b6b1f7d97006be1a59ffded3219ed31",
"trx_in_block": 15,
"virtual_op": 0
}steemdelegated 1.201 SP to @nbkmundotech2020/05/08 13:31:15
steemdelegated 1.201 SP to @nbkmundotech
2020/05/08 13:31:15
| delegatee | nbkmundotech |
| delegator | steem |
| vesting shares | 1953.311140 VESTS |
| Transaction Info | Block #43198029/Trx 14389ca1d7a8407e1ef0d16cf45adebb0e0fcfd4 |
View Raw JSON Data
{
"block": 43198029,
"op": [
"delegate_vesting_shares",
{
"delegatee": "nbkmundotech",
"delegator": "steem",
"vesting_shares": "1953.311140 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2020-05-08T13:31:15",
"trx_id": "14389ca1d7a8407e1ef0d16cf45adebb0e0fcfd4",
"trx_in_block": 9,
"virtual_op": 0
}nbkmundotechpublished a new post: 9rzvn5ie2019/12/23 18:19:03
nbkmundotechpublished a new post: 9rzvn5ie
2019/12/23 18:19:03
| author | nbkmundotech |
| body | <center><a href='https://d.tube/#!/v/nbkmundotech/9rzvn5ie'><img src='https://ipfs.io/ipfs/QmbuUDV56C3iRf4Xfg6aZPdFquLYUvYK1gZZUoZNZP7mcu'></a></center><hr> Nesta série de vídeos nós aprendemos a usar o Redux para lidar com os dados do nosso aplicativo. |
| json metadata | {"tags":["react","reactnative","redux","dtube"],"video":{"content":{"tags":["javascript","react","reactnative","redux"],"video480hash":"QmZuQBkKF9iJmdBxM35BxCAptMQpsQadz6zyCZ6PSScsTH","videohash":"QmeECdXKFJRL66Cmhn2kitncrVj2og2qi2TEgWetpJpRjE","description":"Nesta série de vídeos nós aprendemos a usar o Redux para lidar com os dados do nosso aplicativo.\n\nCódigo completo no GitHub: https://github.com/nbkhope/lista-de-posts-redux\n\nTambém leciono na Udemy:\nhttps://www.udemy.com/user/renan-martins-5/\n\nVamos nos conectar! Siga-me no:\nTwitter - https://twitter.com/nbkhope\nGithub - https://github.com/nbkhope","video240hash":"QmP6RcLYc8dX6GXrk1a88pAGu4WfBv4ACToTCaXVzRjwcv"},"info":{"filesize":217311488,"duration":514.316667,"spritehash":"QmYJ8CfUBJphqimPJtGe3WD9nYJowaXZhbKHaqbp5h1SSR","author":"nbkmundotech","title":"Introdução ao Redux (Parte 12)","permlink":"9rzvn5ie","snaphash":"QmYRo2DwWCwAnsjKD3hVJTxPSKs8CG2erCF2CceywFBZFb"}},"app":"steemit/0.1","image":["https://ipfs.io/ipfs/QmbuUDV56C3iRf4Xfg6aZPdFquLYUvYK1gZZUoZNZP7mcu"],"links":["https://d.tube/#!/v/nbkmundotech/9rzvn5ie"],"format":"markdown"} |
| parent author | |
| parent permlink | javascript |
| permlink | 9rzvn5ie |
| title | Introdução ao Redux (Parte 12) |
| Transaction Info | Block #39295532/Trx e38c8732e55a9019da357b3e3bec1c4e631d189d |
View Raw JSON Data
{
"block": 39295532,
"op": [
"comment",
{
"author": "nbkmundotech",
"body": "<center><a href='https://d.tube/#!/v/nbkmundotech/9rzvn5ie'><img src='https://ipfs.io/ipfs/QmbuUDV56C3iRf4Xfg6aZPdFquLYUvYK1gZZUoZNZP7mcu'></a></center><hr>\n\nNesta série de vídeos nós aprendemos a usar o Redux para lidar com os dados do nosso aplicativo.",
"json_metadata": "{\"tags\":[\"react\",\"reactnative\",\"redux\",\"dtube\"],\"video\":{\"content\":{\"tags\":[\"javascript\",\"react\",\"reactnative\",\"redux\"],\"video480hash\":\"QmZuQBkKF9iJmdBxM35BxCAptMQpsQadz6zyCZ6PSScsTH\",\"videohash\":\"QmeECdXKFJRL66Cmhn2kitncrVj2og2qi2TEgWetpJpRjE\",\"description\":\"Nesta série de vídeos nós aprendemos a usar o Redux para lidar com os dados do nosso aplicativo.\\n\\nCódigo completo no GitHub: https://github.com/nbkhope/lista-de-posts-redux\\n\\nTambém leciono na Udemy:\\nhttps://www.udemy.com/user/renan-martins-5/\\n\\nVamos nos conectar! Siga-me no:\\nTwitter - https://twitter.com/nbkhope\\nGithub - https://github.com/nbkhope\",\"video240hash\":\"QmP6RcLYc8dX6GXrk1a88pAGu4WfBv4ACToTCaXVzRjwcv\"},\"info\":{\"filesize\":217311488,\"duration\":514.316667,\"spritehash\":\"QmYJ8CfUBJphqimPJtGe3WD9nYJowaXZhbKHaqbp5h1SSR\",\"author\":\"nbkmundotech\",\"title\":\"Introdução ao Redux (Parte 12)\",\"permlink\":\"9rzvn5ie\",\"snaphash\":\"QmYRo2DwWCwAnsjKD3hVJTxPSKs8CG2erCF2CceywFBZFb\"}},\"app\":\"steemit/0.1\",\"image\":[\"https://ipfs.io/ipfs/QmbuUDV56C3iRf4Xfg6aZPdFquLYUvYK1gZZUoZNZP7mcu\"],\"links\":[\"https://d.tube/#!/v/nbkmundotech/9rzvn5ie\"],\"format\":\"markdown\"}",
"parent_author": "",
"parent_permlink": "javascript",
"permlink": "9rzvn5ie",
"title": "Introdução ao Redux (Parte 12)"
}
],
"op_in_trx": 0,
"timestamp": "2019-12-23T18:19:03",
"trx_id": "e38c8732e55a9019da357b3e3bec1c4e631d189d",
"trx_in_block": 2,
"virtual_op": 0
}steemdelegated 5.905 SP to @nbkmundotech2019/09/09 02:54:12
steemdelegated 5.905 SP to @nbkmundotech
2019/09/09 02:54:12
| delegatee | nbkmundotech |
| delegator | steem |
| vesting shares | 9602.816208 VESTS |
| Transaction Info | Block #36259238/Trx 985285fda04c06c3fb1cc84b34e7b095839f3dd0 |
View Raw JSON Data
{
"block": 36259238,
"op": [
"delegate_vesting_shares",
{
"delegatee": "nbkmundotech",
"delegator": "steem",
"vesting_shares": "9602.816208 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2019-09-09T02:54:12",
"trx_id": "985285fda04c06c3fb1cc84b34e7b095839f3dd0",
"trx_in_block": 1,
"virtual_op": 0
}2019/09/06 06:46:30
2019/09/06 06:46:30
| author | steemitboard |
| body | Congratulations @nbkmundotech! You received a personal award! <table><tr><td>https://steemitimages.com/70x70/http://steemitboard.com/@nbkmundotech/birthday1.png</td><td>Happy Birthday! - You are on the Steem blockchain for 1 year!</td></tr></table> <sub>_You can view [your badges on your Steem Board](https://steemitboard.com/@nbkmundotech) and compare to others on the [Steem Ranking](https://steemitboard.com/ranking/index.php?name=nbkmundotech)_</sub> ###### [Vote for @Steemitboard as a witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1) to get one more award and increased upvotes! |
| json metadata | {"image":["https://steemitboard.com/img/notify.png"]} |
| parent author | nbkmundotech |
| parent permlink | como-usar-protected-para-acessar-membros-privados-de-uma-base-classe-no-typescript |
| permlink | steemitboard-notify-nbkmundotech-20190906t064630000z |
| title | |
| Transaction Info | Block #36177804/Trx a398f07db930a95a2d2091c1199d6b5fecb689e5 |
View Raw JSON Data
{
"block": 36177804,
"op": [
"comment",
{
"author": "steemitboard",
"body": "Congratulations @nbkmundotech! You received a personal award!\n\n<table><tr><td>https://steemitimages.com/70x70/http://steemitboard.com/@nbkmundotech/birthday1.png</td><td>Happy Birthday! - You are on the Steem blockchain for 1 year!</td></tr></table>\n\n<sub>_You can view [your badges on your Steem Board](https://steemitboard.com/@nbkmundotech) and compare to others on the [Steem Ranking](https://steemitboard.com/ranking/index.php?name=nbkmundotech)_</sub>\n\n\n###### [Vote for @Steemitboard as a witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1) to get one more award and increased upvotes!",
"json_metadata": "{\"image\":[\"https://steemitboard.com/img/notify.png\"]}",
"parent_author": "nbkmundotech",
"parent_permlink": "como-usar-protected-para-acessar-membros-privados-de-uma-base-classe-no-typescript",
"permlink": "steemitboard-notify-nbkmundotech-20190906t064630000z",
"title": ""
}
],
"op_in_trx": 0,
"timestamp": "2019-09-06T06:46:30",
"trx_id": "a398f07db930a95a2d2091c1199d6b5fecb689e5",
"trx_in_block": 9,
"virtual_op": 0
}dtubesent 0.001 STEEM to @nbkmundotech- "Time is running out, claim your DTube account now before anyone else can! Login at https://d.tube"2019/08/22 15:14:57
dtubesent 0.001 STEEM to @nbkmundotech- "Time is running out, claim your DTube account now before anyone else can! Login at https://d.tube"
2019/08/22 15:14:57
| amount | 0.001 STEEM |
| from | dtube |
| memo | Time is running out, claim your DTube account now before anyone else can! Login at https://d.tube |
| to | nbkmundotech |
| Transaction Info | Block #35778310/Trx 5cc474b75e20386a91028904de177352098dbe28 |
View Raw JSON Data
{
"block": 35778310,
"op": [
"transfer",
{
"amount": "0.001 STEEM",
"from": "dtube",
"memo": "Time is running out, claim your DTube account now before anyone else can! Login at https://d.tube",
"to": "nbkmundotech"
}
],
"op_in_trx": 0,
"timestamp": "2019-08-22T15:14:57",
"trx_id": "5cc474b75e20386a91028904de177352098dbe28",
"trx_in_block": 4,
"virtual_op": 0
}steemdelegated 18.146 SP to @nbkmundotech2019/07/16 09:32:03
steemdelegated 18.146 SP to @nbkmundotech
2019/07/16 09:32:03
| delegatee | nbkmundotech |
| delegator | steem |
| vesting shares | 29509.458018 VESTS |
| Transaction Info | Block #34708810/Trx 6c151f185ff9f9a99edef1734dfc00d583a7f050 |
View Raw JSON Data
{
"block": 34708810,
"op": [
"delegate_vesting_shares",
{
"delegatee": "nbkmundotech",
"delegator": "steem",
"vesting_shares": "29509.458018 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2019-07-16T09:32:03",
"trx_id": "6c151f185ff9f9a99edef1734dfc00d583a7f050",
"trx_in_block": 2,
"virtual_op": 0
}surpassinggooglereplied to @nbkmundotech / ptbnv12019/06/19 01:23:24
surpassinggooglereplied to @nbkmundotech / ptbnv1
2019/06/19 01:23:24
| author | surpassinggoogle |
| body | Hi bro, I have some tasks related to vue and react all on Github and utopian approved. Can you help me with some? I have some steem bounty too and the bounty isn’t big as I am really short on funds but I will love to tip additional steem especially where contributions are timely. I really need help basically. Here is a list: https://steemit.com/utopian-io/@surpassinggoogle/in-dire-need-of-help-are-you-ready-to-make-your-picks-1500-steem-and-20-000-teardrops-shared-among-a-collection-of-development Most of the assigned tasks havent really been taken yet as those who were assigned became unavailable. The projects are steemgigs.org and ulogs.org |
| json metadata | {"tags":["redux"],"links":["https://steemit.com/utopian-io/@surpassinggoogle/in-dire-need-of-help-are-you-ready-to-make-your-picks-1500-steem-and-20-000-teardrops-shared-among-a-collection-of-development"],"app":"steemit/0.1"} |
| parent author | nbkmundotech |
| parent permlink | o-conceito-de-seletores-no-redux |
| permlink | ptbnv1 |
| title | |
| Transaction Info | Block #33922383/Trx b5717242e2d37866185b423a6ba581117426c152 |
View Raw JSON Data
{
"block": 33922383,
"op": [
"comment",
{
"author": "surpassinggoogle",
"body": "Hi bro, I have some tasks related to vue and react all on Github and utopian approved. Can you help me with some? I have some steem bounty too and the bounty isn’t big as I am really short on funds but I will love to tip additional steem especially where contributions are timely. I really need help basically.\n\nHere is a list:\n\nhttps://steemit.com/utopian-io/@surpassinggoogle/in-dire-need-of-help-are-you-ready-to-make-your-picks-1500-steem-and-20-000-teardrops-shared-among-a-collection-of-development\n\nMost of the assigned tasks havent really been taken yet as those who were assigned became unavailable.\n\nThe projects are steemgigs.org and ulogs.org",
"json_metadata": "{\"tags\":[\"redux\"],\"links\":[\"https://steemit.com/utopian-io/@surpassinggoogle/in-dire-need-of-help-are-you-ready-to-make-your-picks-1500-steem-and-20-000-teardrops-shared-among-a-collection-of-development\"],\"app\":\"steemit/0.1\"}",
"parent_author": "nbkmundotech",
"parent_permlink": "o-conceito-de-seletores-no-redux",
"permlink": "ptbnv1",
"title": ""
}
],
"op_in_trx": 0,
"timestamp": "2019-06-19T01:23:24",
"trx_id": "b5717242e2d37866185b423a6ba581117426c152",
"trx_in_block": 11,
"virtual_op": 0
}nbkmundotechreceived 0.011 SBD, 0.037 SP author reward for @nbkmundotech / uma-breve-introducao-a-classes-no-typescript2019/06/11 15:21:39
nbkmundotechreceived 0.011 SBD, 0.037 SP author reward for @nbkmundotech / uma-breve-introducao-a-classes-no-typescript
2019/06/11 15:21:39
| author | nbkmundotech |
| permlink | uma-breve-introducao-a-classes-no-typescript |
| sbd payout | 0.011 SBD |
| steem payout | 0.000 STEEM |
| vesting payout | 59.744326 VESTS |
| Transaction Info | Block #33709218/Virtual Operation #7 |
View Raw JSON Data
{
"block": 33709218,
"op": [
"author_reward",
{
"author": "nbkmundotech",
"permlink": "uma-breve-introducao-a-classes-no-typescript",
"sbd_payout": "0.011 SBD",
"steem_payout": "0.000 STEEM",
"vesting_payout": "59.744326 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2019-06-11T15:21:39",
"trx_id": "0000000000000000000000000000000000000000",
"trx_in_block": 4294967295,
"virtual_op": 7
}menkarbitsent 0.001 STEEM to @nbkmundotech- "Obrigado por postar! Voce ira receber 0.001 STEEM por divulgar o seu conteudo usando a tag #pt"2019/06/10 02:12:51
menkarbitsent 0.001 STEEM to @nbkmundotech- "Obrigado por postar! Voce ira receber 0.001 STEEM por divulgar o seu conteudo usando a tag #pt"
2019/06/10 02:12:51
| amount | 0.001 STEEM |
| from | menkarbit |
| memo | Obrigado por postar! Voce ira receber 0.001 STEEM por divulgar o seu conteudo usando a tag #pt |
| to | nbkmundotech |
| Transaction Info | Block #33664708/Trx e7d5cd7c3afcecdb00db47514d0566933e84be9d |
View Raw JSON Data
{
"block": 33664708,
"op": [
"transfer",
{
"amount": "0.001 STEEM",
"from": "menkarbit",
"memo": "Obrigado por postar! Voce ira receber 0.001 STEEM por divulgar o seu conteudo usando a tag #pt",
"to": "nbkmundotech"
}
],
"op_in_trx": 0,
"timestamp": "2019-06-10T02:12:51",
"trx_id": "e7d5cd7c3afcecdb00db47514d0566933e84be9d",
"trx_in_block": 9,
"virtual_op": 0
}2019/06/10 01:56:57
2019/06/10 01:56:57
| author | nbkmundotech |
| body | Em programação orientada à objetos, os atributos de um objeto são normalmente definidos com acesso privado para não serem lidos ou modificados diretamente. Em vez do acesso direto a propriedade, funções *getter* e *setter* são definidas para disponibilizar uma API de leitura e modificação, respectivamente. Por exemplo, suponha que temos uma classe que representa um veículo: ``` class Veiculo { private marca: string; constructor(aMarca: string) { this.marca = aMarca; } obterMarca() { return this.marca; } modificarMarca(novaMarca: string) { this.marca = novaMarca; } } ``` Podemos criar um veículo da seguinte maneira: ``` let carro = new Veiculo("Honda"); ``` Mas o acesso e modificação da marca do veículo após sua construção não é permitida: ``` console.log(carro.marca); carro.marca = "Toyota"; ``` O compilador mostra o seguinte erro para ambas as expressões: ``` Property 'marca' is private and only accessible within class 'Veiculo'. ``` Vamos agora criar uma classe derivadas de um Veiculo: `Carro`. Veja o código abaixo: ``` class Carro extends Veiculo { imprimirMarca() { console.log(this.marca); } } ``` A classe `Carro` herda o `constructor` da base classe `Veiculo`, então não precisamos defini-lo novamente. O metodo `imprimirMarca` vai dar erro porque `this.marca` não é acessível da classe derivada, `Carro`. A marca é uma propriedade da base classe `Veiculo`, com acesso `private`: ``` Property 'marca' is private and only accessible within class 'Veiculo'. ``` Para podermos ter acesso direto de uma propriedade da base classe na classe derivada, precisamos usar o modo de acesso **protected**: ``` class Veiculo { protected marca: string; // ... } ``` Agora, a chamada de `imprimirMarca` de um objeto da classe `Carro` irá funcionar sem problemas. O acesso à propriedade `marca` da superclasse `Veiculo` é permitido. Para aprender mais sobre o TypeScript, assista às aulas do NBK Mundo Tech: https://www.youtube.com/watch?v=jOJYBcjJ0CE&list=PLUbb2i4BuuzBcH1iS242xjztUwMI4erNb Nos vemos lá! |
| json metadata | {"tags":["typescript","protected","private","class","pt"],"image":["https://img.youtube.com/vi/jOJYBcjJ0CE/0.jpg"],"links":["https://www.youtube.com/watch?v=jOJYBcjJ0CE&list=PLUbb2i4BuuzBcH1iS242xjztUwMI4erNb"],"app":"steemit/0.1","format":"markdown"} |
| parent author | |
| parent permlink | typescript |
| permlink | como-usar-protected-para-acessar-membros-privados-de-uma-base-classe-no-typescript |
| title | Como Usar protected para Acessar Membros Privados de uma Base Classe no TypeScript |
| Transaction Info | Block #33664390/Trx 4b189f92be11c1d821b1bf76d41f9c2adc3d4211 |
View Raw JSON Data
{
"block": 33664390,
"op": [
"comment",
{
"author": "nbkmundotech",
"body": "Em programação orientada à objetos, os atributos de um objeto são normalmente definidos com acesso privado para não serem lidos ou modificados diretamente. Em vez do acesso direto a propriedade, funções *getter* e *setter* são definidas para disponibilizar uma API de leitura e modificação, respectivamente.\n\nPor exemplo, suponha que temos uma classe que representa um veículo:\n\n```\nclass Veiculo {\n private marca: string;\n\n constructor(aMarca: string) {\n this.marca = aMarca;\n }\n\n obterMarca() {\n return this.marca;\n }\n\n modificarMarca(novaMarca: string) {\n this.marca = novaMarca;\n }\n}\n```\n\nPodemos criar um veículo da seguinte maneira:\n\n```\nlet carro = new Veiculo(\"Honda\");\n```\n\nMas o acesso e modificação da marca do veículo após sua construção não é permitida:\n\n```\nconsole.log(carro.marca);\ncarro.marca = \"Toyota\";\n```\n\nO compilador mostra o seguinte erro para ambas as expressões:\n\n```\nProperty 'marca' is private and only accessible within class 'Veiculo'.\n```\n\nVamos agora criar uma classe derivadas de um Veiculo: `Carro`. Veja o código abaixo:\n\n```\nclass Carro extends Veiculo {\n imprimirMarca() {\n console.log(this.marca);\n }\n}\n```\n\nA classe `Carro` herda o `constructor` da base classe `Veiculo`, então não precisamos defini-lo novamente.\n\nO metodo `imprimirMarca` vai dar erro porque `this.marca` não é acessível da classe derivada, `Carro`. A marca é uma propriedade da base classe `Veiculo`, com acesso `private`:\n\n```\nProperty 'marca' is private and only accessible within class 'Veiculo'.\n```\n\nPara podermos ter acesso direto de uma propriedade da base classe na classe derivada, precisamos usar o modo de acesso **protected**:\n\n```\nclass Veiculo {\n protected marca: string;\n\n // ...\n}\n```\n\nAgora, a chamada de `imprimirMarca` de um objeto da classe `Carro` irá funcionar sem problemas. O acesso à propriedade `marca` da superclasse `Veiculo` é permitido.\n\nPara aprender mais sobre o TypeScript, assista às aulas do NBK Mundo Tech:\n\nhttps://www.youtube.com/watch?v=jOJYBcjJ0CE&list=PLUbb2i4BuuzBcH1iS242xjztUwMI4erNb\n\nNos vemos lá!",
"json_metadata": "{\"tags\":[\"typescript\",\"protected\",\"private\",\"class\",\"pt\"],\"image\":[\"https://img.youtube.com/vi/jOJYBcjJ0CE/0.jpg\"],\"links\":[\"https://www.youtube.com/watch?v=jOJYBcjJ0CE&list=PLUbb2i4BuuzBcH1iS242xjztUwMI4erNb\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
"parent_author": "",
"parent_permlink": "typescript",
"permlink": "como-usar-protected-para-acessar-membros-privados-de-uma-base-classe-no-typescript",
"title": "Como Usar protected para Acessar Membros Privados de uma Base Classe no TypeScript"
}
],
"op_in_trx": 0,
"timestamp": "2019-06-10T01:56:57",
"trx_id": "4b189f92be11c1d821b1bf76d41f9c2adc3d4211",
"trx_in_block": 16,
"virtual_op": 0
}menkarbitsent 0.001 STEEM to @nbkmundotech- "Obrigado por postar! Voce ira receber 0.001 STEEM por divulgar o seu conteudo usando a tag #pt"2019/06/08 01:05:00
menkarbitsent 0.001 STEEM to @nbkmundotech- "Obrigado por postar! Voce ira receber 0.001 STEEM por divulgar o seu conteudo usando a tag #pt"
2019/06/08 01:05:00
| amount | 0.001 STEEM |
| from | menkarbit |
| memo | Obrigado por postar! Voce ira receber 0.001 STEEM por divulgar o seu conteudo usando a tag #pt |
| to | nbkmundotech |
| Transaction Info | Block #33605847/Trx e010d81ed0081678cdf47b68a2b2d49fb172d3ec |
View Raw JSON Data
{
"block": 33605847,
"op": [
"transfer",
{
"amount": "0.001 STEEM",
"from": "menkarbit",
"memo": "Obrigado por postar! Voce ira receber 0.001 STEEM por divulgar o seu conteudo usando a tag #pt",
"to": "nbkmundotech"
}
],
"op_in_trx": 0,
"timestamp": "2019-06-08T01:05:00",
"trx_id": "e010d81ed0081678cdf47b68a2b2d49fb172d3ec",
"trx_in_block": 11,
"virtual_op": 0
}advanticleupvoted (100.00%) @nbkmundotech / heranca-de-classes-no-typescript2019/06/08 00:50:15
advanticleupvoted (100.00%) @nbkmundotech / heranca-de-classes-no-typescript
2019/06/08 00:50:15
| author | nbkmundotech |
| permlink | heranca-de-classes-no-typescript |
| voter | advanticle |
| weight | 10000 (100.00%) |
| Transaction Info | Block #33605552/Trx ab962490e5c6896d29e67386fabb3361656b2b6b |
View Raw JSON Data
{
"block": 33605552,
"op": [
"vote",
{
"author": "nbkmundotech",
"permlink": "heranca-de-classes-no-typescript",
"voter": "advanticle",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2019-06-08T00:50:15",
"trx_id": "ab962490e5c6896d29e67386fabb3361656b2b6b",
"trx_in_block": 23,
"virtual_op": 0
}nbkmundotechpublished a new post: heranca-de-classes-no-typescript2019/06/08 00:49:24
nbkmundotechpublished a new post: heranca-de-classes-no-typescript
2019/06/08 00:49:24
| author | nbkmundotech |
| body | A palavra-chave `class`, introduzida no ECMAScript 2015, nos permite definir uma classe em JavaScript. O TypeScript também tem suporte ao paradigma. Um dos elementos da programação orientada à objetos é a herança de classes para reutilizar o código. No JavaScript tradicional, a herança é feita através de protótipos. Já com a palavra-chave `class`, podemos fazer a herança através da palavra-chave `extends`. Vamos supor que temos uma base classe chamada `Individuo`. Vamos simplificar o nosso exemplo e considerar mais duas classes: um individuo poderia ser um estudante ou um funcionário de uma empresa. Por causa disso, podemos usar herança e definir que: ``` Um Estudante é um Individuo Um Funcionario é um Individuo ``` Então a base classe é `Individuo` e as classes derivadas são `Estudante` e `Funcionario`. O primeiro é também chamado de superclasse e os segundos são subclasses. Vamos aprender com um código. Primeiro definimos a base classe: ``` class Individuo { nome: string; constructor(oNome: string) { this.nome = oNome; } } ``` Agora, para herdarmos da base classe, usamos a palavra-chave `extends` logo após o nome dela. Depois segue com o nome da classe derivada: ``` class Estudante extends Individuo { } class Funcionario extends Individuo { } ``` Não definimos nenhum membro para as classes derivadas, mas ambas irão herdar a propriedade `nome` e o `constructor` de `Individuo`. Podemos então adicionar propriedades e métodos específicos para cada subclasse. Por exemplo, um `Estudante` tem uma `disciplina` de estudo e um funcionário tem um `salario`. ``` class Estudante extends Individuo { disciplina: string; constructor(oNome: string, aDisciplina: string) { super(oNome); this.disciplina = aDisciplina; } } class Funcionario extends Individuo { salario: number; constructor(oNome: string, oSalario: number) { super(oNome); this.salario = oSalario; } } ``` No exemplo acima, precisamos adicionar um novo `constructor` à cada classe derivada para poder iniciar as propriedades específicas de cada classe. Note que podemos reutilizar o código do constructor da base classe `Individuo` com a chamada de `super`. É importante ressaltar que `super` deve ser chamado para iniciar os valores compartilhados através da base classe e que não se deve referenciar `this.` no corpo do constructor antes da chamada de `super()`. Vamos testar nossas classes: ``` let fJoao: Funcionario = new Funcionario("Joao", 123); let eAna: Estudante = new Estudante("Ana", "Arquitetura"); ``` Note que também podemos criar uma variável do tipo da base classe e ainda armazenar tanto um `Estudante` como um `Funcionario`: ``` let individuo: Individuo = fJoao; individuo = eAna; ``` O código acima funciona porque um `Funcionario` é um `Individuo` e um `Estudante` também é um `Individuo`. Para aprender mais sobre o TypeScript, assista às aulas do NBK Mundo Tech: https://www.youtube.com/watch?v=jOJYBcjJ0CE&list=PLUbb2i4BuuzBcH1iS242xjztUwMI4erNb Nos vemos lá! |
| json metadata | {"tags":["typescript","classes","heranca","inheritance","pt"],"image":["https://img.youtube.com/vi/jOJYBcjJ0CE/0.jpg"],"links":["https://www.youtube.com/watch?v=jOJYBcjJ0CE&list=PLUbb2i4BuuzBcH1iS242xjztUwMI4erNb"],"app":"steemit/0.1","format":"markdown"} |
| parent author | |
| parent permlink | typescript |
| permlink | heranca-de-classes-no-typescript |
| title | Herança de Classes no TypeScript |
| Transaction Info | Block #33605535/Trx e594159c340471084a5eba812fbf485726b7eccd |
View Raw JSON Data
{
"block": 33605535,
"op": [
"comment",
{
"author": "nbkmundotech",
"body": "A palavra-chave `class`, introduzida no ECMAScript 2015, nos permite definir uma classe em JavaScript. O TypeScript também tem suporte ao paradigma. Um dos elementos da programação orientada à objetos é a herança de classes para reutilizar o código. No JavaScript tradicional, a herança é feita através de protótipos. Já com a palavra-chave `class`, podemos fazer a herança através da palavra-chave `extends`.\n\nVamos supor que temos uma base classe chamada `Individuo`. Vamos simplificar o nosso exemplo e considerar mais duas classes: um individuo poderia ser um estudante ou um funcionário de uma empresa. Por causa disso, podemos usar herança e definir que:\n\n```\nUm Estudante é um Individuo\nUm Funcionario é um Individuo\n```\n\nEntão a base classe é `Individuo` e as classes derivadas são `Estudante` e `Funcionario`. O primeiro é também chamado de superclasse e os segundos são subclasses.\n\nVamos aprender com um código. Primeiro definimos a base classe:\n\n```\nclass Individuo {\n nome: string;\n constructor(oNome: string) {\n this.nome = oNome;\n }\n}\n```\n\nAgora, para herdarmos da base classe, usamos a palavra-chave `extends` logo após o nome dela. Depois segue com o nome da classe derivada:\n\n```\nclass Estudante extends Individuo {\n}\n\nclass Funcionario extends Individuo {\n}\n```\n\nNão definimos nenhum membro para as classes derivadas, mas ambas irão herdar a propriedade `nome` e o `constructor` de `Individuo`.\n\nPodemos então adicionar propriedades e métodos específicos para cada subclasse. Por exemplo, um `Estudante` tem uma `disciplina` de estudo e um funcionário tem um `salario`.\n\n```\nclass Estudante extends Individuo {\n disciplina: string;\n\n constructor(oNome: string, aDisciplina: string) {\n super(oNome);\n this.disciplina = aDisciplina;\n }\n}\n\nclass Funcionario extends Individuo {\n salario: number;\n\n constructor(oNome: string, oSalario: number) {\n super(oNome);\n this.salario = oSalario;\n }\n}\n```\n\nNo exemplo acima, precisamos adicionar um novo `constructor` à cada classe derivada para poder iniciar as propriedades específicas de cada classe. Note que podemos reutilizar o código do constructor da base classe `Individuo` com a chamada de `super`.\n\nÉ importante ressaltar que `super` deve ser chamado para iniciar os valores compartilhados através da base classe e que não se deve referenciar `this.` no corpo do constructor antes da chamada de `super()`.\n\nVamos testar nossas classes:\n\n```\nlet fJoao: Funcionario = new Funcionario(\"Joao\", 123);\nlet eAna: Estudante = new Estudante(\"Ana\", \"Arquitetura\");\n```\n\nNote que também podemos criar uma variável do tipo da base classe e ainda armazenar tanto um `Estudante` como um `Funcionario`:\n\n```\nlet individuo: Individuo = fJoao;\nindividuo = eAna;\n```\n\nO código acima funciona porque um `Funcionario` é um `Individuo` e um `Estudante` também é um `Individuo`.\n\nPara aprender mais sobre o TypeScript, assista às aulas do NBK Mundo Tech:\n\nhttps://www.youtube.com/watch?v=jOJYBcjJ0CE&list=PLUbb2i4BuuzBcH1iS242xjztUwMI4erNb\n\nNos vemos lá!",
"json_metadata": "{\"tags\":[\"typescript\",\"classes\",\"heranca\",\"inheritance\",\"pt\"],\"image\":[\"https://img.youtube.com/vi/jOJYBcjJ0CE/0.jpg\"],\"links\":[\"https://www.youtube.com/watch?v=jOJYBcjJ0CE&list=PLUbb2i4BuuzBcH1iS242xjztUwMI4erNb\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
"parent_author": "",
"parent_permlink": "typescript",
"permlink": "heranca-de-classes-no-typescript",
"title": "Herança de Classes no TypeScript"
}
],
"op_in_trx": 0,
"timestamp": "2019-06-08T00:49:24",
"trx_id": "e594159c340471084a5eba812fbf485726b7eccd",
"trx_in_block": 16,
"virtual_op": 0
}matheusggrupvoted (30.00%) @nbkmundotech / uma-breve-introducao-a-classes-no-typescript2019/06/05 19:04:57
matheusggrupvoted (30.00%) @nbkmundotech / uma-breve-introducao-a-classes-no-typescript
2019/06/05 19:04:57
| author | nbkmundotech |
| permlink | uma-breve-introducao-a-classes-no-typescript |
| voter | matheusggr |
| weight | 3000 (30.00%) |
| Transaction Info | Block #33541128/Trx 364b14888f81f478c8352374506d3e4b159d5352 |
View Raw JSON Data
{
"block": 33541128,
"op": [
"vote",
{
"author": "nbkmundotech",
"permlink": "uma-breve-introducao-a-classes-no-typescript",
"voter": "matheusggr",
"weight": 3000
}
],
"op_in_trx": 0,
"timestamp": "2019-06-05T19:04:57",
"trx_id": "364b14888f81f478c8352374506d3e4b159d5352",
"trx_in_block": 45,
"virtual_op": 0
}2019/06/04 23:39:03
2019/06/04 23:39:03
| author | steemitboard |
| body | Congratulations @nbkmundotech! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) : <table><tr><td><img src="https://steemitimages.com/60x70/https://steemitboard.com/@nbkmundotech/voted.png?201906042254"></td><td>You received more than 50 upvotes. Your next target is to reach 100 upvotes.</td></tr> </table> <sub>_You can view [your badges on your Steem Board](https://steemitboard.com/@nbkmundotech) and compare to others on the [Steem Ranking](https://steemitboard.com/ranking/index.php?name=nbkmundotech)_</sub> <sub>_If you no longer want to receive notifications, reply to this comment with the word_ `STOP`</sub> ###### [Vote for @Steemitboard as a witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1) to get one more award and increased upvotes! |
| json metadata | {"image":["https://steemitboard.com/img/notify.png"]} |
| parent author | nbkmundotech |
| parent permlink | uma-breve-introducao-a-classes-no-typescript |
| permlink | steemitboard-notify-nbkmundotech-20190604t233902000z |
| title | |
| Transaction Info | Block #33517840/Trx 3c05df3992a4c16aeb998ffd06a2b54a636891ca |
View Raw JSON Data
{
"block": 33517840,
"op": [
"comment",
{
"author": "steemitboard",
"body": "Congratulations @nbkmundotech! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :\n\n<table><tr><td><img src=\"https://steemitimages.com/60x70/https://steemitboard.com/@nbkmundotech/voted.png?201906042254\"></td><td>You received more than 50 upvotes. Your next target is to reach 100 upvotes.</td></tr>\n</table>\n\n<sub>_You can view [your badges on your Steem Board](https://steemitboard.com/@nbkmundotech) and compare to others on the [Steem Ranking](https://steemitboard.com/ranking/index.php?name=nbkmundotech)_</sub>\n<sub>_If you no longer want to receive notifications, reply to this comment with the word_ `STOP`</sub>\n\n\n\n###### [Vote for @Steemitboard as a witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1) to get one more award and increased upvotes!",
"json_metadata": "{\"image\":[\"https://steemitboard.com/img/notify.png\"]}",
"parent_author": "nbkmundotech",
"parent_permlink": "uma-breve-introducao-a-classes-no-typescript",
"permlink": "steemitboard-notify-nbkmundotech-20190604t233902000z",
"title": ""
}
],
"op_in_trx": 0,
"timestamp": "2019-06-04T23:39:03",
"trx_id": "3c05df3992a4c16aeb998ffd06a2b54a636891ca",
"trx_in_block": 1,
"virtual_op": 0
}discernenteupvoted (1.00%) @nbkmundotech / uma-breve-introducao-a-classes-no-typescript2019/06/04 21:15:03
discernenteupvoted (1.00%) @nbkmundotech / uma-breve-introducao-a-classes-no-typescript
2019/06/04 21:15:03
| author | nbkmundotech |
| permlink | uma-breve-introducao-a-classes-no-typescript |
| voter | discernente |
| weight | 100 (1.00%) |
| Transaction Info | Block #33514963/Trx 73d97b3892bbed314e82e555faeefed1f2d33b9a |
View Raw JSON Data
{
"block": 33514963,
"op": [
"vote",
{
"author": "nbkmundotech",
"permlink": "uma-breve-introducao-a-classes-no-typescript",
"voter": "discernente",
"weight": 100
}
],
"op_in_trx": 0,
"timestamp": "2019-06-04T21:15:03",
"trx_id": "73d97b3892bbed314e82e555faeefed1f2d33b9a",
"trx_in_block": 24,
"virtual_op": 0
}markitoeliasupvoted (100.00%) @nbkmundotech / uma-breve-introducao-a-classes-no-typescript2019/06/04 15:43:00
markitoeliasupvoted (100.00%) @nbkmundotech / uma-breve-introducao-a-classes-no-typescript
2019/06/04 15:43:00
| author | nbkmundotech |
| permlink | uma-breve-introducao-a-classes-no-typescript |
| voter | markitoelias |
| weight | 10000 (100.00%) |
| Transaction Info | Block #33508329/Trx 8f291e4d4596f1e03c4626e7f68ac262caa13e55 |
View Raw JSON Data
{
"block": 33508329,
"op": [
"vote",
{
"author": "nbkmundotech",
"permlink": "uma-breve-introducao-a-classes-no-typescript",
"voter": "markitoelias",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2019-06-04T15:43:00",
"trx_id": "8f291e4d4596f1e03c4626e7f68ac262caa13e55",
"trx_in_block": 12,
"virtual_op": 0
}menkarbitsent 0.001 STEEM to @nbkmundotech- "Obrigado por postar! Voce ira receber 0.001 STEEM por divulgar o seu conteudo usando a tag #pt"2019/06/04 15:37:51
menkarbitsent 0.001 STEEM to @nbkmundotech- "Obrigado por postar! Voce ira receber 0.001 STEEM por divulgar o seu conteudo usando a tag #pt"
2019/06/04 15:37:51
| amount | 0.001 STEEM |
| from | menkarbit |
| memo | Obrigado por postar! Voce ira receber 0.001 STEEM por divulgar o seu conteudo usando a tag #pt |
| to | nbkmundotech |
| Transaction Info | Block #33508227/Trx a9a211bc12b18fda1d96734349fbb60c4738db43 |
View Raw JSON Data
{
"block": 33508227,
"op": [
"transfer",
{
"amount": "0.001 STEEM",
"from": "menkarbit",
"memo": "Obrigado por postar! Voce ira receber 0.001 STEEM por divulgar o seu conteudo usando a tag #pt",
"to": "nbkmundotech"
}
],
"op_in_trx": 0,
"timestamp": "2019-06-04T15:37:51",
"trx_id": "a9a211bc12b18fda1d96734349fbb60c4738db43",
"trx_in_block": 22,
"virtual_op": 0
}nbkmundotechpublished a new post: uma-breve-introducao-a-classes-no-typescript2019/06/04 15:21:39
nbkmundotechpublished a new post: uma-breve-introducao-a-classes-no-typescript
2019/06/04 15:21:39
| author | nbkmundotech |
| body | A programação orientada à objetos no JavaScript é originalmente realizada através de funções e herança prototípica. Com o advento do ECMAScript 2015, coloquialmente chamado de “ES6”, foi adicionada a palavra chave **class**, agora nos permitindo criar classes de maneira similar à linguagens como C++, C#, e Java. O TypeScript também tem suporte a declaração de classes através da palavra chave `class`. Vamos ver um exemplo: ``` class Forma { nome: string; constructor(oNome: string) { this.nome = oNome; } } ``` O exemplo acima define uma classe chamada de `Forma`, que tem como atributo a propriedade `nome`. A função `constructor()` é chamada quando você construir um objeto baseado na classe e atribui um nome à forma. O acesso de membros da classe é por padrão `public`, se nada for definido explicitamente. Entao podemos instanciar um objeto e acessar a propriedade `nome` diretamente: ``` let retang: Forma = new Forma("Retangulo"); console.log(`O nome da forma é ${retang.nome}`); ``` A expressão acima primeiro declara uma variável do tipo `Forma` e atribui ao seu valor uma nova instância de `Forma`, com o nome Retangulo. Note que a string Retangulo é passada como argumento para o `constructor`, que por si atribui o nome do objeto `this.nome`. O `console.log` imprime uma mensagem que inclui acesso ao nome da Forma diretamente, sem passar por um método *getter*. Vamos adicionar duas propriedades à classe Forma: `largura` e `altura`. Ambas devem ser do tipo `number`. ``` class Forma { nome: string; largura: number; altura: number; constructor(oNome: string, aLargura: number, aAltura: number) { this.nome = oNome; this.largura = aLargura; this.altura = aAltura; } } ``` Agora podemos fazer um método para calcular a área da forma: ``` class Forma { // ... public obterArea(): number { return this.largura * this.altura; } } ``` Como já mencionado, o acesso dos membros de uma classe em TypeScript é `public` por padrão, mas o exemplo acima o define explicitamente. Acesso público significa que o membro pode ser referenciado por fora da classe. Isso é o oposto do acesso privado (`private`), em que é proibido a referência do membro de fora da classe ou instância. O método não tem nenhum parâmetro porque os valores necessários para calcular a área já são parte dos atributos do objeto. O tipo do valor de retorno do método `obterArea` é explicitamente definido como `number`, mas poderia ser omitido e o compilador deduziria o tipo ao analizar a expressão de retorno. Vamos testar o método `obterArea`: ``` let retang: Forma = new Forma("Retangulo", 3, 4); console.log(`A area do retângulo é ${retang.obterArea()}`); ``` Saída: ``` A area do retângulo é 12 ``` Para não expor os atributos `largura` e `altura` do objeto ao mundo de fora, que tal redefinir essas propriedades com acesso privado? ``` class Forma { // ... private largura: number; private altura: number; // ... } ``` Dessa maneira, se o usuário do objeto tentar referenciar `retang.largura`, o compilador irá emitir um erro dizendo que o acesso não é permitido devido a propriedade ser privada: ``` Property 'largura' is private and only accessible within class 'Forma'. ``` Para aprender mais sobre o TypeScript, assista às aulas do NBK Mundo Tech: https://www.youtube.com/watch?v=czp3QV55v1k&list=PLUbb2i4BuuzBcH1iS242xjztUwMI4erNb Nos vemos lá! |
| json metadata | {"tags":["typescript","classes","pt"],"image":["https://img.youtube.com/vi/czp3QV55v1k/0.jpg"],"links":["https://www.youtube.com/watch?v=czp3QV55v1k&list=PLUbb2i4BuuzBcH1iS242xjztUwMI4erNb"],"app":"steemit/0.1","format":"markdown"} |
| parent author | |
| parent permlink | typescript |
| permlink | uma-breve-introducao-a-classes-no-typescript |
| title | Uma Breve Introdução a Classes no TypeScript |
| Transaction Info | Block #33507903/Trx fbff022377b4d0ed6bd71496d77bc0b2cb648aea |
View Raw JSON Data
{
"block": 33507903,
"op": [
"comment",
{
"author": "nbkmundotech",
"body": "A programação orientada à objetos no JavaScript é originalmente realizada através de funções e herança prototípica. Com o advento do ECMAScript 2015, coloquialmente chamado de “ES6”, foi adicionada a palavra chave **class**, agora nos permitindo criar classes de maneira similar à linguagens como C++, C#, e Java.\n\nO TypeScript também tem suporte a declaração de classes através da palavra chave `class`. Vamos ver um exemplo:\n\n```\nclass Forma {\n nome: string;\n\n constructor(oNome: string) {\n this.nome = oNome;\n }\n}\n```\n\nO exemplo acima define uma classe chamada de `Forma`, que tem como atributo a propriedade `nome`. A função `constructor()` é chamada quando você construir um objeto baseado na classe e atribui um nome à forma.\n\nO acesso de membros da classe é por padrão `public`, se nada for definido explicitamente. Entao podemos instanciar um objeto e acessar a propriedade `nome` diretamente:\n\n```\nlet retang: Forma = new Forma(\"Retangulo\");\nconsole.log(`O nome da forma é ${retang.nome}`);\n```\n\nA expressão acima primeiro declara uma variável do tipo `Forma` e atribui ao seu valor uma nova instância de `Forma`, com o nome Retangulo. Note que a string Retangulo é passada como argumento para o `constructor`, que por si atribui o nome do objeto `this.nome`.\n\nO `console.log` imprime uma mensagem que inclui acesso ao nome da Forma diretamente, sem passar por um método *getter*.\n\nVamos adicionar duas propriedades à classe Forma: `largura` e `altura`. Ambas devem ser do tipo `number`.\n\n```\nclass Forma {\n nome: string;\n largura: number;\n altura: number;\n\n constructor(oNome: string, aLargura: number, aAltura: number) {\n this.nome = oNome;\n this.largura = aLargura;\n this.altura = aAltura;\n }\n}\n```\n\nAgora podemos fazer um método para calcular a área da forma:\n\n```\nclass Forma {\n // ...\n public obterArea(): number {\n return this.largura * this.altura;\n }\n}\n```\n\nComo já mencionado, o acesso dos membros de uma classe em TypeScript é `public` por padrão, mas o exemplo acima o define explicitamente. Acesso público significa que o membro pode ser referenciado por fora da classe. Isso é o oposto do acesso privado (`private`), em que é proibido a referência do membro de fora da classe ou instância.\n\nO método não tem nenhum parâmetro porque os valores necessários para calcular a área já são parte dos atributos do objeto.\n\nO tipo do valor de retorno do método `obterArea` é explicitamente definido como `number`, mas poderia ser omitido e o compilador deduziria o tipo ao analizar a expressão de retorno.\n\nVamos testar o método `obterArea`:\n\n```\nlet retang: Forma = new Forma(\"Retangulo\", 3, 4);\nconsole.log(`A area do retângulo é ${retang.obterArea()}`);\n```\n\nSaída:\n\n```\nA area do retângulo é 12\n```\n\nPara não expor os atributos `largura` e `altura` do objeto ao mundo de fora, que tal redefinir essas propriedades com acesso privado?\n\n```\nclass Forma {\n // ...\n private largura: number;\n private altura: number;\n // ...\n}\n```\n\nDessa maneira, se o usuário do objeto tentar referenciar `retang.largura`, o compilador irá emitir um erro dizendo que o acesso não é permitido devido a propriedade ser privada:\n\n```\nProperty 'largura' is private and only accessible within class 'Forma'.\n```\n\nPara aprender mais sobre o TypeScript, assista às aulas do NBK Mundo Tech:\n\nhttps://www.youtube.com/watch?v=czp3QV55v1k&list=PLUbb2i4BuuzBcH1iS242xjztUwMI4erNb\n\nNos vemos lá!",
"json_metadata": "{\"tags\":[\"typescript\",\"classes\",\"pt\"],\"image\":[\"https://img.youtube.com/vi/czp3QV55v1k/0.jpg\"],\"links\":[\"https://www.youtube.com/watch?v=czp3QV55v1k&list=PLUbb2i4BuuzBcH1iS242xjztUwMI4erNb\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
"parent_author": "",
"parent_permlink": "typescript",
"permlink": "uma-breve-introducao-a-classes-no-typescript",
"title": "Uma Breve Introdução a Classes no TypeScript"
}
],
"op_in_trx": 0,
"timestamp": "2019-06-04T15:21:39",
"trx_id": "fbff022377b4d0ed6bd71496d77bc0b2cb648aea",
"trx_in_block": 4,
"virtual_op": 0
}menkarbitsent 0.001 STEEM to @nbkmundotech- "Obrigado por postar! Voce ira receber 0.001 STEEM por divulgar o seu conteudo usando a tag #pt"2019/06/03 16:33:06
menkarbitsent 0.001 STEEM to @nbkmundotech- "Obrigado por postar! Voce ira receber 0.001 STEEM por divulgar o seu conteudo usando a tag #pt"
2019/06/03 16:33:06
| amount | 0.001 STEEM |
| from | menkarbit |
| memo | Obrigado por postar! Voce ira receber 0.001 STEEM por divulgar o seu conteudo usando a tag #pt |
| to | nbkmundotech |
| Transaction Info | Block #33480560/Trx bdfb52f447682dd0cf63ee725b16521f305af0d4 |
View Raw JSON Data
{
"block": 33480560,
"op": [
"transfer",
{
"amount": "0.001 STEEM",
"from": "menkarbit",
"memo": "Obrigado por postar! Voce ira receber 0.001 STEEM por divulgar o seu conteudo usando a tag #pt",
"to": "nbkmundotech"
}
],
"op_in_trx": 0,
"timestamp": "2019-06-03T16:33:06",
"trx_id": "bdfb52f447682dd0cf63ee725b16521f305af0d4",
"trx_in_block": 9,
"virtual_op": 0
}nbkmundotechpublished a new post: como-definir-o-tipo-de-uma-variavel-que-armazena-uma-funcao-no-typescript2019/06/03 16:16:51
nbkmundotechpublished a new post: como-definir-o-tipo-de-uma-variavel-que-armazena-uma-funcao-no-typescript
2019/06/03 16:16:51
| author | nbkmundotech |
| body | No JavaScript, temos funções nomeadas e funções anônimas. O segundo tipo pode ser armazenado em uma variável, como no exemplo abaixo, já escrito com anotações de tipo do TypeScript: ``` let minhaFuncao = function(a: string, b: number): string { return `O valor da string é ${a} e o valor do numero é ${b}`; }; ``` Variáveis no TypeScript podem ter uma anotação de tipo, por exemplo: ``` let meuNumero: number = 48; ``` A expressão acima declara uma variável do tipo `number` com o valor 48. Podemos adicionar o tipo de uma variável que armazena uma função da seguinte maneira, usando o nosso exemplo anterior: ``` let minhaFuncao: (x: string, y: number) => string = function(a: string, b: number): string { return `O valor da string é ${a} e o valor do numero é ${b}`; }; ``` No exemplo acima, o tipo da variável `minhaFuncao` é a assinatura de função `(x: string, y: number) => string`. Os nomes dos parâmetros foram mudados de propósito para você saber que o que importam são os tipos e não os nomes. O nome da variável na assinatura pode ser diferente da definição no lado direito do igual, mas os tipos não podem ser diferentes. Note que separamos os parâmetros de entrada do tipo do valor de saída com a seta `=>`. No exemplo, temos como parâmetros da função o `x` e `y`, de tipo `string` e `number`, respectivamente. O tipo do valor de retorno e declarado no lado direito da seta `=>`, nesse caso uma `string`. Declarar a assinatura do tipo da variável as vezes pode deixar a linha muito longa, então podemos aproveitar a inferência de tipo do compilador do TypeScript. Às vezes definindo de um lado da expressão basta para que o compilador deduza os tipos do outro lado. Para aprender mais sobre o TypeScript, assista às aulas do NBK Mundo Tech: https://www.youtube.com/watch?v=jOJYBcjJ0CE&list=PLUbb2i4BuuzBcH1iS242xjztUwMI4erNb Nos vemos lá! |
| json metadata | {"tags":["typescript","tipo","variavel","funcao","pt"],"image":["https://img.youtube.com/vi/jOJYBcjJ0CE/0.jpg"],"links":["https://www.youtube.com/watch?v=jOJYBcjJ0CE&list=PLUbb2i4BuuzBcH1iS242xjztUwMI4erNb"],"app":"steemit/0.1","format":"markdown"} |
| parent author | |
| parent permlink | typescript |
| permlink | como-definir-o-tipo-de-uma-variavel-que-armazena-uma-funcao-no-typescript |
| title | Como Definir o Tipo de uma Variável que Armazena uma Função no TypeScript |
| Transaction Info | Block #33480235/Trx 95e767b808734f904914f838f3b4cf98b24e2bbb |
View Raw JSON Data
{
"block": 33480235,
"op": [
"comment",
{
"author": "nbkmundotech",
"body": "No JavaScript, temos funções nomeadas e funções anônimas. O segundo tipo pode ser armazenado em uma variável, como no exemplo abaixo, já escrito com anotações de tipo do TypeScript:\n\n```\nlet minhaFuncao = function(a: string, b: number): string {\n return `O valor da string é ${a} e o valor do numero é ${b}`;\n};\n```\n\nVariáveis no TypeScript podem ter uma anotação de tipo, por exemplo:\n\n```\nlet meuNumero: number = 48;\n```\n\nA expressão acima declara uma variável do tipo `number` com o valor 48.\n\nPodemos adicionar o tipo de uma variável que armazena uma função da seguinte maneira, usando o nosso exemplo anterior:\n\n```\nlet minhaFuncao: (x: string, y: number) => string = \nfunction(a: string, b: number): string {\n return `O valor da string é ${a} e o valor do numero é ${b}`;\n};\n```\n\nNo exemplo acima, o tipo da variável `minhaFuncao` é a assinatura de função `(x: string, y: number) => string`.\n\nOs nomes dos parâmetros foram mudados de propósito para você saber que o que importam são os tipos e não os nomes. O nome da variável na assinatura pode ser diferente da definição no lado direito do igual, mas os tipos não podem ser diferentes.\n\nNote que separamos os parâmetros de entrada do tipo do valor de saída com a seta `=>`. No exemplo, temos como parâmetros da função o `x` e `y`, de tipo `string` e `number`, respectivamente. O tipo do valor de retorno e declarado no lado direito da seta `=>`, nesse caso uma `string`.\n\nDeclarar a assinatura do tipo da variável as vezes pode deixar a linha muito longa, então podemos aproveitar a inferência de tipo do compilador do TypeScript. Às vezes definindo de um lado da expressão basta para que o compilador deduza os tipos do outro lado.\n\nPara aprender mais sobre o TypeScript, assista às aulas do NBK Mundo Tech:\n\nhttps://www.youtube.com/watch?v=jOJYBcjJ0CE&list=PLUbb2i4BuuzBcH1iS242xjztUwMI4erNb\n\nNos vemos lá!",
"json_metadata": "{\"tags\":[\"typescript\",\"tipo\",\"variavel\",\"funcao\",\"pt\"],\"image\":[\"https://img.youtube.com/vi/jOJYBcjJ0CE/0.jpg\"],\"links\":[\"https://www.youtube.com/watch?v=jOJYBcjJ0CE&list=PLUbb2i4BuuzBcH1iS242xjztUwMI4erNb\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
"parent_author": "",
"parent_permlink": "typescript",
"permlink": "como-definir-o-tipo-de-uma-variavel-que-armazena-uma-funcao-no-typescript",
"title": "Como Definir o Tipo de uma Variável que Armazena uma Função no TypeScript"
}
],
"op_in_trx": 0,
"timestamp": "2019-06-03T16:16:51",
"trx_id": "95e767b808734f904914f838f3b4cf98b24e2bbb",
"trx_in_block": 9,
"virtual_op": 0
}menkarbitsent 0.001 STEEM to @nbkmundotech- "Obrigado por postar! Voce ira receber 0.001 STEEM por divulgar o seu conteudo usando a tag #pt"2019/06/03 04:44:21
menkarbitsent 0.001 STEEM to @nbkmundotech- "Obrigado por postar! Voce ira receber 0.001 STEEM por divulgar o seu conteudo usando a tag #pt"
2019/06/03 04:44:21
| amount | 0.001 STEEM |
| from | menkarbit |
| memo | Obrigado por postar! Voce ira receber 0.001 STEEM por divulgar o seu conteudo usando a tag #pt |
| to | nbkmundotech |
| Transaction Info | Block #33466401/Trx 960c06c3a5855b860a60e7e080e2271b17eef75f |
View Raw JSON Data
{
"block": 33466401,
"op": [
"transfer",
{
"amount": "0.001 STEEM",
"from": "menkarbit",
"memo": "Obrigado por postar! Voce ira receber 0.001 STEEM por divulgar o seu conteudo usando a tag #pt",
"to": "nbkmundotech"
}
],
"op_in_trx": 0,
"timestamp": "2019-06-03T04:44:21",
"trx_id": "960c06c3a5855b860a60e7e080e2271b17eef75f",
"trx_in_block": 19,
"virtual_op": 0
}nbkmundotechpublished a new post: como-adicionar-o-tipo-de-retorno-de-uma-funcao-em-typescript2019/06/03 04:28:09
nbkmundotechpublished a new post: como-adicionar-o-tipo-de-retorno-de-uma-funcao-em-typescript
2019/06/03 04:28:09
| author | nbkmundotech |
| body | Considere uma simples função que leva dois números como argumento. O valor de retorno é a multiplicação dos dois números: ``` function multiplicar(a: number, b: number) { return a * b; } ``` O compilador do TypeScript é inteligente e deduz o tipo do valor de retorno da função acima baseado na expressão de retorno. Mas se você quiser definir o tipo do valor de retorno explicitamente, adicione os dois pontos e o tipo logo após a lista de parâmetros entre os parênteses: ``` function multiplicar(a: number, b: number): number { return a * b; } ``` No exemplo acima, a expressão `a * b` resulta em um valor do tipo `number`, o mesmo tipo definido explicitamente na parte de retorno da assinatura da função. Para aprender mais sobre o TypeScript, assista às aulas do NBK Mundo Tech: https://www.youtube.com/watch?v=jOJYBcjJ0CE&list=PLUbb2i4BuuzBcH1iS242xjztUwMI4erNb Nos vemos lá! |
| json metadata | {"tags":["typescript","tipo","retorno","funcao","pt"],"image":["https://img.youtube.com/vi/jOJYBcjJ0CE/0.jpg"],"links":["https://www.youtube.com/watch?v=jOJYBcjJ0CE&list=PLUbb2i4BuuzBcH1iS242xjztUwMI4erNb"],"app":"steemit/0.1","format":"markdown"} |
| parent author | |
| parent permlink | typescript |
| permlink | como-adicionar-o-tipo-de-retorno-de-uma-funcao-em-typescript |
| title | Como Adicionar o Tipo de Retorno de uma Função em TypeScript |
| Transaction Info | Block #33466077/Trx 7ef749d4dc09fd9883dcc2f3379ae0785ce85a2f |
View Raw JSON Data
{
"block": 33466077,
"op": [
"comment",
{
"author": "nbkmundotech",
"body": "Considere uma simples função que leva dois números como argumento. O valor de retorno é a multiplicação dos dois números:\n\n```\nfunction multiplicar(a: number, b: number) {\n return a * b;\n}\n```\n\nO compilador do TypeScript é inteligente e deduz o tipo do valor de retorno da função acima baseado na expressão de retorno. Mas se você quiser definir o tipo do valor de retorno explicitamente, adicione os dois pontos e o tipo logo após a lista de parâmetros entre os parênteses:\n\n```\nfunction multiplicar(a: number, b: number): number {\n return a * b;\n}\n```\n\nNo exemplo acima, a expressão `a * b` resulta em um valor do tipo `number`, o mesmo tipo definido explicitamente na parte de retorno da assinatura da função.\n\nPara aprender mais sobre o TypeScript, assista às aulas do NBK Mundo Tech:\n\nhttps://www.youtube.com/watch?v=jOJYBcjJ0CE&list=PLUbb2i4BuuzBcH1iS242xjztUwMI4erNb\n\nNos vemos lá!",
"json_metadata": "{\"tags\":[\"typescript\",\"tipo\",\"retorno\",\"funcao\",\"pt\"],\"image\":[\"https://img.youtube.com/vi/jOJYBcjJ0CE/0.jpg\"],\"links\":[\"https://www.youtube.com/watch?v=jOJYBcjJ0CE&list=PLUbb2i4BuuzBcH1iS242xjztUwMI4erNb\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
"parent_author": "",
"parent_permlink": "typescript",
"permlink": "como-adicionar-o-tipo-de-retorno-de-uma-funcao-em-typescript",
"title": "Como Adicionar o Tipo de Retorno de uma Função em TypeScript"
}
],
"op_in_trx": 0,
"timestamp": "2019-06-03T04:28:09",
"trx_id": "7ef749d4dc09fd9883dcc2f3379ae0785ce85a2f",
"trx_in_block": 15,
"virtual_op": 0
}xmauron3upvoted (100.00%) @nbkmundotech / o-construtor-protegido-no-typescript2019/06/03 00:02:51
xmauron3upvoted (100.00%) @nbkmundotech / o-construtor-protegido-no-typescript
2019/06/03 00:02:51
| author | nbkmundotech |
| permlink | o-construtor-protegido-no-typescript |
| voter | xmauron3 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #33460778/Trx b43450ead1c266c407301311f07cefb1d4a848e9 |
View Raw JSON Data
{
"block": 33460778,
"op": [
"vote",
{
"author": "nbkmundotech",
"permlink": "o-construtor-protegido-no-typescript",
"voter": "xmauron3",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2019-06-03T00:02:51",
"trx_id": "b43450ead1c266c407301311f07cefb1d4a848e9",
"trx_in_block": 29,
"virtual_op": 0
}menkarbitsent 0.001 STEEM to @nbkmundotech- "Obrigado por postar! Voce ira receber 0.001 STEEM por divulgar o seu conteudo usando a tag #pt"2019/06/02 14:01:12
menkarbitsent 0.001 STEEM to @nbkmundotech- "Obrigado por postar! Voce ira receber 0.001 STEEM por divulgar o seu conteudo usando a tag #pt"
2019/06/02 14:01:12
| amount | 0.001 STEEM |
| from | menkarbit |
| memo | Obrigado por postar! Voce ira receber 0.001 STEEM por divulgar o seu conteudo usando a tag #pt |
| to | nbkmundotech |
| Transaction Info | Block #33448756/Trx 0ae97931239c09e0efb4505f5e44cea1f51f8afb |
View Raw JSON Data
{
"block": 33448756,
"op": [
"transfer",
{
"amount": "0.001 STEEM",
"from": "menkarbit",
"memo": "Obrigado por postar! Voce ira receber 0.001 STEEM por divulgar o seu conteudo usando a tag #pt",
"to": "nbkmundotech"
}
],
"op_in_trx": 0,
"timestamp": "2019-06-02T14:01:12",
"trx_id": "0ae97931239c09e0efb4505f5e44cea1f51f8afb",
"trx_in_block": 5,
"virtual_op": 0
}nbkmundotechpublished a new post: o-construtor-protegido-no-typescript2019/06/02 13:45:06
nbkmundotechpublished a new post: o-construtor-protegido-no-typescript
2019/06/02 13:45:06
| author | nbkmundotech |
| body | Considere um exemplo de herança entre duas classes: a base classe Veiculo e a classe derivada Carro: ``` class Veiculo { constructor() { } } class Carro extends Veiculo { constructor() { super(); } } ``` Os construtores foram definidos em branco para focarmos no assunto de construtores protegidos. Considere as seguintes expressoes: ``` let umVeiculo: Veiculo; umVeiculo = new Carro(); ``` A variável `umVeiculo` é declarada com tipo `Veiculo`. Podemos atribuir um objeto do tipo `Carro` à essa variàvel porque um `Carro` é um `Veiculo`. Agora vamos ver outra expressão: ``` let veiculo: Veiculo = new Veiculo(); ``` Nesse caso criamos um objeto usando a base classe `Veiculo`. Mas há situações em que não queremos permitir a instanciação de objetos do tipo da base classe. Isto é, só queremos permitir a construção de instância de objetos cuja classe é `Carro`, `Moto`, etc. A maneira de resolver o problema é através da palavra chave **protected**. Basta adicionar à esquerda da assinatura do **constructor** da base classe: ``` class Veiculo { protected constructor() { } } ``` Agora, a seguinte expressão irá causar um erro: ``` let veiculo: Veiculo = new Veiculo(); ``` ``` Constructor of class 'Veiculo' is protected and only accessible within the class declaration. ``` Com a adição de `protected` antes da assinatura do `constructor()`, não é mais possível criar objetos baseados diretamente na base classe Veiculo. Em vez disso, o usuário tem criar objetos a partir de classes derivadas de `Veiculo`. No caso acima, temos que usar `new Carro()`. Para aprender mais sobre o TypeScript, assista às aulas do NBK Mundo Tech: https://www.youtube.com/watch?v=jOJYBcjJ0CE&list=PLUbb2i4BuuzBcH1iS242xjztUwMI4erNb Nos vemos lá! |
| json metadata | {"tags":["typescript","construtor","protegido","protected","pt"],"image":["https://img.youtube.com/vi/jOJYBcjJ0CE/0.jpg"],"links":["https://www.youtube.com/watch?v=jOJYBcjJ0CE&list=PLUbb2i4BuuzBcH1iS242xjztUwMI4erNb"],"app":"steemit/0.1","format":"markdown"} |
| parent author | |
| parent permlink | typescript |
| permlink | o-construtor-protegido-no-typescript |
| title | O Construtor Protegido no TypeScript |
| Transaction Info | Block #33448434/Trx 41db5a706b04f9277aafd98373987f38642d54f0 |
View Raw JSON Data
{
"block": 33448434,
"op": [
"comment",
{
"author": "nbkmundotech",
"body": "Considere um exemplo de herança entre duas classes: a base classe Veiculo e a classe derivada Carro:\n\n```\nclass Veiculo {\n constructor() {\n }\n}\n\nclass Carro extends Veiculo {\n constructor() {\n super();\n }\n}\n```\n\nOs construtores foram definidos em branco para focarmos no assunto de construtores protegidos.\n\nConsidere as seguintes expressoes:\n\n```\nlet umVeiculo: Veiculo;\numVeiculo = new Carro();\n```\n\nA variável `umVeiculo` é declarada com tipo `Veiculo`. Podemos atribuir um objeto do tipo `Carro` à essa variàvel porque um `Carro` é um `Veiculo`.\n\nAgora vamos ver outra expressão:\n\n```\nlet veiculo: Veiculo = new Veiculo();\n```\n\nNesse caso criamos um objeto usando a base classe `Veiculo`. Mas há situações em que não queremos permitir a instanciação de objetos do tipo da base classe. Isto é, só queremos permitir a construção de instância de objetos cuja classe é `Carro`, `Moto`, etc.\n\nA maneira de resolver o problema é através da palavra chave **protected**. Basta adicionar à esquerda da assinatura do **constructor** da base classe:\n\n```\nclass Veiculo {\n protected constructor() {\n }\n}\n```\n\nAgora, a seguinte expressão irá causar um erro:\n\n```\nlet veiculo: Veiculo = new Veiculo();\n```\n\n```\nConstructor of class 'Veiculo' is protected\nand only accessible within the class declaration.\n```\n\nCom a adição de `protected` antes da assinatura do `constructor()`, não é mais possível criar objetos baseados diretamente na base classe Veiculo. Em vez disso, o usuário tem criar objetos a partir de classes derivadas de `Veiculo`. No caso acima, temos que usar `new Carro()`.\n\nPara aprender mais sobre o TypeScript, assista às aulas do NBK Mundo Tech:\n\nhttps://www.youtube.com/watch?v=jOJYBcjJ0CE&list=PLUbb2i4BuuzBcH1iS242xjztUwMI4erNb\n\nNos vemos lá!",
"json_metadata": "{\"tags\":[\"typescript\",\"construtor\",\"protegido\",\"protected\",\"pt\"],\"image\":[\"https://img.youtube.com/vi/jOJYBcjJ0CE/0.jpg\"],\"links\":[\"https://www.youtube.com/watch?v=jOJYBcjJ0CE&list=PLUbb2i4BuuzBcH1iS242xjztUwMI4erNb\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
"parent_author": "",
"parent_permlink": "typescript",
"permlink": "o-construtor-protegido-no-typescript",
"title": "O Construtor Protegido no TypeScript"
}
],
"op_in_trx": 0,
"timestamp": "2019-06-02T13:45:06",
"trx_id": "41db5a706b04f9277aafd98373987f38642d54f0",
"trx_in_block": 27,
"virtual_op": 0
}2019/06/02 02:47:57
2019/06/02 02:47:57
| author | nbkmundotech |
| permlink | como-adicionar-anotacoes-de-tipo-nos-parametros-de-uma-funcao-em-typescript |
| voter | hozn4ukhlytriwc |
| weight | 1500 (15.00%) |
| Transaction Info | Block #33435307/Trx b1e75ed4fdc2efc3359ccbdf0580a420ff7e9320 |
View Raw JSON Data
{
"block": 33435307,
"op": [
"vote",
{
"author": "nbkmundotech",
"permlink": "como-adicionar-anotacoes-de-tipo-nos-parametros-de-uma-funcao-em-typescript",
"voter": "hozn4ukhlytriwc",
"weight": 1500
}
],
"op_in_trx": 0,
"timestamp": "2019-06-02T02:47:57",
"trx_id": "b1e75ed4fdc2efc3359ccbdf0580a420ff7e9320",
"trx_in_block": 34,
"virtual_op": 0
}menkarbitsent 0.001 STEEM to @nbkmundotech- "Obrigado por postar! Voce ira receber 0.001 STEEM por divulgar o seu conteudo usando a tag #pt"2019/06/02 02:15:45
menkarbitsent 0.001 STEEM to @nbkmundotech- "Obrigado por postar! Voce ira receber 0.001 STEEM por divulgar o seu conteudo usando a tag #pt"
2019/06/02 02:15:45
| amount | 0.001 STEEM |
| from | menkarbit |
| memo | Obrigado por postar! Voce ira receber 0.001 STEEM por divulgar o seu conteudo usando a tag #pt |
| to | nbkmundotech |
| Transaction Info | Block #33434663/Trx 294df6e2752b40d34369902a727c06e4fa4a6b93 |
View Raw JSON Data
{
"block": 33434663,
"op": [
"transfer",
{
"amount": "0.001 STEEM",
"from": "menkarbit",
"memo": "Obrigado por postar! Voce ira receber 0.001 STEEM por divulgar o seu conteudo usando a tag #pt",
"to": "nbkmundotech"
}
],
"op_in_trx": 0,
"timestamp": "2019-06-02T02:15:45",
"trx_id": "294df6e2752b40d34369902a727c06e4fa4a6b93",
"trx_in_block": 30,
"virtual_op": 0
}nbkmundotechpublished a new post: como-adicionar-anotacoes-de-tipo-nos-parametros-de-uma-funcao-em-typescript2019/06/02 02:00:27
nbkmundotechpublished a new post: como-adicionar-anotacoes-de-tipo-nos-parametros-de-uma-funcao-em-typescript
2019/06/02 02:00:27
| author | nbkmundotech |
| body | Uma função trivial para adicionar dois números pode ser escrita da seguinte maneira em JavaScript: ``` function somar(a, b) { return a + b; } ``` Certos bugs como o seguinte podem às vezes acontecer: ``` let soma = somar("3", 5); console.log(soma); ``` O script acima imprime o seguinte: ``` 35 ``` Observe que 3 + 5 deveria ser 8, mas devido ao primeiro argumento não ser o número 3, mas uma string que contém o caractere "3", obtemos um resultado incorreto. Isto porquê no JavaScript uma `string` + `number` irá causar uma operação de concatenação, cujo resultado no exemplo é "35". Questões como essas podem ser detectadas facilmente no TypeScript na hora de compilação, sem termos que esperar até a hora de execução para verificar. Vamos adicionar uma anotação de tipo para cada parâmetro da função em exemplo: ``` function somar(a: number, b: number) { return a + b; } ``` Para definir o tipo do parâmetro, escreve-se dois pontos seguidos do tipo. No exemplo acima, o requiremento é que cada parâmetro seja um número, `number`. Agora, ao compilar a função acima junto a chamada de `somar` abaixo, o compilador irá indicar um erro. ``` let soma = somar("3", 5); console.log(soma); ``` ``` Argument of type '"3"' is not assignable to parameter of type 'number'. ``` Para consertar o problema, basta passar um número no primeiro argumento, sem aspas: ``` let soma = somar(3, 5); ``` Saída da Execução: ``` 8 ``` Um dos grandes benefícios do TypeScript é poder detectar códigos problemáticos cedo, na etapa de compilação. Isso previne ter que rodar o script e testar na hora de execução. É importante ressaltar que se escrevermos código diretamente em JavaScript, sem o passo da compilação do TypeScript, há uma chance do erro não ser detectado. Isso porque ainda que o script execute sem nenhum erro explícito, o JavaScript normal não tem cheque de tipos e, do seu ponto de vista, pensa que tudo está correto. Para aprender mais sobre TypeScript, assista às aulas do NBK Mundo Tech: https://www.youtube.com/watch?v=czp3QV55v1k&list=PLUbb2i4BuuzBcH1iS242xjztUwMI4erNb Nos vemos lá! |
| json metadata | {"tags":["typescript","anotacao","tipo","funcao","pt"],"image":["https://img.youtube.com/vi/czp3QV55v1k/0.jpg"],"links":["https://www.youtube.com/watch?v=czp3QV55v1k&list=PLUbb2i4BuuzBcH1iS242xjztUwMI4erNb"],"app":"steemit/0.1","format":"markdown"} |
| parent author | |
| parent permlink | typescript |
| permlink | como-adicionar-anotacoes-de-tipo-nos-parametros-de-uma-funcao-em-typescript |
| title | Como Adicionar Anotações de Tipo nos Parâmetros de uma Função em TypeScript |
| Transaction Info | Block #33434357/Trx 0748ad9b33414a221efaf8c00e3331d1298af1a6 |
View Raw JSON Data
{
"block": 33434357,
"op": [
"comment",
{
"author": "nbkmundotech",
"body": "Uma função trivial para adicionar dois números pode ser escrita da seguinte maneira em JavaScript:\n\n```\nfunction somar(a, b) {\n return a + b;\n}\n```\n\nCertos bugs como o seguinte podem às vezes acontecer:\n\n```\nlet soma = somar(\"3\", 5);\nconsole.log(soma);\n```\n\nO script acima imprime o seguinte:\n\n```\n35\n```\n\nObserve que 3 + 5 deveria ser 8, mas devido ao primeiro argumento não ser o número 3, mas uma string que contém o caractere \"3\", obtemos um resultado incorreto. Isto porquê no JavaScript uma `string` + `number` irá causar uma operação de concatenação, cujo resultado no exemplo é \"35\".\n\nQuestões como essas podem ser detectadas facilmente no TypeScript na hora de compilação, sem termos que esperar até a hora de execução para verificar.\n\nVamos adicionar uma anotação de tipo para cada parâmetro da função em exemplo:\n\n```\nfunction somar(a: number, b: number) {\n return a + b;\n}\n```\n\nPara definir o tipo do parâmetro, escreve-se dois pontos seguidos do tipo. No exemplo acima, o requiremento é que cada parâmetro seja um número, `number`.\n\nAgora, ao compilar a função acima junto a chamada de `somar` abaixo, o compilador irá indicar um erro.\n\n```\nlet soma = somar(\"3\", 5);\nconsole.log(soma);\n```\n\n```\nArgument of type '\"3\"' is not assignable to parameter of type 'number'.\n```\n\nPara consertar o problema, basta passar um número no primeiro argumento, sem aspas:\n\n```\nlet soma = somar(3, 5);\n```\n\nSaída da Execução:\n\n```\n8\n```\n\nUm dos grandes benefícios do TypeScript é poder detectar códigos problemáticos cedo, na etapa de compilação. Isso previne ter que rodar o script e testar na hora de execução.\n\nÉ importante ressaltar que se escrevermos código diretamente em JavaScript, sem o passo da compilação do TypeScript, há uma chance do erro não ser detectado. Isso porque ainda que o script execute sem nenhum erro explícito, o JavaScript normal não tem cheque de tipos e, do seu ponto de vista, pensa que tudo está correto.\n\nPara aprender mais sobre TypeScript, assista às aulas do NBK Mundo Tech:\n\nhttps://www.youtube.com/watch?v=czp3QV55v1k&list=PLUbb2i4BuuzBcH1iS242xjztUwMI4erNb\n\nNos vemos lá!",
"json_metadata": "{\"tags\":[\"typescript\",\"anotacao\",\"tipo\",\"funcao\",\"pt\"],\"image\":[\"https://img.youtube.com/vi/czp3QV55v1k/0.jpg\"],\"links\":[\"https://www.youtube.com/watch?v=czp3QV55v1k&list=PLUbb2i4BuuzBcH1iS242xjztUwMI4erNb\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
"parent_author": "",
"parent_permlink": "typescript",
"permlink": "como-adicionar-anotacoes-de-tipo-nos-parametros-de-uma-funcao-em-typescript",
"title": "Como Adicionar Anotações de Tipo nos Parâmetros de uma Função em TypeScript"
}
],
"op_in_trx": 0,
"timestamp": "2019-06-02T02:00:27",
"trx_id": "0748ad9b33414a221efaf8c00e3331d1298af1a6",
"trx_in_block": 32,
"virtual_op": 0
}meedoupvoted (100.00%) @nbkmundotech / golang-go-hash-map-pt2019/05/12 19:56:03
meedoupvoted (100.00%) @nbkmundotech / golang-go-hash-map-pt
2019/05/12 19:56:03
| author | nbkmundotech |
| permlink | golang-go-hash-map-pt |
| voter | meedo |
| weight | 10000 (100.00%) |
| Transaction Info | Block #32851522/Trx 22468e05c9bb137a361534c9dadfd5fa224f463d |
View Raw JSON Data
{
"block": 32851522,
"op": [
"vote",
{
"author": "nbkmundotech",
"permlink": "golang-go-hash-map-pt",
"voter": "meedo",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2019-05-12T19:56:03",
"trx_id": "22468e05c9bb137a361534c9dadfd5fa224f463d",
"trx_in_block": 31,
"virtual_op": 0
}paredaoupvoted (100.00%) @nbkmundotech / golang-go-hash-map-pt2019/05/12 18:44:03
paredaoupvoted (100.00%) @nbkmundotech / golang-go-hash-map-pt
2019/05/12 18:44:03
| author | nbkmundotech |
| permlink | golang-go-hash-map-pt |
| voter | paredao |
| weight | 10000 (100.00%) |
| Transaction Info | Block #32850083/Trx bf0805386a1aaa7a4ef9ae4cd057b07433b74162 |
View Raw JSON Data
{
"block": 32850083,
"op": [
"vote",
{
"author": "nbkmundotech",
"permlink": "golang-go-hash-map-pt",
"voter": "paredao",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2019-05-12T18:44:03",
"trx_id": "bf0805386a1aaa7a4ef9ae4cd057b07433b74162",
"trx_in_block": 22,
"virtual_op": 0
}nbkmundotechpublished a new post: golang-go-hash-map-pt2019/05/12 18:05:45
nbkmundotechpublished a new post: golang-go-hash-map-pt
2019/05/12 18:05:45
| author | nbkmundotech |
| body | A estrutura que associa uma chave à um valor na linguagem Golang é chamada de *Map*. O tipo é formado da seguinte maneira: ``` map[TIPO_DA_CHAVE]TIPO_DO_VALOR ``` Por exemplo, para criar um mapa de `string` para `int`: ``` map[string]int ``` A construção acima significa que o `map` aceita como chave uma **string**; essa string é associada à um valor do tipo **int**. Imagine que em uma escola, os alunos fazem uma prova e recebem uma nota como resultado. Podemos associar o nome de cada aluno ao valor de sua nota dessa maneira: ``` var notas map[string]int notas = make(map[string]int) notas["Ana"] = 9 notas["Maria"] = 10 // e assim por diante... ``` A primeira linha do exemplo acima declara uma variável para armazenar um map de `string` para `int`. Logo em seguida, criamos o map usando a função **make**. Vale a pena lembrar que `make` também é usado para criar *slices* (fatias de *array*). Nesse caso, usamos o `make` para criar um map que associa uma `string` à um valor `int`. As linhas que seguem associam o nome de cada estudante ao valor da nota recebida na prova. A notação para adicionar ou atualizar um par de chave-valor em Golang é, em geral: ``` notas[CHAVE] = VALOR ``` Podemos também acessar o valor correspondente a chave assim: ``` fmt.Println(notas["Maria"]) // => 10 ``` Mas temos que tomar cuidado porque pode ser que a chave não exista no Map, em cujo caso o valor zero do tipo do valor associado é retornado: ``` fmt.Println(notas["Estudante Que Nao Existe"]) // => 0 ``` A chave mapeia para um valor do tipo `int`, cujo valor zero é `0`. Há uma maneira de checar se a chave existe antes se referenciar o seu valor. Para aprender mais sobre a estrutura Map na linguagem Golang, assista às aulas do NBK Mundo Tech: https://www.youtube.com/watch?v=Zp1AA6dDQZ4&list=PLUbb2i4BuuzCX8CLeArvx663_0a_hSguW |
| json metadata | {"tags":["golang","go","hash","map","pt"],"image":["https://img.youtube.com/vi/Zp1AA6dDQZ4/0.jpg"],"links":["https://www.youtube.com/watch?v=Zp1AA6dDQZ4&list=PLUbb2i4BuuzCX8CLeArvx663_0a_hSguW"],"app":"steemit/0.1","format":"markdown"} |
| parent author | |
| parent permlink | golang |
| permlink | golang-go-hash-map-pt |
| title | Como Criar uma Estrutura de Hash Map na Linguagem Golang |
| Transaction Info | Block #32849318/Trx 437e80bc19b82a9eff6672c7d1b899638a370fe1 |
View Raw JSON Data
{
"block": 32849318,
"op": [
"comment",
{
"author": "nbkmundotech",
"body": "A estrutura que associa uma chave à um valor na linguagem\nGolang é chamada de *Map*.\n\nO tipo é formado da seguinte maneira:\n\n```\nmap[TIPO_DA_CHAVE]TIPO_DO_VALOR\n```\n\nPor exemplo, para criar um mapa de `string` para `int`:\n\n```\nmap[string]int\n```\n\nA construção acima significa que o `map` aceita como chave uma **string**; essa string é associada à um valor do tipo **int**.\n\nImagine que em uma escola, os alunos fazem uma prova e recebem uma nota como resultado. Podemos associar o nome de cada aluno ao valor de sua nota dessa maneira:\n\n```\nvar notas map[string]int\nnotas = make(map[string]int)\n\nnotas[\"Ana\"] = 9\nnotas[\"Maria\"] = 10\n// e assim por diante...\n```\n\nA primeira linha do exemplo acima declara uma variável para armazenar um map de `string` para `int`.\n\nLogo em seguida, criamos o map usando a função **make**. Vale a pena lembrar que `make` também é usado para criar *slices* (fatias de *array*). Nesse caso, usamos o `make` para criar um map que associa uma `string` à um valor `int`.\n\nAs linhas que seguem associam o nome de cada estudante ao valor da nota recebida na prova. A notação para adicionar ou atualizar um par de chave-valor em Golang é, em geral:\n\n```\nnotas[CHAVE] = VALOR\n```\n\nPodemos também acessar o valor correspondente a chave assim:\n\n```\nfmt.Println(notas[\"Maria\"]) // => 10\n```\n\nMas temos que tomar cuidado porque pode ser que a chave não exista no Map, em cujo caso o valor zero do tipo do valor associado é retornado:\n\n```\nfmt.Println(notas[\"Estudante Que Nao Existe\"]) // => 0\n```\n\nA chave mapeia para um valor do tipo `int`, cujo valor zero é `0`.\n\nHá uma maneira de checar se a chave existe antes se referenciar o seu valor. Para aprender mais sobre a estrutura Map na linguagem Golang, assista às aulas do NBK Mundo Tech:\n\nhttps://www.youtube.com/watch?v=Zp1AA6dDQZ4&list=PLUbb2i4BuuzCX8CLeArvx663_0a_hSguW",
"json_metadata": "{\"tags\":[\"golang\",\"go\",\"hash\",\"map\",\"pt\"],\"image\":[\"https://img.youtube.com/vi/Zp1AA6dDQZ4/0.jpg\"],\"links\":[\"https://www.youtube.com/watch?v=Zp1AA6dDQZ4&list=PLUbb2i4BuuzCX8CLeArvx663_0a_hSguW\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
"parent_author": "",
"parent_permlink": "golang",
"permlink": "golang-go-hash-map-pt",
"title": "Como Criar uma Estrutura de Hash Map na Linguagem Golang"
}
],
"op_in_trx": 0,
"timestamp": "2019-05-12T18:05:45",
"trx_id": "437e80bc19b82a9eff6672c7d1b899638a370fe1",
"trx_in_block": 9,
"virtual_op": 0
}nbkmundotechpublished a new post: golang-go-hash-map-pt2019/05/12 18:05:18
nbkmundotechpublished a new post: golang-go-hash-map-pt
2019/05/12 18:05:18
| author | nbkmundotech |
| body | A estrutura que associa uma chave à um valor na linguagem Golang é chamada de *Map*. O tipo é formado da seguinte maneira: ``` map[TIPO_DA_CHAVE]TIPO_DO_VALOR ``` Por exemplo, para criar um mapa de `string` para `int`: ``` map[string]int ``` A construção acima significa que o `map` aceita como chave uma **string**; essa string é associada à um valor do tipo **int**. Imagine que em uma escola, os alunos fazem uma prova e recebem uma nota como resultado. Podemos associar o nome de cada aluno ao valor de sua nota dessa maneira: ``` var notas map[string]int notas = make(map[string]int) notas["Ana"] = 9 notas["Maria"] = 10 // e assim por diante... ``` A primeira linha do exemplo acima declara uma variável para armazenar um map de `string` para `int`. Logo em seguida, criamos o map usando a função **make**. Vale a pena lembrar que `make` também é usado para criar *slices* (fatias de *array*). Nesse caso, usamos o `make` para criar um map que associa uma `string` à um valor `int`. As linhas que seguem associam o nome de cada estudante ao valor da nota recebida na prova. A notação para adicionar ou atualizar um par de chave-valor em Golang é, em geral: ``` notas[CHAVE] = VALOR ``` Podemos também acessar o valor correspondente a chave assim: ``` fmt.Println(notas["Maria"]) // => 10 ``` Mas temos que tomar cuidado porque pode ser que a chave não exista no Map, em cujo caso o valor zero do tipo do valor associado é retornado: ``` fmt.Println(notas["Estudante Que Nao Existe"]) // => 0 ``` A chave mapeia para um valor do tipo `int`, cujo valor zero é `0`. Há uma maneira de checar se a chave existe antes se referenciar o seu valor. Para aprender mais sobre a estrutura Map na linguagem Golang, assista às aulas do NBK Mundo Tech: https://www.youtube.com/watch?v=Zp1AA6dDQZ4&list=PLUbb2i4BuuzCX8CLeArvx663_0a_hSguW |
| json metadata | {"tags":["golang","go","hash","map","pt"],"image":["https://img.youtube.com/vi/Zp1AA6dDQZ4/0.jpg"],"links":["https://www.youtube.com/watch?v=Zp1AA6dDQZ4&list=PLUbb2i4BuuzCX8CLeArvx663_0a_hSguW"],"app":"steemit/0.1","format":"markdown"} |
| parent author | |
| parent permlink | golang |
| permlink | golang-go-hash-map-pt |
| title | golang,go,hash,map,pt |
| Transaction Info | Block #32849309/Trx 694bd0450a63b100ebe95ab19313bb89d59d6d21 |
View Raw JSON Data
{
"block": 32849309,
"op": [
"comment",
{
"author": "nbkmundotech",
"body": "A estrutura que associa uma chave à um valor na linguagem\nGolang é chamada de *Map*.\n\nO tipo é formado da seguinte maneira:\n\n```\nmap[TIPO_DA_CHAVE]TIPO_DO_VALOR\n```\n\nPor exemplo, para criar um mapa de `string` para `int`:\n\n```\nmap[string]int\n```\n\nA construção acima significa que o `map` aceita como chave uma **string**; essa string é associada à um valor do tipo **int**.\n\nImagine que em uma escola, os alunos fazem uma prova e recebem uma nota como resultado. Podemos associar o nome de cada aluno ao valor de sua nota dessa maneira:\n\n```\nvar notas map[string]int\nnotas = make(map[string]int)\n\nnotas[\"Ana\"] = 9\nnotas[\"Maria\"] = 10\n// e assim por diante...\n```\n\nA primeira linha do exemplo acima declara uma variável para armazenar um map de `string` para `int`.\n\nLogo em seguida, criamos o map usando a função **make**. Vale a pena lembrar que `make` também é usado para criar *slices* (fatias de *array*). Nesse caso, usamos o `make` para criar um map que associa uma `string` à um valor `int`.\n\nAs linhas que seguem associam o nome de cada estudante ao valor da nota recebida na prova. A notação para adicionar ou atualizar um par de chave-valor em Golang é, em geral:\n\n```\nnotas[CHAVE] = VALOR\n```\n\nPodemos também acessar o valor correspondente a chave assim:\n\n```\nfmt.Println(notas[\"Maria\"]) // => 10\n```\n\nMas temos que tomar cuidado porque pode ser que a chave não exista no Map, em cujo caso o valor zero do tipo do valor associado é retornado:\n\n```\nfmt.Println(notas[\"Estudante Que Nao Existe\"]) // => 0\n```\n\nA chave mapeia para um valor do tipo `int`, cujo valor zero é `0`.\n\nHá uma maneira de checar se a chave existe antes se referenciar o seu valor. Para aprender mais sobre a estrutura Map na linguagem Golang, assista às aulas do NBK Mundo Tech:\n\nhttps://www.youtube.com/watch?v=Zp1AA6dDQZ4&list=PLUbb2i4BuuzCX8CLeArvx663_0a_hSguW",
"json_metadata": "{\"tags\":[\"golang\",\"go\",\"hash\",\"map\",\"pt\"],\"image\":[\"https://img.youtube.com/vi/Zp1AA6dDQZ4/0.jpg\"],\"links\":[\"https://www.youtube.com/watch?v=Zp1AA6dDQZ4&list=PLUbb2i4BuuzCX8CLeArvx663_0a_hSguW\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
"parent_author": "",
"parent_permlink": "golang",
"permlink": "golang-go-hash-map-pt",
"title": "golang,go,hash,map,pt"
}
],
"op_in_trx": 0,
"timestamp": "2019-05-12T18:05:18",
"trx_id": "694bd0450a63b100ebe95ab19313bb89d59d6d21",
"trx_in_block": 3,
"virtual_op": 0
}merlin7upvoted (0.01%) @nbkmundotech / como-definir-estruturas-struct-na-linguagem-golang2019/05/03 06:46:39
merlin7upvoted (0.01%) @nbkmundotech / como-definir-estruturas-struct-na-linguagem-golang
2019/05/03 06:46:39
| author | nbkmundotech |
| permlink | como-definir-estruturas-struct-na-linguagem-golang |
| voter | merlin7 |
| weight | 1 (0.01%) |
| Transaction Info | Block #32576679/Trx 9ac3c164e343806657b6cf9817578667c6ea841c |
View Raw JSON Data
{
"block": 32576679,
"op": [
"vote",
{
"author": "nbkmundotech",
"permlink": "como-definir-estruturas-struct-na-linguagem-golang",
"voter": "merlin7",
"weight": 1
}
],
"op_in_trx": 0,
"timestamp": "2019-05-03T06:46:39",
"trx_id": "9ac3c164e343806657b6cf9817578667c6ea841c",
"trx_in_block": 6,
"virtual_op": 0
}steemitboardupvoted (1.00%) @nbkmundotech / como-definir-estruturas-struct-na-linguagem-golang2019/05/03 06:46:15
steemitboardupvoted (1.00%) @nbkmundotech / como-definir-estruturas-struct-na-linguagem-golang
2019/05/03 06:46:15
| author | nbkmundotech |
| permlink | como-definir-estruturas-struct-na-linguagem-golang |
| voter | steemitboard |
| weight | 100 (1.00%) |
| Transaction Info | Block #32576671/Trx 74bbd7ab5a58fd2d3073511039a8b7703a031c71 |
View Raw JSON Data
{
"block": 32576671,
"op": [
"vote",
{
"author": "nbkmundotech",
"permlink": "como-definir-estruturas-struct-na-linguagem-golang",
"voter": "steemitboard",
"weight": 100
}
],
"op_in_trx": 0,
"timestamp": "2019-05-03T06:46:15",
"trx_id": "74bbd7ab5a58fd2d3073511039a8b7703a031c71",
"trx_in_block": 3,
"virtual_op": 0
}2019/05/03 06:46:12
2019/05/03 06:46:12
| author | steemitboard |
| body | Congratulations @nbkmundotech! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) : <table><tr><td>https://steemitimages.com/60x70/http://steemitboard.com/@nbkmundotech/posts.png?201905030602</td><td>You published more than 40 posts. Your next target is to reach 50 posts.</td></tr> </table> <sub>_You can view [your badges on your Steem Board](https://steemitboard.com/@nbkmundotech) and compare to others on the [Steem Ranking](http://steemitboard.com/ranking/index.php?name=nbkmundotech)_</sub> <sub>_If you no longer want to receive notifications, reply to this comment with the word_ `STOP`</sub> To support your work, I also upvoted your post! ###### [Vote for @Steemitboard as a witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1) to get one more award and increased upvotes! |
| json metadata | {"image":["https://steemitboard.com/img/notify.png"]} |
| parent author | nbkmundotech |
| parent permlink | como-definir-estruturas-struct-na-linguagem-golang |
| permlink | steemitboard-notify-nbkmundotech-20190503t064611000z |
| title | |
| Transaction Info | Block #32576670/Trx c30f95a69e21caf65413eb59622fb2b97bcaf054 |
View Raw JSON Data
{
"block": 32576670,
"op": [
"comment",
{
"author": "steemitboard",
"body": "Congratulations @nbkmundotech! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :\n\n<table><tr><td>https://steemitimages.com/60x70/http://steemitboard.com/@nbkmundotech/posts.png?201905030602</td><td>You published more than 40 posts. Your next target is to reach 50 posts.</td></tr>\n</table>\n\n<sub>_You can view [your badges on your Steem Board](https://steemitboard.com/@nbkmundotech) and compare to others on the [Steem Ranking](http://steemitboard.com/ranking/index.php?name=nbkmundotech)_</sub>\n<sub>_If you no longer want to receive notifications, reply to this comment with the word_ `STOP`</sub>\n\n\nTo support your work, I also upvoted your post!\n\n\n###### [Vote for @Steemitboard as a witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1) to get one more award and increased upvotes!",
"json_metadata": "{\"image\":[\"https://steemitboard.com/img/notify.png\"]}",
"parent_author": "nbkmundotech",
"parent_permlink": "como-definir-estruturas-struct-na-linguagem-golang",
"permlink": "steemitboard-notify-nbkmundotech-20190503t064611000z",
"title": ""
}
],
"op_in_trx": 0,
"timestamp": "2019-05-03T06:46:12",
"trx_id": "c30f95a69e21caf65413eb59622fb2b97bcaf054",
"trx_in_block": 1,
"virtual_op": 0
}2019/05/03 05:21:21
2019/05/03 05:21:21
| author | menkarbit |
| body | Obrigado por postar! Esse comentário é o novo bot que dará upvote 5% para todos os posts que usam a tag #pt. [Ainda não votou em mim como witness? Clique aqui e dê o seu voto! É rápido!](https://app.steemconnect.com/sign/account-witness-vote?witness=menkarbit&approve=true) |
| json metadata | |
| parent author | nbkmundotech |
| parent permlink | como-definir-estruturas-struct-na-linguagem-golang |
| permlink | re-como-definir-estruturas-struct-na-linguagem-golang-20190503t052121 |
| title | |
| Transaction Info | Block #32574975/Trx 43633f12ac137b508b946874ee80b2d2a90f4eb8 |
View Raw JSON Data
{
"block": 32574975,
"op": [
"comment",
{
"author": "menkarbit",
"body": "Obrigado por postar! Esse comentário é o novo bot que dará upvote 5% para todos os posts que usam a tag #pt. [Ainda não votou em mim como witness? Clique aqui e dê o seu voto! É rápido!](https://app.steemconnect.com/sign/account-witness-vote?witness=menkarbit&approve=true)",
"json_metadata": "",
"parent_author": "nbkmundotech",
"parent_permlink": "como-definir-estruturas-struct-na-linguagem-golang",
"permlink": "re-como-definir-estruturas-struct-na-linguagem-golang-20190503t052121",
"title": ""
}
],
"op_in_trx": 0,
"timestamp": "2019-05-03T05:21:21",
"trx_id": "43633f12ac137b508b946874ee80b2d2a90f4eb8",
"trx_in_block": 22,
"virtual_op": 0
}menkarbitupvoted (5.00%) @nbkmundotech / como-definir-estruturas-struct-na-linguagem-golang2019/05/03 05:21:21
menkarbitupvoted (5.00%) @nbkmundotech / como-definir-estruturas-struct-na-linguagem-golang
2019/05/03 05:21:21
| author | nbkmundotech |
| permlink | como-definir-estruturas-struct-na-linguagem-golang |
| voter | menkarbit |
| weight | 500 (5.00%) |
| Transaction Info | Block #32574975/Trx b9a9c0f617bdedb14a2d08b0fb3ebcbb3bf3b517 |
View Raw JSON Data
{
"block": 32574975,
"op": [
"vote",
{
"author": "nbkmundotech",
"permlink": "como-definir-estruturas-struct-na-linguagem-golang",
"voter": "menkarbit",
"weight": 500
}
],
"op_in_trx": 0,
"timestamp": "2019-05-03T05:21:21",
"trx_id": "b9a9c0f617bdedb14a2d08b0fb3ebcbb3bf3b517",
"trx_in_block": 11,
"virtual_op": 0
}steeming-hotupvoted (0.01%) @nbkmundotech / como-definir-estruturas-struct-na-linguagem-golang2019/05/03 05:06:39
steeming-hotupvoted (0.01%) @nbkmundotech / como-definir-estruturas-struct-na-linguagem-golang
2019/05/03 05:06:39
| author | nbkmundotech |
| permlink | como-definir-estruturas-struct-na-linguagem-golang |
| voter | steeming-hot |
| weight | 1 (0.01%) |
| Transaction Info | Block #32574683/Trx 2c8b0d649cd156e64e8bc0ac8d04bb1d634bca15 |
View Raw JSON Data
{
"block": 32574683,
"op": [
"vote",
{
"author": "nbkmundotech",
"permlink": "como-definir-estruturas-struct-na-linguagem-golang",
"voter": "steeming-hot",
"weight": 1
}
],
"op_in_trx": 0,
"timestamp": "2019-05-03T05:06:39",
"trx_id": "2c8b0d649cd156e64e8bc0ac8d04bb1d634bca15",
"trx_in_block": 18,
"virtual_op": 0
}nbkmundotechpublished a new post: como-definir-estruturas-struct-na-linguagem-golang2019/05/03 05:05:36
nbkmundotechpublished a new post: como-definir-estruturas-struct-na-linguagem-golang
2019/05/03 05:05:36
| author | nbkmundotech |
| body | Às vezes temos dados que são relacionados e que seria melhor encapsula-los em uma só entidade. Em um jogo de duas dimensões, por exemplo, precisamos de duas variáveis para manter a posição do jogador. No plano cartesiano, definimos o ponto com os valores `(x, y)`. ``` var x int = 48 var y int = 63 ``` No código acima, declaramos duas variáveis de tipo inteiro, `x` e `y`, com valores `48` e `63`, respectivamente. Na linguagem Golang, podemos encapsular vários tipos de dados em uma só entidade chamada de *struct* (estrutura). Podemos criar uma estrutura da seguinte maneira: ``` type Posicao struct { X int Y int } ``` A estrutura acima contém dois campos: X e Y. Ambos são do tipo inteiro. Podemos criar estruturas literais assim: ``` Posicao{48, 63} ``` O código acima cria uma struct literal usando 48 para o valor de X e 63 para o valor Y. Note que nesse exemplo a ordem é importante. Podemos acessar os campos de uma estrutura usando o ponto (`.`) depois do nome da variável que mantém a estrutura: ``` var pos Posicao = Posicao{48, 63} fmt.Println(pos.X) fmt.Println(pos.Y) ``` A saída do programa acima é: ``` 48 63 ``` Para modificar os valores de uma estrutura, basta usar a operação de atribuição assim: ``` pos.X = 87 ``` O valor de X na estrutura será substituído por 87. Para aprender mais sobre *struct* em Golang, assista às aulas do NBK Mundo Tech: https://www.youtube.com/watch?v=o8pBu-Yo8_Y&list=PLUbb2i4BuuzCX8CLeArvx663_0a_hSguW Nos vemos lá! |
| json metadata | {"tags":["golang","go","struct","estrutura","pt"],"image":["https://img.youtube.com/vi/o8pBu-Yo8_Y/0.jpg"],"links":["https://www.youtube.com/watch?v=o8pBu-Yo8_Y&list=PLUbb2i4BuuzCX8CLeArvx663_0a_hSguW"],"app":"steemit/0.1","format":"markdown"} |
| parent author | |
| parent permlink | golang |
| permlink | como-definir-estruturas-struct-na-linguagem-golang |
| title | Como Definir Estruturas (Struct) na Linguagem Golang |
| Transaction Info | Block #32574662/Trx 37c9bcda17ccb2ba4267e5d6b0c56bbf2c0f6e6f |
View Raw JSON Data
{
"block": 32574662,
"op": [
"comment",
{
"author": "nbkmundotech",
"body": "Às vezes temos dados que são relacionados e que seria melhor encapsula-los em uma só entidade.\n\nEm um jogo de duas dimensões, por exemplo, precisamos de duas variáveis para manter a posição do jogador. No plano cartesiano, definimos o ponto com os valores `(x, y)`.\n\n```\nvar x int = 48\nvar y int = 63\n```\n\nNo código acima, declaramos duas variáveis de tipo inteiro, `x` e `y`, com valores `48` e `63`, respectivamente.\n\nNa linguagem Golang, podemos encapsular vários tipos de dados em uma só entidade chamada de *struct* (estrutura).\n\nPodemos criar uma estrutura da seguinte maneira:\n\n```\ntype Posicao struct {\n X int\n Y int\n}\n```\n\nA estrutura acima contém dois campos: X e Y. Ambos são do tipo inteiro. Podemos criar estruturas literais assim:\n\n```\nPosicao{48, 63}\n```\n\nO código acima cria uma struct literal usando 48 para o valor de X e 63 para o valor Y. Note que nesse exemplo a ordem é importante.\n\nPodemos acessar os campos de uma estrutura usando o ponto (`.`) depois do nome da variável que mantém a estrutura:\n\n```\nvar pos Posicao = Posicao{48, 63}\n\nfmt.Println(pos.X)\nfmt.Println(pos.Y)\n```\n\nA saída do programa acima é:\n\n```\n48\n63\n```\n\nPara modificar os valores de uma estrutura, basta usar a operação de atribuição assim:\n\n```\npos.X = 87\n```\n\nO valor de X na estrutura será substituído por 87.\n\nPara aprender mais sobre *struct* em Golang, assista às aulas do NBK Mundo Tech:\n\nhttps://www.youtube.com/watch?v=o8pBu-Yo8_Y&list=PLUbb2i4BuuzCX8CLeArvx663_0a_hSguW\n\nNos vemos lá!",
"json_metadata": "{\"tags\":[\"golang\",\"go\",\"struct\",\"estrutura\",\"pt\"],\"image\":[\"https://img.youtube.com/vi/o8pBu-Yo8_Y/0.jpg\"],\"links\":[\"https://www.youtube.com/watch?v=o8pBu-Yo8_Y&list=PLUbb2i4BuuzCX8CLeArvx663_0a_hSguW\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
"parent_author": "",
"parent_permlink": "golang",
"permlink": "como-definir-estruturas-struct-na-linguagem-golang",
"title": "Como Definir Estruturas (Struct) na Linguagem Golang"
}
],
"op_in_trx": 0,
"timestamp": "2019-05-03T05:05:36",
"trx_id": "37c9bcda17ccb2ba4267e5d6b0c56bbf2c0f6e6f",
"trx_in_block": 8,
"virtual_op": 0
}alinequeirozupvoted (50.00%) @nbkmundotech / como-definir-ponteiros-na-linguagem-golang2019/05/03 02:32:57
alinequeirozupvoted (50.00%) @nbkmundotech / como-definir-ponteiros-na-linguagem-golang
2019/05/03 02:32:57
| author | nbkmundotech |
| permlink | como-definir-ponteiros-na-linguagem-golang |
| voter | alinequeiroz |
| weight | 5000 (50.00%) |
| Transaction Info | Block #32571612/Trx a02154cc66ded7d8bba99653516bd5891a1ee8b0 |
View Raw JSON Data
{
"block": 32571612,
"op": [
"vote",
{
"author": "nbkmundotech",
"permlink": "como-definir-ponteiros-na-linguagem-golang",
"voter": "alinequeiroz",
"weight": 5000
}
],
"op_in_trx": 0,
"timestamp": "2019-05-03T02:32:57",
"trx_id": "a02154cc66ded7d8bba99653516bd5891a1ee8b0",
"trx_in_block": 24,
"virtual_op": 0
}coiotesupvoted (50.00%) @nbkmundotech / como-definir-ponteiros-na-linguagem-golang2019/05/03 02:32:57
coiotesupvoted (50.00%) @nbkmundotech / como-definir-ponteiros-na-linguagem-golang
2019/05/03 02:32:57
| author | nbkmundotech |
| permlink | como-definir-ponteiros-na-linguagem-golang |
| voter | coiotes |
| weight | 5000 (50.00%) |
| Transaction Info | Block #32571612/Trx 855b5a2d0624c7226bb3b5596d4d43366c3b7a4a |
View Raw JSON Data
{
"block": 32571612,
"op": [
"vote",
{
"author": "nbkmundotech",
"permlink": "como-definir-ponteiros-na-linguagem-golang",
"voter": "coiotes",
"weight": 5000
}
],
"op_in_trx": 0,
"timestamp": "2019-05-03T02:32:57",
"trx_id": "855b5a2d0624c7226bb3b5596d4d43366c3b7a4a",
"trx_in_block": 22,
"virtual_op": 0
}coyotelationupvoted (50.00%) @nbkmundotech / como-definir-ponteiros-na-linguagem-golang2019/05/03 02:32:33
coyotelationupvoted (50.00%) @nbkmundotech / como-definir-ponteiros-na-linguagem-golang
2019/05/03 02:32:33
| author | nbkmundotech |
| permlink | como-definir-ponteiros-na-linguagem-golang |
| voter | coyotelation |
| weight | 5000 (50.00%) |
| Transaction Info | Block #32571604/Trx a7a5ff032d6bedd6713201d9cfd9abda00c98acd |
View Raw JSON Data
{
"block": 32571604,
"op": [
"vote",
{
"author": "nbkmundotech",
"permlink": "como-definir-ponteiros-na-linguagem-golang",
"voter": "coyotelation",
"weight": 5000
}
],
"op_in_trx": 0,
"timestamp": "2019-05-03T02:32:33",
"trx_id": "a7a5ff032d6bedd6713201d9cfd9abda00c98acd",
"trx_in_block": 10,
"virtual_op": 0
}2019/05/03 01:56:51
2019/05/03 01:56:51
| author | menkarbit |
| body | Obrigado por postar! Esse comentário é o novo bot que dará upvote 5% para todos os posts que usam a tag #pt. [Ainda não votou em mim como witness? Clique aqui e dê o seu voto! É rápido!](https://app.steemconnect.com/sign/account-witness-vote?witness=menkarbit&approve=true) |
| json metadata | |
| parent author | nbkmundotech |
| parent permlink | como-definir-ponteiros-na-linguagem-golang |
| permlink | re-como-definir-ponteiros-na-linguagem-golang-20190503t015649 |
| title | |
| Transaction Info | Block #32570892/Trx df35e01efae1dc1eadbf18c4c2b40da0abc38d88 |
View Raw JSON Data
{
"block": 32570892,
"op": [
"comment",
{
"author": "menkarbit",
"body": "Obrigado por postar! Esse comentário é o novo bot que dará upvote 5% para todos os posts que usam a tag #pt. [Ainda não votou em mim como witness? Clique aqui e dê o seu voto! É rápido!](https://app.steemconnect.com/sign/account-witness-vote?witness=menkarbit&approve=true)",
"json_metadata": "",
"parent_author": "nbkmundotech",
"parent_permlink": "como-definir-ponteiros-na-linguagem-golang",
"permlink": "re-como-definir-ponteiros-na-linguagem-golang-20190503t015649",
"title": ""
}
],
"op_in_trx": 0,
"timestamp": "2019-05-03T01:56:51",
"trx_id": "df35e01efae1dc1eadbf18c4c2b40da0abc38d88",
"trx_in_block": 1,
"virtual_op": 0
}menkarbitupvoted (5.00%) @nbkmundotech / como-definir-ponteiros-na-linguagem-golang2019/05/03 01:56:48
menkarbitupvoted (5.00%) @nbkmundotech / como-definir-ponteiros-na-linguagem-golang
2019/05/03 01:56:48
| author | nbkmundotech |
| permlink | como-definir-ponteiros-na-linguagem-golang |
| voter | menkarbit |
| weight | 500 (5.00%) |
| Transaction Info | Block #32570891/Trx ece19d682522c9ee62689568000bb141681ae729 |
View Raw JSON Data
{
"block": 32570891,
"op": [
"vote",
{
"author": "nbkmundotech",
"permlink": "como-definir-ponteiros-na-linguagem-golang",
"voter": "menkarbit",
"weight": 500
}
],
"op_in_trx": 0,
"timestamp": "2019-05-03T01:56:48",
"trx_id": "ece19d682522c9ee62689568000bb141681ae729",
"trx_in_block": 43,
"virtual_op": 0
}nbkmundotechpublished a new post: como-definir-ponteiros-na-linguagem-golang2019/05/03 01:48:21
nbkmundotechpublished a new post: como-definir-ponteiros-na-linguagem-golang
2019/05/03 01:48:21
| author | nbkmundotech |
| body | @@ -829,17 +829,17 @@ %5Cn%22, *p) - +%0A // =%3E O @@ -981,9 +981,8 @@ %0A%60%60%60 -%0D %0A*p |
| json metadata | {"tags":["golang","ponteiros","pointer","go","pt"],"image":["https://img.youtube.com/vi/BBUQZ7pJxn4/0.jpg"],"links":["https://www.youtube.com/watch?v=BBUQZ7pJxn4&list=PLUbb2i4BuuzCX8CLeArvx663_0a_hSguW"],"app":"steemit/0.1","format":"markdown"} |
| parent author | |
| parent permlink | golang |
| permlink | como-definir-ponteiros-na-linguagem-golang |
| title | Como Definir Ponteiros na Linguagem Golang |
| Transaction Info | Block #32570722/Trx e7936e036c9f2718bd43c49656ee176b4317e992 |
View Raw JSON Data
{
"block": 32570722,
"op": [
"comment",
{
"author": "nbkmundotech",
"body": "@@ -829,17 +829,17 @@\n %5Cn%22, *p)\n- \n+%0A\n // =%3E O \n@@ -981,9 +981,8 @@\n %0A%60%60%60\n-%0D\n %0A*p \n",
"json_metadata": "{\"tags\":[\"golang\",\"ponteiros\",\"pointer\",\"go\",\"pt\"],\"image\":[\"https://img.youtube.com/vi/BBUQZ7pJxn4/0.jpg\"],\"links\":[\"https://www.youtube.com/watch?v=BBUQZ7pJxn4&list=PLUbb2i4BuuzCX8CLeArvx663_0a_hSguW\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
"parent_author": "",
"parent_permlink": "golang",
"permlink": "como-definir-ponteiros-na-linguagem-golang",
"title": "Como Definir Ponteiros na Linguagem Golang"
}
],
"op_in_trx": 0,
"timestamp": "2019-05-03T01:48:21",
"trx_id": "e7936e036c9f2718bd43c49656ee176b4317e992",
"trx_in_block": 46,
"virtual_op": 0
}nbkmundotechpublished a new post: como-definir-ponteiros-na-linguagem-golang2019/05/03 01:41:06
nbkmundotechpublished a new post: como-definir-ponteiros-na-linguagem-golang
2019/05/03 01:41:06
| author | nbkmundotech |
| body | Ponteiros são variáveis que armazenam o endereço da memória usada por uma certa informação. Por exemplo, vamos definir uma variável para armazenar um valor inteiro: ``` var a int = 37 ``` A variável `a` armazena o valor 37, um inteiro, na memória. Para criar um ponteiro que aponta para o endereço da variável `a`, usamos a seguinte notação: ``` var p *int = &a ``` Na expressão acima, declaramos um ponteiro com nome `p`. O tipo de dados é um ponteiro para um `int`, por isso tem um asterisco antes de `int`. No lado direito do sinal de igual, temos o *ampersand* & para obter o endereço da variável `a`. Com o ponteiro `p` acima, podemos acessar o valor apontado por ele usando o operador de desreferenciação (*dereferencing*), que é um asterisco antes do nome da variável: ``` fmt.Printf("O valor apontado por p é %d\n", *p) // => O valor apontado por p é 37 ``` Podemos também modificar o valor referenciado pelo ponteiro fazendo uma atribuição da seguinte maneira: ``` *p = 62 ``` Ao imprimir o valor de `a`, veremos que ele mudou: ``` fmt.Println(a) // => 62 ``` Para aprender mais sobre como definir ponteiros na linguagem Golang, assista à aula do NBK Mundo Tech: https://www.youtube.com/watch?v=BBUQZ7pJxn4&list=PLUbb2i4BuuzCX8CLeArvx663_0a_hSguW Nos vemos lá! |
| json metadata | {"tags":["golang","ponteiros","pointer","go","pt"],"image":["https://img.youtube.com/vi/BBUQZ7pJxn4/0.jpg"],"links":["https://www.youtube.com/watch?v=BBUQZ7pJxn4&list=PLUbb2i4BuuzCX8CLeArvx663_0a_hSguW"],"app":"steemit/0.1","format":"markdown"} |
| parent author | |
| parent permlink | golang |
| permlink | como-definir-ponteiros-na-linguagem-golang |
| title | Como Definir Ponteiros na Linguagem Golang |
| Transaction Info | Block #32570577/Trx 50a96e57de1b5762d5498f386686a93210338110 |
View Raw JSON Data
{
"block": 32570577,
"op": [
"comment",
{
"author": "nbkmundotech",
"body": "Ponteiros são variáveis que armazenam o endereço da memória usada por uma certa informação.\n\nPor exemplo, vamos definir uma variável para armazenar um valor inteiro:\n\n```\nvar a int = 37\n``` \n\nA variável `a` armazena o valor 37, um inteiro, na memória.\n\nPara criar um ponteiro que aponta para o endereço da variável `a`, usamos a seguinte notação:\n\n```\nvar p *int = &a\n```\n\nNa expressão acima, declaramos um ponteiro com nome `p`. O tipo de dados é um ponteiro para um `int`, por isso tem um asterisco antes de `int`. No lado direito do sinal de igual, temos o *ampersand* & para obter o endereço da variável `a`.\n\nCom o ponteiro `p` acima, podemos acessar o valor apontado por ele usando o operador de desreferenciação (*dereferencing*), que é um asterisco antes do nome da variável:\n\n```\nfmt.Printf(\"O valor apontado por p é %d\\n\", *p) // => O valor apontado por p é 37\n```\n\nPodemos também modificar o valor referenciado pelo ponteiro fazendo uma atribuição da seguinte maneira:\n\n```\r\n*p = 62\n```\n\nAo imprimir o valor de `a`, veremos que ele mudou:\n\n```\nfmt.Println(a) // => 62\n```\n\nPara aprender mais sobre como definir ponteiros na linguagem Golang, assista à aula do NBK Mundo Tech:\n\nhttps://www.youtube.com/watch?v=BBUQZ7pJxn4&list=PLUbb2i4BuuzCX8CLeArvx663_0a_hSguW\n\nNos vemos lá!",
"json_metadata": "{\"tags\":[\"golang\",\"ponteiros\",\"pointer\",\"go\",\"pt\"],\"image\":[\"https://img.youtube.com/vi/BBUQZ7pJxn4/0.jpg\"],\"links\":[\"https://www.youtube.com/watch?v=BBUQZ7pJxn4&list=PLUbb2i4BuuzCX8CLeArvx663_0a_hSguW\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
"parent_author": "",
"parent_permlink": "golang",
"permlink": "como-definir-ponteiros-na-linguagem-golang",
"title": "Como Definir Ponteiros na Linguagem Golang"
}
],
"op_in_trx": 0,
"timestamp": "2019-05-03T01:41:06",
"trx_id": "50a96e57de1b5762d5498f386686a93210338110",
"trx_in_block": 32,
"virtual_op": 0
}2019/05/01 21:09:06
2019/05/01 21:09:06
| author | menkarbit |
| body | Obrigado por postar! Esse comentário é o novo bot que dará upvote 5% para todos os posts que usam a tag #pt. [Ainda não votou em mim como witness? Clique aqui e dê o seu voto! É rápido!](https://app.steemconnect.com/sign/account-witness-vote?witness=menkarbit&approve=true) |
| json metadata | |
| parent author | nbkmundotech |
| parent permlink | como-adiar-defer-a-execucao-de-funcoes-na-linguagem-golang |
| permlink | re-como-adiar-defer-a-execucao-de-funcoes-na-linguagem-golang-20190501t210904 |
| title | |
| Transaction Info | Block #32536356/Trx b89a9df59f33704867389cd1f93453f4b2c2ac6d |
View Raw JSON Data
{
"block": 32536356,
"op": [
"comment",
{
"author": "menkarbit",
"body": "Obrigado por postar! Esse comentário é o novo bot que dará upvote 5% para todos os posts que usam a tag #pt. [Ainda não votou em mim como witness? Clique aqui e dê o seu voto! É rápido!](https://app.steemconnect.com/sign/account-witness-vote?witness=menkarbit&approve=true)",
"json_metadata": "",
"parent_author": "nbkmundotech",
"parent_permlink": "como-adiar-defer-a-execucao-de-funcoes-na-linguagem-golang",
"permlink": "re-como-adiar-defer-a-execucao-de-funcoes-na-linguagem-golang-20190501t210904",
"title": ""
}
],
"op_in_trx": 0,
"timestamp": "2019-05-01T21:09:06",
"trx_id": "b89a9df59f33704867389cd1f93453f4b2c2ac6d",
"trx_in_block": 7,
"virtual_op": 0
}2019/05/01 21:09:03
2019/05/01 21:09:03
| author | nbkmundotech |
| permlink | como-adiar-defer-a-execucao-de-funcoes-na-linguagem-golang |
| voter | menkarbit |
| weight | 500 (5.00%) |
| Transaction Info | Block #32536355/Trx 65703c70f6a0654d6091b7cc368a5681bcc1264d |
View Raw JSON Data
{
"block": 32536355,
"op": [
"vote",
{
"author": "nbkmundotech",
"permlink": "como-adiar-defer-a-execucao-de-funcoes-na-linguagem-golang",
"voter": "menkarbit",
"weight": 500
}
],
"op_in_trx": 0,
"timestamp": "2019-05-01T21:09:03",
"trx_id": "65703c70f6a0654d6091b7cc368a5681bcc1264d",
"trx_in_block": 28,
"virtual_op": 0
}2019/05/01 20:58:39
2019/05/01 20:58:39
| author | nbkmundotech |
| permlink | como-adiar-defer-a-execucao-de-funcoes-na-linguagem-golang |
| voter | modemser |
| weight | 100 (1.00%) |
| Transaction Info | Block #32536147/Trx e34b7a3c7036bf51444f01b9d457f77aaa01994e |
View Raw JSON Data
{
"block": 32536147,
"op": [
"vote",
{
"author": "nbkmundotech",
"permlink": "como-adiar-defer-a-execucao-de-funcoes-na-linguagem-golang",
"voter": "modemser",
"weight": 100
}
],
"op_in_trx": 0,
"timestamp": "2019-05-01T20:58:39",
"trx_id": "e34b7a3c7036bf51444f01b9d457f77aaa01994e",
"trx_in_block": 0,
"virtual_op": 0
}nbkmundotechpublished a new post: como-adiar-defer-a-execucao-de-funcoes-na-linguagem-golang2019/05/01 20:53:45
nbkmundotechpublished a new post: como-adiar-defer-a-execucao-de-funcoes-na-linguagem-golang
2019/05/01 20:53:45
| author | nbkmundotech |
| body | As linhas de código em Golang são normalmente executadas em sequência, na ordem em que são escritas. Mas será que há alguma maneira de adiar a chamada de uma certa função? A resposta é sim, usando a palavra-chave **defer**. Vamos aprender o conceito de adiar uma chamada de função com um exemplo. No código abaixo, temos duas linhas (dentro do corpo da função `main`) que imprimem texto ao console. ``` func main() { fmt.Println("Oi") fmt.Println("Tudo bem?") } ``` A ordem de execução dos comandos é como escrita, então esperamos ver o seguinte no terminal: ``` Oi Tudo bem? ``` Agora, o que será que acontece quando introduzimos a palavra-chave `defer` antes da chamada da primeira linha do corpo de `main`: ``` func main() { defer fmt.Println("Oi") fmt.Println("Tudo bem?") } ``` Aqui está a saída do código acima: ``` Tudo bem? Oi ``` Note que a segunda linha foi executada antes da primeira. Mas o que aconteceu? Bem, a palavra-chave **defer** faz a chamada da função que segue ser adiada. Em mais detalhes, há uma *stack* de chamadas. Essa pilha armazena todas as chamadas que foram adiadas usando `defer`. Se tivermos três chamadas para o `defer`, como o seguinte: ``` defer fmt.Println("1") defer fmt.Println("2") defer fmt.Println("3") ``` Então as três chamadas serão adicionadas a pilha de chamadas, na seguinte ordem, do topo para o fundo: ``` // topo da stack fmt.Println("3") fmt.Println("2") fmt.Println("1") // fundo da stack ``` Quando chegar no final do corpo da função `main()`, os comandos armazenados nessa stack serão executados, começando do topo da stack. Então a primeira chamada a ser adiada na verdade será a última a ser executada; A última chamada a ser adiada será a primeira a ser executada. Isso segue o conceito de *last-in-first-out* (LIFO): a última entrada é a primeira saída. Para concluir, no último exemplo veremos a seguinte saída: ``` 3 2 1 ``` Para aprender mais sobre o `defer`, assista às aulas do NBK Mundo Tech: https://www.youtube.com/watch?v=meofoK5_OCI&list=PLUbb2i4BuuzCX8CLeArvx663_0a_hSguW |
| json metadata | {"tags":["golang","defer","go","pt"],"image":["https://img.youtube.com/vi/meofoK5_OCI/0.jpg"],"links":["https://www.youtube.com/watch?v=meofoK5_OCI&list=PLUbb2i4BuuzCX8CLeArvx663_0a_hSguW"],"app":"steemit/0.1","format":"markdown"} |
| parent author | |
| parent permlink | golang |
| permlink | como-adiar-defer-a-execucao-de-funcoes-na-linguagem-golang |
| title | Como Adiar (defer) a Execução de Funções na Linguagem Golang |
| Transaction Info | Block #32536049/Trx 03f2c276d8d22882c69e6e7ac18a6894d42866f3 |
View Raw JSON Data
{
"block": 32536049,
"op": [
"comment",
{
"author": "nbkmundotech",
"body": "As linhas de código em Golang são normalmente executadas em sequência, na ordem em que são escritas. Mas será que há alguma maneira de adiar a chamada de uma certa função?\n\nA resposta é sim, usando a palavra-chave **defer**. Vamos aprender o conceito de adiar uma chamada de função com um exemplo. No código abaixo, temos duas linhas (dentro do corpo da função `main`) que imprimem texto ao console.\n\n```\nfunc main() {\n fmt.Println(\"Oi\")\n fmt.Println(\"Tudo bem?\")\n}\n```\n\nA ordem de execução dos comandos é como escrita, então esperamos ver o seguinte no terminal:\n\n```\nOi\nTudo bem?\n```\n\nAgora, o que será que acontece quando introduzimos a palavra-chave `defer` antes da chamada da primeira linha do corpo de `main`:\n\n```\nfunc main() {\n defer fmt.Println(\"Oi\")\n fmt.Println(\"Tudo bem?\")\n}\n```\n\nAqui está a saída do código acima:\n\n```\nTudo bem?\nOi\n```\n\nNote que a segunda linha foi executada antes da primeira. Mas o que aconteceu? Bem, a palavra-chave **defer** faz a chamada da função que segue ser adiada. \n\nEm mais detalhes, há uma *stack* de chamadas. Essa pilha armazena todas as chamadas que foram adiadas usando `defer`. Se tivermos três chamadas para o `defer`, como o seguinte:\n\n```\ndefer fmt.Println(\"1\")\ndefer fmt.Println(\"2\")\ndefer fmt.Println(\"3\")\n```\n\nEntão as três chamadas serão adicionadas a pilha de chamadas, na seguinte ordem, do topo para o fundo:\n\n```\n// topo da stack\nfmt.Println(\"3\")\nfmt.Println(\"2\")\nfmt.Println(\"1\")\n// fundo da stack\n```\n\nQuando chegar no final do corpo da função `main()`, os comandos armazenados nessa stack serão executados, começando do topo da stack.\n\nEntão a primeira chamada a ser adiada na verdade será a última a ser executada;\n\nA última chamada a ser adiada será a primeira a ser executada.\n\nIsso segue o conceito de *last-in-first-out* (LIFO): a última entrada é a primeira saída.\n\nPara concluir, no último exemplo veremos a seguinte saída:\n\n```\n3\n2\n1\n```\n\nPara aprender mais sobre o `defer`, assista às aulas do NBK Mundo Tech:\n\nhttps://www.youtube.com/watch?v=meofoK5_OCI&list=PLUbb2i4BuuzCX8CLeArvx663_0a_hSguW",
"json_metadata": "{\"tags\":[\"golang\",\"defer\",\"go\",\"pt\"],\"image\":[\"https://img.youtube.com/vi/meofoK5_OCI/0.jpg\"],\"links\":[\"https://www.youtube.com/watch?v=meofoK5_OCI&list=PLUbb2i4BuuzCX8CLeArvx663_0a_hSguW\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
"parent_author": "",
"parent_permlink": "golang",
"permlink": "como-adiar-defer-a-execucao-de-funcoes-na-linguagem-golang",
"title": "Como Adiar (defer) a Execução de Funções na Linguagem Golang"
}
],
"op_in_trx": 0,
"timestamp": "2019-05-01T20:53:45",
"trx_id": "03f2c276d8d22882c69e6e7ac18a6894d42866f3",
"trx_in_block": 27,
"virtual_op": 0
}markitoeliasupvoted (100.00%) @nbkmundotech / slices-de-duas-dimensoes-matriz-na-linguagem-golang2019/04/27 03:09:51
markitoeliasupvoted (100.00%) @nbkmundotech / slices-de-duas-dimensoes-matriz-na-linguagem-golang
2019/04/27 03:09:51
| author | nbkmundotech |
| permlink | slices-de-duas-dimensoes-matriz-na-linguagem-golang |
| voter | markitoelias |
| weight | 10000 (100.00%) |
| Transaction Info | Block #32399652/Trx becfcd39805b0be65eeb9c0abdf896e2078b9e15 |
View Raw JSON Data
{
"block": 32399652,
"op": [
"vote",
{
"author": "nbkmundotech",
"permlink": "slices-de-duas-dimensoes-matriz-na-linguagem-golang",
"voter": "markitoelias",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2019-04-27T03:09:51",
"trx_id": "becfcd39805b0be65eeb9c0abdf896e2078b9e15",
"trx_in_block": 4,
"virtual_op": 0
}Manabar
Voting Power100.00%
Downvote Power100.00%
Resource Credits100.00%
Reputation Progress61.08%
{
"voting_manabar": {
"current_mana": "8143659806",
"last_update_time": 1779078084
},
"downvote_manabar": {
"current_mana": 2035914951,
"last_update_time": 1779078084
},
"rc_account": {
"account": "nbkmundotech",
"max_rc": "10164408779",
"max_rc_creation_adjustment": {
"amount": "2020748973",
"nai": "@@000000037",
"precision": 6
},
"rc_manabar": {
"current_mana": "10164408779",
"last_update_time": 1779078084
}
}
}Account Metadata
| POSTING JSON METADATA | |
| profile | {"name":"NBK Mundo Tech","about":"Aulas de desenvolvimento de software online","website":"https://www.youtube.com/channel/UC0leK16nPQYAErHagb8-eEg","profile_image":"https://cdn.steemitimages.com/DQme5LrKF79yK4GJxAq37SKhiZhrofXSXLgARXZRCdaWzdd/nbkmundotech_thumb128.png"} |
| JSON METADATA | |
| profile | {"name":"NBK Mundo Tech","about":"Aulas de desenvolvimento de software online","website":"https://www.youtube.com/channel/UC0leK16nPQYAErHagb8-eEg","profile_image":"https://cdn.steemitimages.com/DQme5LrKF79yK4GJxAq37SKhiZhrofXSXLgARXZRCdaWzdd/nbkmundotech_thumb128.png"} |
{
"posting_json_metadata": {
"profile": {
"name": "NBK Mundo Tech",
"about": "Aulas de desenvolvimento de software online",
"website": "https://www.youtube.com/channel/UC0leK16nPQYAErHagb8-eEg",
"profile_image": "https://cdn.steemitimages.com/DQme5LrKF79yK4GJxAq37SKhiZhrofXSXLgARXZRCdaWzdd/nbkmundotech_thumb128.png"
}
},
"json_metadata": {
"profile": {
"name": "NBK Mundo Tech",
"about": "Aulas de desenvolvimento de software online",
"website": "https://www.youtube.com/channel/UC0leK16nPQYAErHagb8-eEg",
"profile_image": "https://cdn.steemitimages.com/DQme5LrKF79yK4GJxAq37SKhiZhrofXSXLgARXZRCdaWzdd/nbkmundotech_thumb128.png"
}
}
}Auth Keys
Owner
Single Signature
Public Keys
STM63escPs2eC5Hs6cXpypLRGFYNLpJvR44RQ61mcuvabaT7ob1BD1/1
Active
Single Signature
Public Keys
STM6q7HUyECuQNsEifebVyx5rcirnh1RmEd8yhmpm7uSSdshCLomB1/1
Posting
Single Signature
Public Keys
STM5ayb2wPNpkMcMVZbxWU1oMoFs7CjzvgEn6tDP5fDLwSZMi679P1/1
Memo
STM4zaQ2y9uE3Hvhoe8Hfc152FmbuwZYhJa8D1LegRCn3itKDDCrE
{
"owner": {
"account_auths": [],
"key_auths": [
[
"STM63escPs2eC5Hs6cXpypLRGFYNLpJvR44RQ61mcuvabaT7ob1BD",
1
]
],
"weight_threshold": 1
},
"active": {
"account_auths": [],
"key_auths": [
[
"STM6q7HUyECuQNsEifebVyx5rcirnh1RmEd8yhmpm7uSSdshCLomB",
1
]
],
"weight_threshold": 1
},
"posting": {
"account_auths": [],
"key_auths": [
[
"STM5ayb2wPNpkMcMVZbxWU1oMoFs7CjzvgEn6tDP5fDLwSZMi679P",
1
]
],
"weight_threshold": 1
},
"memo": "STM4zaQ2y9uE3Hvhoe8Hfc152FmbuwZYhJa8D1LegRCn3itKDDCrE"
}Witness Votes
0 / 30
No active witness votes.
[]